Сохранение отдельных страниц текстового файла в виде отдельных документов с использованием COM - PullRequest
0 голосов
/ 10 февраля 2011

В последнее время я играю с классом объектов Microsoft COM для PHP, чтобы манипулировать файлами слов.Пока все хорошо, так как я смог заставить его работать и выполнять некоторые преобразования файлов, такие как сохранение всего документа в формате PDF на сервере.

Теперь я столкнулся с проблемой: так как яЯ буду много конвертировать и манипулировать данным файлом слов во время выполнения, я подумал, что было бы намного лучше, если бы я мог сохранять каждую отдельную страницу отдельно и работать с ними один за другим, а не каждый раз заново обрабатывать весь документ.

Я прочитал всю часть MSDN о классе документов COM , и у меня возникло ощущение, что я не могу сохранить только одну страницу документа, если я не использую магию, используя Range Метод, но, очевидно, нет способа узнать «текущую конечную позицию» для каждой страницы.Есть идеи?

tl; dr Я пытаюсь сохранить отдельные страницы в текстовом документе, используя COM-объект word.application через скрипт PHP, но не могу найтипримеры метода Document.Range.

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Франческо, я должен предупредить тебя. @SLaks правильно, потому что вы действительно не можете использовать Word Automation на сервере. Нет, правда. Мы серьезно.

Есть две причины:

Во-первых, Word - невероятно сложная часть программного обеспечения, разработанная для использования интерактивным пользователем. Он не был запрограммирован или протестирован для использования в серверной среде, и не работает правильно при работе под неинтерактивной учетной записью (как это делают службы). Рано или поздно он упадет или замерзнет. Я видел это. Я не говорю обязательно об ошибках. Word будет делать то, что требует полной учетной записи пользователя; или где Word ожидает, что кто-то будет нажимать на окна сообщений. Этого не избежать.

Во-вторых, даже если вам удастся заставить его делать то, что вы хотите, оказывается, что лицензия Office явно запрещает вам запускать Word таким образом.

Теперь исключительно с точки зрения автоматизации:

Word на самом деле не манипулирует «страницами». «Страницы» - это лишь побочный эффект любого выбранного принтера. Перенесите один и тот же файл на другой компьютер с другим принтером и / или драйвером, и нумерация страниц может измениться. На больших документах изменится .

Да, в большинстве случаев разрывы страниц не перемещаются (часто), особенно если у вас есть документ, представляющий собой набор не совсем полностраничных форм, но я не пытаюсь быть привередливым: дело в том, что объектная модель документа Word не очень поможет вам манипулировать «страницами», потому что они не первоклассный гражданин, а случайное форматирование.

Полагаю, лучше всего было бы использовать разрывы разделов между страницами, вместо того, чтобы позволить автозапуску страниц; Таким образом, у вас есть что-то, за что можно взять объектную модель.

Вы можете использовать коллекцию ActiveDocument.Sections, чтобы найти свои ... ahem ... 'pages' (на самом деле, section объекты), а затем использовать метод Range (чтобы извлечь Range объект) и метод ExportAsFixedFormat для экспорта этого диапазона в PDF.

Если вы хотите вместо этого документ Word, я не думаю, что объектная модель позволяет вам сохранить часть документа как отдельный документ. Однако вы можете легко скопировать и вставить диапазон в новый документ и сохранить его вместо этого.

0 голосов
/ 23 февраля 2011

Я написал некоторый код на VB.net, который разбивает передаваемый документ на отдельные страницы.Затем он продолжает сохранять страницы в виде изображений JPG, поэтому я думаю, что это то, что вы хотите.Я рад поделиться с вами кодом, если вы еще не выполнили задачу?

...