当谈到主题词 2007 docx、词 97-2004 doc、pdf 和所有其他类型的 MS Office 希望“从 y 转换为 z”时,我的 2 美分但实际上他们不想成为”。根据我目前的经验,不能依赖 LibreOffice 或 OpenOffice 的转换。尽管.doc 文档往往比word 2007 的.docx 得到更好的支持。一般来说,在不破坏任何东西的情况下,很难将.docx 转换为.doc。
.docx 对于.doc 不是二进制的模板也往往非常有用。
从.doc 到 PDF 的转换在大多数情况下都非常可靠。如果您仍然可以影响 word 文档的设计或内容,那么这可能会令人满意,但在我的情况下,文档是由外国公司提供的,即使在生成 .docx 模板之后,在某些情况下,生成的 .docx 必须在生成 PDF 之前,用补充文本稍微修改一下。
基于 Windows!
所有这些问题让我得出结论,我发现的唯一真正可靠的转换方法是在 PHP 中使用 COM 类,让 MS Word 或 Excel 应用程序为您完成所有工作。我将仅举一个将.docx 转换为.doc 和/或PDF 的示例。如果您没有安装 MS Office,您可以下载 60 天的trial 版本,这将为您提供足够的空间进行测试。
默认情况下,COM.net 扩展名在 php.ini 中被注释掉,只需搜索行 php_com_dotnet.dll 并像这样取消注释
extension=php_com_dotnet.dll
重启网络服务器(IIS 不是 pre,Apache 也可以)。
下面的代码演示了它的简单性。
$word = new COM("Word.Application") or die ("Could not initialise Object.");
// set it to 1 to see the MS Word window (the actual opening of the document)
$word->Visible = 0;
// recommend to set to 0, disables alerts like "Do you want MS Word to be the default .. etc"
$word->DisplayAlerts = 0;
// open the word 2007-2013 document
$word->Documents->Open('yourdocument.docx');
// save it as word 2003
$word->ActiveDocument->SaveAs('newdocument.doc');
// convert word 2007-2013 to PDF
$word->ActiveDocument->ExportAsFixedFormat('yourdocument.pdf', 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);
// quit the Word process
$word->Quit(false);
// clean up
unset($word);
这只是一个小演示。我只能说,如果涉及到转换,这是我可以使用甚至推荐的唯一真正可靠的选择。