我正在使用 iTextSharp 将 HTML 转换为 PDF,它似乎不适用于绝对定位的元素。例如我有这个 HTML 文件:
<html>
<body>
<p style="position: absolute; left: 10px; top: 100px; width: 50px;">Hello World</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
文本在生成的 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");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
经过进一步调查,似乎 iTextSharp 的 HTML 到 PDF 转换功能仅限于一些非常简单的 HTML 文档。有一个很好的 Java 项目叫做Flying Saucer,它可以处理复杂的 HTML 文档。所以我尝试将它与IKVM一起使用,效果很好。唯一的问题是它在某种程度上感觉是一个肮脏的解决方案。为 HTML 到 PDF 的转换添加 31MB 的汇编代码似乎相当多。是否有更好的“免费”替代方案来处理这种情况。
我最终决定使用xhtmlrenderer。它完全符合我的需求,它有很多功能,并且能够正确渲染我的任何 HTML 文件。
由于目前它只有 JAVA 版本,我必须使用IKVM将 jar 转换为 .NET 程序集。