Я использую 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 с помощью удаленного рабочего стола после перезагрузки. Слово становится полностью кататоническим после первого перезапуска.
Что я не пробовал:
- Ворд 2003
Мои поиски в сети были бесплодны, кроме «вот как подключиться к 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% --->