【问题标题】:Absolute position when converting HTML to PDF with iTextSharp使用 iTextSharp 将 HTML 转换为 PDF 时的绝对位置
【发布时间】:2010-10-17 08:53:29
【问题描述】:

我正在使用 iTextSharp 将 HTML 转换为 PDF,但它似乎不适用于绝对定位的元素。例如我有这个 HTML 文件:

<html>
<body>
    <p style="position: absolute; left: 10px; top: 100px; width: 50px;">Hello World</p>
</body>
</html>

文本在生成的 PDF 文件中的位置不正确。您知道将 HTML 转换为 PDF 时是否可以使用绝对定位的元素?任何允许这样做的免费解决方案(iTextSharp 或其他)将不胜感激。

这是我用来执行 iTextSharp 转换的代码:

class Program
{
    static void Main(string[] args)
    {
        Document document = new Document(PageSize.A4);
        using (Stream output = new FileStream("out.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        using (Stream htmlStream = new FileStream("input.htm", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (XmlTextReader reader = new XmlTextReader(htmlStream))
        {
            PdfWriter.GetInstance(document, output);
            HtmlParser.Parse(document, reader);
        }
        Process.Start(@"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe", "out.pdf");
    }
}        

编辑:

经过进一步调查,似乎 iTextSharp 的 HTML 到 PDF 转换功能仅限于一些非常简单的 HTML 文档。有一个很好的 Java 项目,名为 Flying Saucer,它处理复杂的 HTML 文档。所以我尝试将它与IKVM 一起使用,效果很好。唯一的问题是它在某种程度上感觉是一个肮脏的解决方案。为 HTML 到 PDF 的转换添加 31MB 的汇编代码似乎相当多。有没有更好的“免费”替代方案来处理这种情况。

【问题讨论】:

    标签: .net html-to-pdf


    【解决方案1】:

    我最终决定使用xhtmlrenderer。它完全符合我的需求,它具有许多功能,并且能够正确呈现我的任何 HTML 文件。

    由于目前它只有一个 JAVA 版本,我必须使用 IKVM 将 jar 转换为 .NET 程序集。

    【讨论】:

    • 这似乎是我目前面临的问题的解决方案。使用 IKVM 将 JAR 转换为 DLL 有多困难,您遇到过什么问题吗?
    • JAR 到 DLL 的转换是在命令行中使用 ikvmc.exe 的简单事情。我没有遇到任何问题,现在这个组件在生产中工作了两个多月,没有出现任何故障。
    • 谢谢,那我试试看!
    【解决方案2】:

    假设您在 Windows 上,如何通过 COM 或命令行自动化免费的PDFCreator 以通过 Internet Explorer 的渲染引擎将 HTML 渲染为 PDF?

    安装PDFCreator时,C:\Program Files\PDFCreator\COM\文件夹中有很多自动化示例

    【讨论】:

      【解决方案3】:

      在二进制发行版中的 JAR 上使用 ikvmc 向我展示了许多来自无法生成的类的警告。在包含 iKVM 核心库来处理 Flying Saucer 以 Java 对象为目标的事实后,我遇到了以下异常:

      `Cannot load AWT toolkit: ikvm.awt.NetToolkit, IKVM.AWT.WinForms, Version=0.40.0.1, Culture=neutral, PublicKeyToken=13235d27fcbfff58`
      

      那只是执行:

      `ITextRenderer toRender = new ITextRenderer();`
      

      这似乎是飞碟使用的主要对象。你能提供一些你是如何使用它的来源吗?

      【讨论】:

      • 您是否引用了 IKVM.AWT.WinForms.dll 以便将其复制到 bin\Release 文件夹中?
      猜你喜欢
      • 2022-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2022-09-27
      • 2013-06-28
      相关资源
      最近更新 更多