Я использую ColdFusion 7 на сервере Windows 2003, чтобы установить стандартную установку Microsoft Word 2000 с использованием COM-объектов. Цель состоит в том, чтобы создать документ с несколькими таблицами в нем.
Так много я могу сделать. Процессор резко увеличивается до 100%, но мой код работает, и если он короткий, он работает. Проблема, с которой я сталкиваюсь, заключается в том, что размер кода, используемого для создания документа Word, составляет около 25 КБ + (скрипт генерирует много повторяющегося кода).
После того, как сервер потратил 1 минуту 40 секунд, пытаясь сгенерировать документ:
- Загрузка ЦП снижается до 0 (ЦП был разделен между jrun.exe для ColdFusion и winword.exe для Word 2000).
- winword.exe остается в памяти.
- Время ожидания ColdFusion велико, поэтому браузер клиента считает, что страница все еще обрабатывается, однако ...
- Если я завершу процесс winword.exe, ColdFusion немедленно вернет ошибку клиенту.
Так что эти длинные страницы никогда не заканчиваются. Я перепробовал много вариантов.
- ColdFusion 8 не работает.
- Использование обновленной JVM для ColdFusion 7/8 не работает.
- Содержимое кода, который я запускаю, не имеет значения. Я делаю много необычных раскрасок таблиц, но миллион строк "Hello world" также умирает.
- Пробная версия Word 2007, как ни странно, работает. Форматирование немного сложнее, поскольку по умолчанию используется Calibri и другие новые шрифты, но сервер подождет, скажем, до 7 минут, пока он не будет завершен. А затем перезагрузите сервер, попробуйте выполнить тот же код, и Word 2007 настаивает, что он не понимает команды, которую я ему отправляю. Я сделал пробную активацию, я даже запустил Word 2007 с помощью удаленного рабочего стола после перезагрузки. После первого перезапуска слух становится совершенно кататоническим.
Что я еще не пробовал:
Мои поиски в сети были бесплодны, за исключением «вот как подключиться к API Word» на земле ColdFusion и «вот как подсчитать количество страниц в нижнем колонтитуле» на земле ASP.NET. Кажется, никто не использует вещи Adobe, пытается это сделать, и никто, использующий вещи Microsoft, не сталкивается с моей проблемой. И поэтому я бросаюсь на твои берега, истекающие кровью и истощенные, пытаясь понять эту безумную проблему тайм-аута.
Вот как выглядит фрагмент кода ColdFusion:
<cfset clientMatterCellStart = myDoc.Tables.Item(1).Cell(2,1)>
<cfset clientMatterCellEnd = myDoc.Tables.Item(1).Cell(2,7)>
<cfset clientMatterCellStart.Merge(clientMatterCellEnd)>
<cfset clientMatterCellStart.Range.Font.Bold = true>
<cfset clientMatterCellStart.Range.Font.Name = "Times New Roman">
<cfset clientMatterCellStart.Range.Font.Size = 14>
<cfset clientMatterCellStart.Range.ParagraphFormat.Alignment = 1><!--- Centered --->
<cfset clientMatterCellStart.Range.Text = "#MySubjects.subject_name[q]#">
<cfset clientMatterCellStart.Shading.BackgroundPatternColor = 13421772><!--- Grey 20% --->