【发布时间】:2018-05-29 13:33:35
【问题描述】:
我正在使用带有 XmlWorker 版本 5.5.12.0 的 iTextsharp 库,并且列表面临的问题包含在 DIV 中。
<body>
<span>
<ul>
<ul>
<li>Project Management
<ul>
<li>
<a class="jwiki-small" data-containerid="2544" data-containertype="14" data-objectid="14695" data-objecttype="102" href="https://SampleUrl.com/DOC-146">Sample Text</a>
</li>
</ul>
</li>
</ul>
</ul>
</span>
</body>
pdf 看起来正确,如下图所示。
但是一旦 List 包含在任何级别的 Div 中,格式问题就会开始。 pdf中的列表变为内联。
<body>
<div>
<span>
<ul>
<ul>
<li>Project Management
<ul>
<li>
<a class="jwiki-small" data-containerid="2544" data-containertype="14" data-objectid="14695" data-objecttype="102" href="https://SampleUrl.com/DOC-146">Sample Text</a>
</li>
</ul>
</li>
</ul>
</ul>
</span>
</div>
</body>
仅供参考,这是我正在使用的 CreatePDF 方法。
private void CreatePDF(string html)
{
var document = new Document(iTextSharp.text.PageSize.A4,20,20,20,20);
var memoryStream = new MemoryStream();
using (var pdfWriter = PdfWriter.GetInstance(document, memoryStream))
{
document.Open();
var htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
htmlContext.SetImageProvider(new CustomItextImageProvider());
htmlContext.CharSet(Encoding.UTF8);
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, pdfWriter)));
var xmlWorker = new XMLWorker(pipeline, true);
var xmlParser = new XMLParser(true,xmlWorker);
StringReader rdr = new StringReader((html));
xmlParser.Parse(rdr);
pdfWriter.CloseStream = false;
document.AddCreator("iTextSharp");
document.AddAuthor("ThreeWill");
document.Close();
string fileName = @"c:\temp\" + "test" + DateTime.Now.ToString("yyyy-mm-dd hh.mm.ss") + ".pdf";
var outputFileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
memoryStream.Position = 0;
memoryStream.WriteTo(outputFileStream);
outputFileStream.Close();
}
}
【问题讨论】:
-
你能用 iText 7.1.0 + pdfHTML 2.0.0 重现这个吗?
-
不,最新版本无法复制。我将投票关闭这个问题作为题外话,表明这是一个无法再重现的问题。升级应该可以解决问题。