iTextSharp HTML 到 PDF 更新后单元格高度不正确

iTextSharp HTML to PDF doesn't render cell height correct after update

从 iTextSharp 5.5.4.0 升级到 5.5.5.0 后,table cels 从 HTML 到 PDF 的渲染不正确。 细胞太高了。

我没有更改任何代码,我唯一做的就是升级我的 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;
        }
    }
}

问题似乎出在您的 CSS:

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

字面上读作"any children of a td tag that has a class of group should have this rule"。但是,您直接在 td 标签上使用 class,因此您应该省略标签和 class 选择器之间的 space。在我的测试中进行简单的更改,即可让您的 table 显示如您所愿。

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