如何在PHP中将HTML转换为DOC

7

我需要将一个html文件转换成doc格式。我正在使用html2pdf进行pdf转换。

是否有任何类似于html2doc的库?

(PS必须是免费/开源的)

编辑

在Mark Eirich的评论之后...

这里有两张屏幕截图。Word文档没有正确对齐。检查Word文档中的y滚动条。 WORD文档,检查y滚动条..

html文件,在浏览器中..

Body标签是:--

<body style="margin-left:350px; margin-right:350px;">

我尝试调整它但没有效果... 编辑2 在Mark Eirich的第二条评论后,我知道Word将东西以像素为单位而不是百分比。 我还有最后一个背景问题.. 请查看两个屏幕截图。 不同之处在于外框。 这就是为什么生成的HTML文档看起来很奇怪的原因。 原始Word文件 生成的HTML文档文件

Microsoft Word可以直接读取HTML文件,无需进行任何转换。只需将文件名以“.doc”结尾即可完成。 - Mark Eirich
@Mark Eirich,它没有以正确的方式工作...请检查编辑部分... - Mohit Jain
@piemesons:难过。我对Word没有太多经验。不过,你可以尝试以下方法:(1)在body上设置宽度,(2)以英寸“in”或厘米“cm”为单位设置页边距,或者(3)在body内部添加一个额外的包装器,并在其上设置边距/宽度;也许Word会忽略body标签。你还可以尝试在Word中生成HTML,然后查看它以了解Word是如何设置页边距的。 - Mark Eirich
@Mark Eirich 很棒,你的想法奏效了。实际上,Word 采用像素而不是百分比来处理事情,在修复这个问题后它可以工作。但我还有最后一个问题,请你帮忙看一下。有什么想法吗?非常感谢你。请查看编辑部分2。 - Mohit Jain
我的解决方案将是创建自己的解决方案,但说实话,微软总是把事情搞得过于复杂:http://msdn.microsoft.com/en-us/library/cc313153(v=office.12).aspx 而我们自己的 Joel 也这么说:http://www.joelonsoftware.com/items/2008/02/19.html - RobertPitt
@piemesons:不幸的是,我的色情过滤器屏蔽了imgur.com。其他人将不得不帮助你,或者你可以尝试在其他地方发布图片,比如http://tinygrab.com/。此外,您可能需要将您的HTML/CSS发布到某个地方,以便我自己尝试。另外,您还没有告诉我们您正在使用哪个版本的Word。 - Mark Eirich
2个回答

6
我认为答案是否定的,原因如下:
微软办公文档的设计非常复杂,它们不仅是带有图像等对象引用的格式化文件,而且还有一种文件系统来管理这些对象的二进制数据。
让我们引用一下我们自己的 Joel 的话:
如果你开始阅读这些文档,希望花一个周末编写一些漂亮的代码,将 Word 文档导入你的博客系统,或者创建带有个人财务数据的 Excel 格式电子表格,那么规范的复杂性和长度可能会让你很快放弃这种愿望。普通程序员会得出结论:Office 的二进制文件格式:
- 是故意混淆的 - 是疯狂博格心灵的产物 - 是由极差的程序员创造的 - 不可能正确地阅读或创建。
在这四点上你都错了....
向下阅读以获取可能的解决方案:
如果你真的想生成格式漂亮的Word文档,最好的方法是创建一个RTF文档。Word能做到的一切都可以在RTF中表达,但它是一种文本格式,而不是二进制格式,因此您可以更改RTF文档中的内容,它仍然有效。您可以在Word中创建带有占位符的漂亮格式的文档,另存为RTF,然后使用简单的文本替换,在运行时替换占位符。现在,您拥有了一个每个版本的Word都可以愉快地打开的RTF文档。
@来源: http://www.joelonsoftware.com/items/2008/02/19.html 一些可能会引起您兴趣的链接:

虽然,尝试用WinRAR打开一个Word文件;),也许创建一个带有特定头文件的存档,然后更改扩展名就足够了,从未尝试过


3
我的想法是因为有人提供了一个可行的解决方案链接,而你却说这是不可能的。虽然你提供了一个非常好的讨论,我也很喜欢Joel在这个问题上的观点,但这并不值得被踩。 - ajacian81

2

为了转换为Microsoft Word,您需要一个启用COM的服务器(在其上运行Windows和Office)。如果您有这样的服务器

$word = new COM("word.application") or die ("couldnt create an instance of word"); 

应该可以工作!阅读http://php.net/manual/en/book.com.php以获取详细信息。

否则,您最好使用html2rtf,该函数使用以下库:http://paggard.com/projects/rtf.generator/http://sourceforge.net/projects/phprtf/

然后,创建RTF后,您要使用文档头将其提供给浏览器。

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=document_name.doc");

如果用户有 Word,则可以打开处理文件。

同时将 RTF 另存为 DOC 是可行的,Word 会在布局视图中打开而没有任何投诉。 您也可以使用上述标题提供 HTML,但问题在于 Word 将以 Web 视图打开,这是不好的 :)


4
他要求一种自由/开源的解决方案! - Mark Eirich
什么是“Web View”,为什么它不好?(我对Word不是很熟悉。) - Mark Eirich
1
phprtf是开源的,同时支持GPL和LGPL协议,它的设计非常出色,与其他php html2rtf库相比简直是天堂,尤其是那些只有名义上是html2rtf的库。 - asnyder
千万不要这样做。办公应用程序并非设计或许可在 Web 服务器上使用。你最终会遇到无法结束的 Word/Excel 进程等问题,带来很多痛苦。 - Kev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接