DOCX в PDF: SaveAs2, ExportAsFixedFormat и PrintOutC#

Место общения программистов C#
Ответить
Anonymous
 DOCX в PDF: SaveAs2, ExportAsFixedFormat и PrintOut

Сообщение Anonymous »

У меня есть крошечная цель — преобразовать огромное количество файлов 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);
Я успешно использовал три способа конвертации файла 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
У этого последнего варианта есть два дополнительных недостатка:
  • он открывает небольшое диалоговое окно или всплывающее окно, в котором отображается ход печати, Я предполагаю, что это приводит к небольшому увеличению времени выполнения.
    документ необходимо активировать перед этим с помощью 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-файлов выглядит одинаково, но время преобразования разное, а полученные файлы имеют разные размеры?
Может быть, я удалю следующий текст, чтобы избежать закрытого голосования, но пока:< /h4>
Это всего лишь запрос дополнительной информации, вопрос к ответом будет ответ выше:
Я хотел бы дополнительно прочитать мнения, подсказки, рекомендации или советы, касающиеся вопросов.
Какой способ конвертации docx в PDF является предпочтительным? когда речь идет о нескольких тысячах преобразований за один проход?
и
Какие параметры или значения параметров методов могут улучшить время преобразования?

Подробнее здесь: https://stackoverflow.com/questions/609 ... s-printout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»