PHP 创建和格式化 Microsoft Word 文档

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17531889/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 16:02:47  来源:igfitidea点击:

PHP create and format a Microsoft Word document

phpms-word

提问by Tyler H

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.

我希望使用 PHP 来创建 Microsoft Word 文档。在网上查看后,我发现大多数提供的解决方案只是创建一个没有进行任何格式化的 .doc。我想知道创建 Word 文档的最佳方法是什么,我可以在 PHP 中设置它的格式,即为我的公司更改字体、颜色、大小等。我猜这需要某种图书馆。任何答复将不胜感激。

回答by ivanlanin

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

您可以使用PHPWord。它是一个 PHP 库,可以创建 DOCX 以及一些格式。

回答by dave

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

以 HTML 格式构建动态 Word 文档的内容,以及一些 Office 特定的样式属性。

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

回答by The Dude

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

戴夫的代码对我有用。我在我的 PHP 代码中像这样使用了它。这将在打印布局中打开。

<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>

回答by Jake Bown

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

您可以使用纯文本和变量来完成它,而无需在 HTML 中打开它 - 请参阅此处http://www.jakebown.com/?p=77