【问题标题】:Converting large amounts of text and dynamic data into PDF将大量文本和动态数据转换为 PDF
【发布时间】:2011-08-09 16:40:24
【问题描述】:

我有一个需要转换为 PDF 的三页 Word 文档。这个 Word 文档作为模板提供给我,以向我展示 PDF 输出应该是什么样子。我尝试将此文档转换为 PDF,创建了一个 PDF 表单并使用 iTextSharp 打开表单,用数据填充它并将其返回给客户端。这一切都很好,但由于存储了大量数据,占位符不足,文本将被截断或隐藏。

我的第二次尝试是创建一个没有母版页的 MVC 2 视图,将模型传递给视图,获取视图的 HTML 表示形式,将其传递给 iTextSharp 并呈现 PDF。这里的问题是 iTextSharp 在某些标签上失败(其中一个是 <hr> 标签)。我设法摆脱了有问题的标签,但是表格没有正确呈现。也就是说,边框属性被忽略了,所以我最终得到了无边框表格。那次尝试失败了。

我需要有关在 MVC 2 中创建 PDF 文档的最有效方法的建议或意见,从长远来看,该文档是可维护的。我真的不希望我的动作超过 200 行。直接使用 Word 文档并不是最好的解决方案,因为我从未使用过 VSTO,所以我不太清楚打开 Word 并操作其中的文本并添加动态数据然后将其动态转换为 PDF 会是什么样子.

非常欢迎任何建议。

最好的问候!

【问题讨论】:

  • 也许不是答案,但值得探索的可能是pdf.js:github.com/andreasgal/pdf.js
  • 嗨贾斯汀,感谢您的回复。然而,这个原型利用了 HTML 5 的能力。我正在编写的应用程序将可供公众使用,因此需要支持不同的(阅读较早的 :))浏览器。
  • 我听到了。无论我处理过哪种语言,生成 PDF 都是最糟糕的。祝你好运:-)
  • 最后的解决方案是使用 iTextSharp 并逐段创建所有三个页面。这很痛苦,但我完成了工作,我希望文档不会有任何更改。

标签: asp.net-mvc-2 pdf itextsharp


【解决方案1】:

我过去做过的一件事是将 Word 文件保存为 DOCX 并解压缩,因为 DOCX 只是重命名的 zip 文件。在存档中打开/word/document.xml,您将看到您的文档。那里有很多奇怪的 XML 标记,但总的来说,您应该很好地了解您的内容在哪里。然后只需添加占位符文本,如{FIRST_NAME},保存文件并重新压缩。

然后您可以从代码中执行相同的步骤,使用 SharpZipLibDotNetZip 之类的内容解压缩,交换占位符副本,重新压缩,然后使用非常 simple Word automation to Save-As a PDF

另一条路线是充分利用 iTextSharp 并实际编写 ParagraphsPdfPTable 以及其他所有内容。设置需要更长的时间,但会给您最大的控制权。

【讨论】:

  • +1,Word 自动化是直接且易于实施的。但是很少有问题存在,它非常缓慢且资源密集。
  • @Chris,感谢您的建议。我会对这种方法进行一些思考。但是,我有点害怕我最终可能会使用 iTextSharp 并从最底部重新构建三页文档。正是我试图避免的事情。
  • @Huske,一旦你习惯了 iTextSharp,从头开始构建并不像听起来那么糟糕。有时也有助于浏览源代码。如果您有任何问题,请务必在这里提问!
  • @Chris,我已经将 iTextSharp 用于两个视图。一个基于 PDF 表单,因此我使用 iTextSharp 的 AcroForm 填充表单并将其返回给用户,另一个正在构建单页表报告。所以我很舒服。只是我害怕后期维护这第三个 PDF。感谢您的帮助!
【解决方案2】:

问:你说“...但是由于存储了大量数据,占位符不足,文本会被截断或隐藏” 您如何最终拥有大量数据?如果单词模板可以“保存” 3 页中的数据,则它们应该适合 3 个 PDF 页面。 我曾经使用 iTextSharp 创建我的 PDF,但我几乎总是自己从头开始构建 PDF 文档。(不是真正的

只要我的两分钱

【讨论】:

  • 感谢您的回复。我在 iTextSharp 之前就看到了 PDFSharp,但事实证明后者功能更丰富。我承认使用 MigraDoc 的解决方案编程看起来比使用 iTextSharp 更容易。
【解决方案3】:

Word 文档对象模型很容易理解。它将包含一系列段落或表格。使用Open XML SDK,您可以遍历word 文档中的每个段落/表格并检索其内容和样式。然后,您可以使用这些检索到的信息即时生成 PDF 文档。这也适用于 MVC。

但是如果你的word文档中包含复杂的元素,那么基于这种方式实现的话,你会需要更多的时间。此外,此方法仅适用于(Word 2007 和 2010)文件。

此外,据我所知,ITextSharp 库中当前可用的 HTML 到 PDF 选项仅适用于已知的标签集。

另一个建议是使用商业可用的 .NET 组件。有很多好的解决方案可用。例如:Syncfusion

【讨论】:

  • 我尝试将 HTML 转为 PDF,但它在某些时候一直失败,并且它无法识别表格标签的边框属性。
猜你喜欢
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 2012-02-05
  • 1970-01-01
相关资源
最近更新 更多