代码之家  ›  专栏  ›  技术社区  ›  icelava

在.NET 1.1中将样式加载的HTML表转换为PDF

  •  1
  • icelava  · 技术社区  · 16 年前

    我有同事在一个.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>
    

    标签中充满了样式属性,ITextSharp不支持CSS并解释该属性。其他ITextSharp用户试图解决这个问题,或者其他可行的HTML-to-PDF组件有哪些选择?

    2 回复  |  直到 16 年前
        1
  •  1
  •   icelava    16 年前

    我发现基于.NET 2.0的组件 ExpertPDF ABCpdf 很好地解释CSS样式并在PDF中正确地对齐表。现在我建议我的同事使用一个单独的.NET 2.0 Web服务,它可以使用这样的组件,ASP.NET 1.1 Web应用程序会通知它继续执行并抓取一个生成的网页,该网页本质上是HTML视图中的报告。

    更新:

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

        2
  •  0
  •   D'Arcy Rittich    16 年前

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

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

    2-使用WebBrowser控件呈现HTML服务器端,从中生成图像,然后使用 PDFsharp 或者你选择的图书馆。这显然不会给您提供可以搜索或复制文本的PDF。有一些很好的示例代码 here 用于将渲染页转换为图像(注意:您可以获得全高图像,而不仅仅是不滚动即可看到的图像)。

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