DOCX в PDF: SaveAs2 против ExportAsFixedFormat против PrintOut - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть крошечная цель - преобразовать огромное количество файлов docx в pdf, используя C# и. NET, не открывая Word (заметно) и не используя стороннюю библиотеку (меньше компонентов для управления и меньше денег для расходов) ). В настоящий момент я пытаюсь правильно преобразовать один документ, который должен быть максимально эффективным, чтобы быстро преобразовать огромную нагрузку, упомянутую ранее (несколько тысяч файлов docx, каждый размером от 100 до 300 КБ).

Я

using Word = Microsoft.Office.Interop.Word;

, и я создаю экземпляр приложения Word следующим образом
( явно без ScreenUpdating = false, поскольку этот параметр приводит к тому, что настраиваемые границы не преобразуются в результат ):

private static Word.Application word = new Word.Application()
{
    Visible = false
};

, а также открытие документа для преобразования следующим образом

Word.Document docxFile = word.Documents.Open(sourcePath, Visible: false);

Есть 3 способа, которыми я успешно использовал для преобразования файла docx: 100 кб в pdf:

Microsoft.Office.Interop.Word.Document.SaveAs2

docxFile.SaveAs2(FileName: outputPath,
                FileFormat: Word.WdSaveFormat.wdFormatPDF);
Duration     |  pdf size
————————————————————————
757,5307 ms  |  277 kb

Microsoft.Office.Interop.Word.Document.ExportAsFixedFormat

docxFile.ExportAsFixedFormat(OutputFileName: outputPath,
                            ExportFormat: Word.WdExportFormat.wdExportFormatPDF,
                            OptimizeFor: Word.WdExportOptimizeFor.wdExportOptimizeForOnScreen);
Duration      |  pdf size
————————————————————————
783,51333 ms  |  285 kb

Microsoft.Office.Interop.Word.Document.PrintOut

docxFile.Activate();
docxFile.PrintOut(
    OutputFileName: outputPath,
    PrintToFile: true
);
Duration     |  pdf size
————————————————————————
998,5403 ms  |  290 kb

Эта последняя опция имеет два дополнительных недостатка:

  • , она открывает небольшое диалоговое окно или всплывающее окно, которое показывает ход печати, я думаю, что вызывает немного расширенный время выполнения
  • документ должен быть активирован перед re docxFile.Activate(), иначе COMException выбрасывается

Время измерения / оценки:
Я просто взял DateTime.Now перед началом преобразования на уже открытый документ и взял еще DateTime.Now после закрытия этого документа. Затем я вычел первое из второго:

DateTime conversionBegin = DateTime.Now;
// conversion followed by closing the document
...
DateTime conversionEnd = DateTime.Now;

TimeSpan conversionTime = conversionEnd.Subtract(conversionBegin);
Console.WriteLine("Conversion time: " + conversionTime.TotalMilliseconds + " ms");

Я знаю, что это не очень надежное измерение времени, но мне оно действительно не нужно. Я просто хотел посмотреть, есть ли существенные различия.

Все это приводит к (одному) вопросу ...

Почему содержимое каждого из полученных PDF-файлов выглядит одинаково, но время преобразования отличается, и получающиеся файлы имеют разные размеры?

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

Какой предпочтительный способ конвертировать docx в PDF, когда речь идет о нескольких тысячах конверсий за один прогон?
и
Какие параметры или значения параметров методов могут улучшить время преобразования?

...