C# DOCX到PDF:SaveAs2 vs ExportAsFixedFormat vs打印输出
我的小目标是使用C#和.NET将大量的docx文件转换为PDF,而无需打开Word(显而易见),也无需使用任何第三方库(需要管理的组件更少,花费的资金更少)。目前,我正在尝试正确转换单个文档,它必须尽可能高效,以便快速转换前面提到的巨大负载(数千个docx文件,每个文件大小在100到300 kb之间) 我是 我正在创建Word应用程序的一个实例,如下所示C# DOCX到PDF:SaveAs2 vs ExportAsFixedFormat vs打印输出,c#,.net,pdf,ms-word,office-interop,C#,.net,Pdf,Ms Word,Office Interop,我的小目标是使用C#和.NET将大量的docx文件转换为PDF,而无需打开Word(显而易见),也无需使用任何第三方库(需要管理的组件更少,花费的资金更少)。目前,我正在尝试正确转换单个文档,它必须尽可能高效,以便快速转换前面提到的巨大负载(数千个docx文件,每个文件大小在100到300 kb之间) 我是 我正在创建Word应用程序的一个实例,如下所示 (): 以及按以下方式打开要转换的文档 Word.Document docxFile = word.Documents.Open(source
(): 以及按以下方式打开要转换的文档
Word.Document docxFile = word.Documents.Open(sourcePath, Visible: false);
我成功地使用了3种方法将100KB的docx文件转换为pdf:
Microsoft.Office.Interop.Word.Document.SaveAs2
Duration | pdf大小
————————————————————————
75307毫秒| 277 kb
Microsoft.Office.Interop.Word.Document.ExportAsFixedFormat
Duration | pdf大小
————————————————————————
78351333毫秒| 285 kb
Microsoft.Office.Interop.Word.Document.PrintOut
Duration | pdf大小
————————————————————————
9985403毫秒| 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的内容看起来完全相同,但转换时间不同,生成的文件大小不同?
也许我会删除以下文本以避免投票接近,但现在:这只是一个额外信息的请求,需要回答的问题是上面的问题:
我想另外阅读针对这些问题的意见、提示、建议或建议 一次运行数千次转换时,将docx转换为pdf的首选方式是什么?
和
哪些参数或方法的参数值可能会缩短转换时间?您是否碰巧拥有SharePoint内部部署?如果是,请使用Word自动化服务。关于结果如何/为什么产生的问题:这需要对Microsoft代码和使用的Adobe“引擎”有深入的了解。@Cindymister不幸的是,我真的不知道。。。我得问问管理员。需要几分钟…@Cindymister好的,没有SharePoint内部部署可用。我必须自己选择一个选项。谢谢你的建议。FWIW在你的位置上,我会对大量不同内容的文档进行测试,看看结果(PDF的外观)在所有情况下是不同还是相同。如果它们不同,请选择产生最佳结果的方法。除此之外,我更倾向于使用SaveAs2,因为基于我多年来遇到的问题,它在不同系统(Windows版本、Mac)中似乎更可靠。@Cindymister谢谢你的建议。目前,我必须坚持使用
打印输出
,因为还有一个问题:我必须只打印实际包含内容的页面,而不是空白页面,因为各种分节符会使文档在下一个奇数或偶数页面上继续。例如,在SaveAs2
或ExportAsFixedFormat
之前,我无法相应地调整文档,因为我无法告诉他们导出/保存页面“1、3、4、5、6”
。结果不是很好,因为打印机设置似乎在结果周围添加了额外的空格。
Word.Document docxFile = word.Documents.Open(sourcePath, Visible: false);
docxFile.SaveAs2(FileName: outputPath,
FileFormat: Word.WdSaveFormat.wdFormatPDF);
docxFile.ExportAsFixedFormat(OutputFileName: outputPath,
ExportFormat: Word.WdExportFormat.wdExportFormatPDF,
OptimizeFor: Word.WdExportOptimizeFor.wdExportOptimizeForOnScreen);
docxFile.Activate();
docxFile.PrintOut(
OutputFileName: outputPath,
PrintToFile: true
);
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");