Asp.net mvc 2 将大量文本和动态数据转换为PDF

Asp.net mvc 2 将大量文本和动态数据转换为PDF,asp.net-mvc-2,pdf,itextsharp,Asp.net Mvc 2,Pdf,Itextsharp,我有一个三页的Word文档,需要转换成PDF。这个Word文档是作为模板提供给我的,它告诉我PDF输出应该是什么样子。我尝试将此文档转换为PDF,创建了一个PDF表单,并使用iTextSharp打开表单,填充数据并将其返回给客户端。这一切都很好,但由于存储了大量数据,占位符不足,文本将被截断或隐藏 我的第二次尝试是创建一个没有母版页的MVC2视图,将模型传递给视图,获取视图的HTML表示,将其传递给iTextSharp并呈现PDF。这里的问题是iTextSharp在某些标记上失败(其中一个是标记

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

我的第二次尝试是创建一个没有母版页的MVC2视图,将模型传递给视图,获取视图的HTML表示,将其传递给iTextSharp并呈现PDF。这里的问题是iTextSharp在某些标记上失败(其中一个是

标记)。我设法去掉了有问题的标记,但是表没有正确呈现。也就是说,border属性被忽略,因此我最终得到了无边界的表。那次尝试失败了

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

任何建议都是非常受欢迎的

致以最良好的祝愿

Q:您说“……但是由于存储了大量数据,占位符不足,文本将被截断或隐藏” 你怎么会有这么多的数据?如果word模板可以将数据“保存”在3页中,则应将其保存在3页PDF中。
我曾经使用iTextSharp创建我的PDF,但我也几乎总是自己从头开始构建PDF文档。(其实不是我过去做过的一件事,那就是将Word文件保存为DOCX并解压缩,因为DOCX只是一个重命名的zip文件。在归档文件中打开
/Word/document.xml
,你就会看到你的文档。里面有很多奇怪的xml标记,但总的来说,你应该很清楚你的内容在哪里。然后j必须添加占位符文本,如
{FIRST_NAME}
,保存文件并重新压缩

然后,从代码中,您可以执行相同的步骤,使用类似or的东西解压缩,交换占位符副本,重新压缩,然后使用非常简单的s


另一种方法是充分利用iTextSharp,实际编写
段落
PdfPTable
以及其他所有内容。设置需要更长的时间,但会给您最大的控制权。

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

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

此外,据我所知,目前在ITextSharp库中可用的HTML到PDF选项只能用于已知的标记集


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

可能不是答案,但需要探索的可能是pdf.js:Hi Justin,感谢您的回复。不过,这个原型利用了HTML 5的功能。我正在编写的应用程序将可用于公众需要支持不同的(阅读旧版本:)浏览器。我听到了。无论我使用哪种语言,生成PDF都是最糟糕的。祝你好运:-)最后的解决方案是使用iTextSharp,逐段创建所有三个页面。这很痛苦,但我完成了工作,我希望文档不会有任何更改。+1,Word自动化是直截了当的,易于实现。但问题不多,速度慢,资源密集。@Chris,谢谢你的建议。我会考虑一下这个方法。然而,我有点吃惊,我可能最终会使用iTextSharp并从最底层重建三页文档。“这正是我试图避免的事情。”胡斯克,一旦你习惯了,从头开始建造并不像听起来那么糟糕。有时浏览源代码也会有所帮助。如果你有问题,一定要在这里问@克里斯,我已经在使用iTextSharp查看两个视图了。一个是基于PDF表单的,所以我使用iTextSharp的AcroForm填充表单并将其返回给用户,另一个是构建一个单页表格报告。所以我很舒服。只是我在稍后阶段对第三个PDF的维护感到震惊。谢谢你的帮助!我试着用HTML转换成PDF,但在某些方面失败了,而且它无法识别表标记的边框属性。谢谢您的回复。我在iTextSharp之前看到过PDFSharp,但事实证明后者功能更丰富。我承认用MigraDoc的解决方案编程看起来比用iTextSharp更容易。