Microsoft Office Interop - проблема размера преобразованного файла PDF - PullRequest
0 голосов
/ 06 ноября 2019

Я конвертирую файл DOCX в файл PDF, используя приведенный ниже код (Microsoft Office Interop). Недавно мы создали новый сервер и заметили, что размер файла PDF увеличивается. Когда мы одновременно конвертируем один и тот же файл DOCX в PDF на оба сервера, размер файла PDF нового сервера превышает размер файла PDF старого сервера.

Microsoft.Office.Interop.Word.Document _wordDocument;
_wordDocument = _wordApp.Documents.Open(ref DocxFilePath);
_wordDocument.Activate();

object o_format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
_wordDocument.SaveAs(ref PdfFilePath, ref o_format);

object oFalse = false;
object nullobj = System.Reflection.Missing.Value;
_wordDocument.Close(ref oFalse, ref nullobj, ref nullobj);

System.Runtime.InteropServices.Marshal.ReleaseComObject(_wordDocument);

_wordDocument = null;

Оба сервера имеют одинаковую версию Office (MS Office 2016).

Любые предложения / идеи по устранению проблемы приветствуются.

Спасибо.

1 Ответ

0 голосов
/ 06 ноября 2019

Прежде всего, это не очень хорошая идея, чтобы автоматизировать Word на стороне сервера. Вот что Microsoft четко заявляет:

Все текущие версии Microsoft Office были разработаны, протестированы и настроены для работы в качестве продуктов конечного пользователя на клиентской рабочей станции. Они предполагают наличие интерактивного рабочего стола и профиля пользователя. Они не обеспечивают уровень повторного входа или безопасности, который необходим для удовлетворения потребностей серверных компонентов, предназначенных для автоматической работы.

В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию Microsoft Office. приложения из любого автоматического неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или тупиковую блокировку при запуске Office в этой среде.

Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были сделаны безопасными для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы части кода работать на стороне клиента. Если вы используете приложение Office из серверного решения, приложению не хватит многих необходимых возможностей для успешной работы. Кроме того, вы будете рисковать стабильностью вашего общего решения.

Подробнее об этом и возможных альтернативах читайте в статье Рекомендации по серверной автоматизации Office .

Вместо этого вы можете рассмотреть возможность использования Open XML SDK , если вы имеете дело только с открытыми документами XML.

Если вы выполняете генерацию документов на стороне сервера ивам не нужно работать с документами Office в качестве выходных данных, вы обычно используете что-то вроде iText или iTextSharp , что позволяет визуализировать PDF-файлы напрямую.

...