将大量文本和动态数据转换为PDF

时间:2011-08-09 16:40:24

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

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

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

我需要一个关于在MVC 2中创建PDF文档的最有效方法的建议或建议,从长远来看这将是可维护的。我真的不希望我的行为长达200多行。直接使用Word文档并不是最好的解决方案,因为我从未使用过VSTO,因此我不太清楚打开Wo​​rd并在其中处理文本并添加动态数据然后将其动态转换为PDF

非常欢迎任何建议。

祝你好运!

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

问:你说“......但是由于存储了大量数据,占位符不足,文本会被截断或隐藏” 你最终得到了多少数据?如果单词模板可以将数据“保存”在3页中,则它们应该适合3个PDF页面。 我曾经使用iTextSharp创建我的PDF,但我也几乎总是自己从头开始构建PDF文档。(不是真正的&lt; 200行解决方案)你考虑过另一个库,我最近转向MigraDoc的PDFSharp.Way更简单然后使用iText,lota examples / docus

只是我的两分钱

答案 2 :(得分:0)

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

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

另外,据我所知,目前在ITextSharp库中提供的HTML到PDF选项只适用于已知的一组标签。

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