6

I was looking to use PHP to create a Microsoft Word document. After looking online I found that most of the offered solutions were to just create an .doc that had not formatting done whatsoever. I was wondering what would be the best way to create a Word document that I could format in PHP i.e. change font, color, size, etc. for my company. I am guessing that some sort of library would be needed for this. Any responses would be greatly appreciated.

Kara
  • 6,115
  • 16
  • 50
  • 57
Tyler Hilbert
  • 2,107
  • 7
  • 35
  • 55

4 Answers4

5

You can use PHPWord. It's a PHP library that can create DOCX along with some formatting.

ivanlanin
  • 121
  • 2
  • 4
3

Build the content for the dynamic Word document in HTML, along with some Office specific style properties.

Public Sub Page_Load(sender as Object, e as EventArgs)
    Dim strBody As New System.Text.StringBuilder("")

    strBody.Append("<html " & 
        "xmlns:o='urn:schemas-microsoft-com:office:office' " & 
        "xmlns:w='urn:schemas-microsoft-com:office:word'" & 
        "xmlns='http://www.w3.org/TR/REC-html40'>" &
        "<head><title>Time</title>") 

    //The setting specifies document's view after it is downloaded as Print instead of the default Web Layout
    strBody.Append("<!--[if gte mso 9]>" & 
                         "<xml>" & 
                         "<w:WordDocument>" & 
                         "<w:View>Print</w:View>" & 
                         "<w:Zoom>90</w:Zoom>" & 
                         "<w:DoNotOptimizeForBrowser/>" & 
                         "</w:WordDocument>" & 
                         "</xml>" & 
                         "<![endif]-->")

    strBody.Append("<style>" & 
                        "<!-- /* Style Definitions */" & 
                        "@page Section1" & 
                        "   {size:8.5in 11.0in; " & 
                        "   margin:1.0in 1.25in 1.0in 1.25in ; " & 
                        "   mso-header-margin:.5in; " & 
                        "   mso-footer-margin:.5in; mso-paper-source:0;}" & _
                        " div.Section1" & 
                        "   {page:Section1;}" & 
                        "-->" & 
                       "</style></head>") 

    strBody.Append("<body lang=EN-US style='tab-interval:.5in'>" &
                        "<div class=Section1>" & _
                        "<h1>Time and tide wait for none</h1>" & 
                        "<p style='color:red'><I>" & 
                        DateTime.Now & "</I></p>" & 
                        "</div></body></html>") 

    // Force this content to be downloaded as a Word document with the name of your choice
    Response.AppendHeader("Content-Type", "application/msword")
    Response.AppendHeader ("Content-disposition", "attachment;filename=myword.doc")
    Response.Write(strBody)
End Sub
Nic
  • 12,220
  • 20
  • 77
  • 105
dave
  • 31
  • 1
0

dave's code works for me. I have used it like this in my PHP code. This opens in print layout.

<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'>

<head>
    <title>Time</title>

    <!--[if gte mso 9]>
    <xml>
        <w:WordDocument>
            <w:View>Print</w:View>
            <w:Zoom>100</w:Zoom>
            <w:DoNotOptimizeForBrowser/>
        </w:WordDocument>
    </xml>
    <![endif]-->

    <style>
        @page Section1 {
            size: 8.5in 11.0in;
            margin: 1.0in 1.25in 1.0in 1.25in ;
            mso-header-margin: .5in;
            mso-footer-margin: .5in;
            mso-paper-source: 0;
        }

        div.Section1 {
            page: Section1;
        }
    </style>
stackflow
  • 2,112
  • 6
  • 32
  • 45
-1

You can do it using plain text and variables whilst not having it open in HTML - see here http://www.jakebown.com/?p=77

Jake Bown
  • 411
  • 4
  • 11
  • 3
    Note that [link-only answers are discouraged](http://meta.stackoverflow.com/tags/link-only-answers/info), SO answers should be the end-point of a search for a solution (vs. yet another stopover of references, which tend to get stale over time). Please consider adding a stand-alone synopsis here, keeping the link as a reference. – kleopatra Aug 31 '13 at 12:51
  • Link is broken. – jor Mar 05 '19 at 12:38