【问题标题】:Converting docx into pdf from an ASP.NET MVC app [closed]从 ASP.NET MVC 应用程序将 docx 转换为 pdf [关闭]
【发布时间】:2020-10-21 07:26:05
【问题描述】:

我正在尝试将 docx 从 ASP.NET MVC 应用程序转换为 pdf 文件。到目前为止,我一直在使用 Microsoft interop saveas 命令,但有时(并非总是)失败并显示错误“命令失败”。我已经看到它已被 Microsoft 弃用且不再支持,Microsoft 表示不建议再从 ASP.NET 应用程序中使用它,因此我正在尝试寻找替代方案。

我看到有一个很好的,就是 aspose.words 但它不是免费的。我对免费的感兴趣。那么现在有没有任何免费的替代品可以兼容 Microsoft docx 文档并且能够毫无问题地转换为 pdf?

【问题讨论】:

  • 这不是关于 Visual Studio 应用程序的问题,因此我删除了 [visual-studio-2013] 标记。如果您受限于 .NET Framework 的特定版本,请改为标记该版本(因为这与代码相关,而 VS 版本不相关)。
  • 你真正的问题是PDF 而不是docxdocx 是一个 ZIP 包,其中包含格式明确的 XML 文件。 PDF 才是真正的问题,因为它本质上是打印命令 (PostScript) 的容器,而不是文档格式。即使您想将 HTML 转换为 PDF,也会遇到麻烦
  • @PanagiotisKanavos HTML-to-PDF 现在需要使用 Puppeteer 以无头模式启动整个 Chrome 实例,幸运的是,一旦您到达该部分,“打印”到 PDF 很简单:blog.risingstack.com/pdf-from-html-node-js-puppeteer跨度>
  • @Dai 或使用 Java 中的服务进行转换,如 iText ...这是 AGPL - 哎呀。 pandocProcess.Start 不适用于企业应用程序。首先应该支付 500 美元许可证的营利性应用程序......

标签: c# asp.net-mvc office-interop asp.net-4.5 word-interop


【解决方案1】:

我对免费的感兴趣

没有。 Office/Word 的.docx 文件格式难以置信 又长又复杂(见下文),因此编写一个可以单独完全解析 Word 文档的程序是一项艰巨的任务,仅是 strong>生成视觉格式模型表示,然后通过从中生成 PostScript/PDF 命令将该视觉模型转换为 PDF 文件。

这是 OOXML 规范打印出来时的样子:

(来源:https://fussnotes.typepad.com/plexnex/2007/05/ooxml_more_than_1.html

然后考虑 Word 格式化模型中存在的所有功能和边缘情况:表格、标题、首字下沉、标题(不要忘记使用 OLE 的嵌入和外部内容!)、浮动文本框、艺术字等等开。

Word 文档的 XML 表示的非可视化处理实际上是微不足道的,可以使用任何 XML 库来完成 - 尽管您应该使用 OOXML-schema-aware 库以便您正确处理 Word 文档 em> (因此您最终不会将段落插入标题或填充页面的标题)。

其他一切都是问题中困难(且昂贵)的部分。这就是为什么即使在 Word 首次发布近 40 年和 OOXML 格式规范发布 15 年后的今天,OpenOffice (nee StarOffice) 和 Apple iWork 等第三方软件仍然无法完全和正确导入或呈现 Word 文档。

【讨论】:

  • ... 我想付费替代品并不能保证完全兼容转换为 pdf,对吧?
  • @Ralph “完全兼容”是什么意思?
  • 昂贵的部分是 PDF,而不是 docx。没有好的免费 PDF 库。 docx 比 PDF(本质上是一种打印语言)要容易很多docx 是一个包含明确定义的 XML 文件的 ZIP 文件。另一方面,PDF 甚至没有表格。如果需要,可以使用 OpenXML SDK 读取 docx 文件。生成docx 文件并没有太大的兴趣,但这就是为什么没有或很少有库可以让这更容易,就像EPPlus、ClosedXML 或NPOI 为xlsx 所做的那样。遵循相同的格式
  • 我的意思是docx文档可能包含某种第三方无法面对的对象,然后文档无法成功转换为pdf文件。
  • @Ralph 情况正好相反。您可以使用 OpenXML SDK 阅读 docx。文字处理不是 Excel 表格,它包含 很多 不同的对象类型,如段落、运行、字符、样式等。问题是 PDF。您可以在一定程度上使用iTextSharp,但 PDF 本质上是一种打印语言 (PostScript),而不是一种文档格式。它没有桌子。您是否尝试过在 PDF 查看器中选择表格行?注意到选择如何沿着列而不是行进行?或者选择文本如何选择不相关的段落?也没有段落
猜你喜欢
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2013-11-02
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
相关资源
最近更新 更多