我有同事从事.NET 1.1项目,他们从外部方获取XML文件,并以编程方式指示iTextSharp根据XML数据生成PDF内容。
棘手的部分是,在这个XML中是任意HTML内容的片段。这些是从Office应用程序复制和粘贴的HTML代码用户。在Web浏览器上看起来还不错,但是当这个HTML被输入到iTextSharp的HTMLWorker对象中以解析并转换为PDF对象时,格式化和对齐会在生成的PDF文档中的所有位置运行。 E.g。
<span id="mceBoundaryType" class="portrait"></span>
<table border="0" cellspacing="0" cellpadding="0" width="636" class="MsoNormalTable"
style="margin: auto auto auto 4.65pt; width: 477pt; border-collapse: collapse">
<tbody>
<tr style="height: 15.75pt">
<td width="468" valign="bottom" style="padding-right: 5.4pt; padding-left: 5.4pt;
padding-bottom: 0in; width: 351pt; padding-top: 0in; height: 15.75pt; background-color: transparent;
border: #ece9d8">
<p style="margin: 0in 0in 0pt" class="MsoNormal">
<font face="Times New Roman"> </font></p>
</td>
<td colspan="3" width="168" valign="bottom" style="padding-right: 5.4pt; padding-left: 5.4pt;
padding-bottom: 0in; width: 1.75in; padding-top: 0in; height: 15.75pt; background-color: transparent;
border: #ece9d8">
<p style="margin: 0in 0in 0pt; text-align: center" class="MsoNormal" align="center">
<u><font face="Times New Roman">Group</font></u></p>
</td>
</tr>
标签中充满了Style属性,而iTextSharp不支持CSS并解释该属性。其他iTextSharp用户尝试解决此问题或其他可行的HTML-to-PDF组件有哪些替代方案?
答案 0 :(得分:1)
我发现基于.NET 2.0的组件如ExpertPDF和ABCpdf在解释CSS样式和在PDF中正确对齐表方面做得相当不错。现在我建议我的同事们使用一个可以使用这些组件的单独的.NET 2.0 Web服务,ASP.NET 1.1 Web应用程序将通知这些组件继续使用生成的Web页面,这本质上就是报告在HTML视图中。
更新:
这是答案,因为它是向应用团队提供的推荐方法。
答案 1 :(得分:0)
我没有任何可靠的答案,但我会给你两个探索的方向,我以前用过这两个方向。
1 - 使用HtmlAgilityPack之类的东西来清理你的HTML - 你可以遍历DOM并删除样式和类,这显然会在一定程度上搞砸了布局。我不清楚你是否需要保留这种造型。然后,您可以使用iTextSharp或替代程序(如HtmlDoc(也不支持CSS))渲染为PDF。我们用一个带有URL的方法编写了一个简单的包装器,然后调用Htmldoc来生成PDF。
2 - 使用WebBrowser控件渲染HTML服务器端,从中生成图像,然后使用PDFsharp或您选择的库将图像转换为PDF。这显然不会为您提供可以搜索或复制文本的PDF。有一些非常好的示例代码here用于将渲染的页面转换为图像(注意:您可以获得全高图像,而不仅仅是您无需滚动即可看到的内容)。
编辑:我认为WebBrowser控件在.NET 1.1中不可用。