更新后,iTextSharp HTML到PDF无法正确渲染单元格高度

时间:2015-03-20 11:30:03

标签: c# itextsharp html-rendering

从iTextSharp 5.5.4.0升级到5.5.5.0后,从HTML到PDF的渲染表cels不正确。 细胞通向高处。

我没有更改代码中的任何内容,我唯一做的就是升级我的DLL。

我的代码是否不正确,或者这是新版iTextSharp中的错误。

我的输入文件:

我的输出:

在我的代码下面。

/// <summary>
/// Create a pdf based on a
/// </summary>
/// <param name="xHTMLContent"></param>
/// <param name="cssContent"></param>
/// <param name="outputStream"></param>
public static void CreateReportFromXHTML(string xHTMLContent, string cssContent, Rectangle pageSize, Stream outputStream)
{
    using (Document document = new Document(pageSize, 0f, 0f, 0f, 0f))
    {
        PdfWriter writer = PdfWriter.GetInstance(document, outputStream);
        document.Open();
        try
        {
            // CSS
            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
            cssResolver.AddCss(cssContent, true);

            // HTML
            XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
            fontProvider.Register(System.Web.HttpContext.Current.Server.MapPath("~/Verdana.ttf"));
            fontProvider.Register(System.Web.HttpContext.Current.Server.MapPath("~/Verdana-Bold.ttf"));
            CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
            HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

            // Pipelines
            PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
            HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
            CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);

            // XML Worker
            XMLWorker worker = new XMLWorker(css, true);
            XMLParser p = new XMLParser(worker);

            byte[] baContent = System.Text.Encoding.ASCII.GetBytes(xHTMLContent);

            using (MemoryStream msContent = new MemoryStream(baContent))
            {
                p.Parse(msContent);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

问题似乎与你的CSS有关:

td .group
{
    width: 140px; 
    font-weight: bold;
}

字面意思是“具有td class group td标记的”任何孩子应该具有此规则“。但是,您直接在td.group { width: 140px; font-weight: bold; } 标记上使用该类,因此您应该省略标记和类选择器之间的空格。在我的测试中进行简单的更改会使您的表格显示为您想要的。

{{1}}