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;
}
从 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;
}