У меня есть крошечная цель - преобразовать огромное количество файлов 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, когда речь идет о нескольких тысячах конверсий за один прогон?
и
Какие параметры или значения параметров методов могут улучшить время преобразования?