1

我有同事从事 .NET 1.1 项目,他们从外部获取 XML 文件,并以编程方式指示 iTextSharp 基于 XML 数据生成 PDF 内容。

棘手的部分是,在这个 XML 中是任意 HTML 内容的片段。这些是用户从其 Office 应用程序复制和粘贴的 HTML 代码。在 Web 浏览器上看起来仍然不错,但是当将此 HTML 输入 iTextSharp 的 HTMLWorker 对象以解析并转换为 PDF 对象时,格式和对齐会在生成的 PDF 文档中到处运行。例如

<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">&nbsp;</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 组件有哪些替代方法?

4

2 回答 2

1

我发现ExpertPDFABCpdf等基于 .NET 2.0 的组件在解释 CSS 样式和在 PDF 中正确对齐表格方面做得相当好。现在,我建议我的同事使用可以使用此类组件的单独 .NET 2.0 Web 服务,ASP.NET 1.1 Web 应用程序将通知该服务继续抓取生成的网页,该网页本质上是报告在 HTML 视图中。

更新:

这是答案,因为它是提供给应用程序团队的推荐方法。

于 2008-12-18T04:00:34.023 回答
0

我没有任何可靠的答案,但我会给你两个探索的方向,这两个方向都是我以前用过的。

1 - 使用HtmlAgilityPack之类的东西来清理你的 HTML - 你可以遍历 DOM 并删除样式和类,这显然会在一定程度上搞砸布局。我不清楚您是否需要保留这种样式。然后,您可以使用 iTextSharp 或HtmlDoc 之类的替代程序(也不支持 CSS)来呈现为 PDF。我们用一个接受 URL 的方法编写了一个简单的包装器,然后调用Htmldoc来生成 PDF。

2 - 使用 WebBrowser 控件呈现 HTML 服务器端,从中生成图像,然后使用PDFsharp或您选择的库将图像转换为 PDF。这显然不会为您提供可以搜索或复制文本的 PDF。这里有一些非常好的示例代码,用于将呈现的页面转换为图像(注意:您可以获得全高图像,而不仅仅是您可以在不滚动的情况下看到的图像)。

编辑:我认为 WebBrowser 控件在 .NET 1.1 中不可用。

于 2008-12-17T16:43:48.460 回答