使用COM将单个文件的单页保存为单独的文档

时间:2011-02-10 17:10:01

标签: php com ms-word

最近我一直在玩PHP的COM COM对象类来操作word文件。到目前为止一切顺利,因为我已经能够使其工作并进行一些文件转换,例如在服务器上将整个DOC保存为PDF。

现在我遇到了一个问题:因为我将在运行时大量转换和操作给定的word文件,我认为如果我可以单独保存每个单页并且对它们进行处理会好得多一个而不是每次重新处理整个文件。

我一直在阅读所有MSDN part about the COM Document Class,我觉得我不能只保存文档的一页,除非我使用Range方法做某种魔术,但是显然,没有办法知道每页的“当前结束位置”。有什么想法吗?

tl; dr 我正在尝试通过PHP脚本使用'word.application'COM对象在word文档中保存单个页面,但我找不到Document的示例。范围方法。

2 个答案:

答案 0 :(得分:1)

弗朗西斯科,我要警告你。 @SLaks是正确的,因为你真的无法在服务器上使用Word Automation。不完全是。我们很认真。

有两个原因:

首先,Word是一个非常复杂的软件,旨在供交互式用户使用。未在服务器环境下使用它进行编程或测试,并且在非交互式帐户(运行方式)下运行时 无法正常工作。它迟早会崩溃或冻结。我已经看到了它。我不是在谈论错误。 Word会做的事情需要一个完整的用户帐户;或者Word希望有人点击消息框。没有逃脱它。

其次,因为即使你设法让它做你想做的事情,事实证明Office许可证明显禁止你以这种方式运行Word。

现在,完全从自动化的角度来看:

Word并没有真正操纵'页面'。 “页面”只是当前选择的打印机的偶然副作用。将相同的文件带到具有不同打印机和/或驱动程序的其他计算机,分页可能会更改。在大型文档上,更改。

是的,大多数时候页面中断不会移动(很多),特别是如果你的文档是一堆不完整的页面形式,但我不是想要讲究点:关键是,Word文档对象模型不会帮助你操作“页面”,因为它们不是一等公民,而是偶然的格式化。

我想你最好的选择是在页面之间使用分节符,而不是让页面自动流动;这样你就可以抓住对象模型。

您可以使用ActiveDocument.Sections集合找到您的... ahem ...'pages'(真的,section个对象),然后使用{{1方法(提取Range对象)和Range方法将该范围导出为PDF。

如果您想要Word文档,我认为对象模型不允许您将文档的一部分另存为单独的文档。但是,您可以轻松地将范围复制并粘贴到新文档中,并保存该文档。

答案 1 :(得分:0)

我在VB.net中编写了一些代码,将传递的word文档拆分为单独的页面。然后它继续将页面保存为JPG图像,所以我认为这是你想要的。 如果您还没有完成任务,我很高兴与您分享代码?