如何使用 Itextpdf XML Worker 将 HTML 上标标签转换为 PDF?
How do I convert HTML superscript tags to PDF using Itextpdf XML Worker?
我使用的是 itextpdf 版本 5.5.6。我传递了包含上标标签的 html,即 <sup>ABC</sup>
以及其他 HTML 内容。但是文本 ABC 显示为普通文本。看起来上标标签 <sup>
被转义并且 ABC 文本显示为普通文本。下面是使用 itextpdf 生成 PDF 的代码。
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
byte[] byte1=htmlBufferForPDF.toString().getBytes("UTF-8");
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
ByteArrayInputStream stream = new ByteArrayInputStream(byte1);
p.parse(stream, Charset.forName("UTF-8"));
解决此问题的任何建议都会非常有帮助。
谢谢
以下内容适用于 iTextSharp / XML Worker 5.5.11 using the overloaded parseXHtml method 并明确设置 CSS 样式。
HTML:
string HTML = @"
<html><head>
<title>Test HTML</title>
</head><body>
<div>The 1<sup>st</sup> day of the month</div>
</body></html>
";
解析代码:
string css = "sup { vertical-align: super; font-size: 0.8em; }";
using (var stream = new MemoryStream())
{
using (var document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, stream);
document.Open();
using (var htmlStream = new MemoryStream(Encoding.UTF8.GetBytes(HTML)))
{
using (var cssStream = new MemoryStream(Encoding.UTF8.GetBytes(css)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(
writer, document, htmlStream, cssStream
);
}
}
}
File.WriteAllBytes(OUTPUT, stream.ToArray());
}
输出:
这在 HTML5 和 PDF 视图中对我都有效。 pdf 似乎忽略了 css 但喜欢标签...
<html>
<head>
<style>
.sup {
font-size: 60%;
vertical-align: super;
}
</style>
</head>
<body><span>Something<sup><span class="sup">©</span></sup> Else</span>
</body>
</html>
我使用的是 itextpdf 版本 5.5.6。我传递了包含上标标签的 html,即 <sup>ABC</sup>
以及其他 HTML 内容。但是文本 ABC 显示为普通文本。看起来上标标签 <sup>
被转义并且 ABC 文本显示为普通文本。下面是使用 itextpdf 生成 PDF 的代码。
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
byte[] byte1=htmlBufferForPDF.toString().getBytes("UTF-8");
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
ByteArrayInputStream stream = new ByteArrayInputStream(byte1);
p.parse(stream, Charset.forName("UTF-8"));
解决此问题的任何建议都会非常有帮助。
谢谢
以下内容适用于 iTextSharp / XML Worker 5.5.11 using the overloaded parseXHtml method 并明确设置 CSS 样式。
HTML:
string HTML = @"
<html><head>
<title>Test HTML</title>
</head><body>
<div>The 1<sup>st</sup> day of the month</div>
</body></html>
";
解析代码:
string css = "sup { vertical-align: super; font-size: 0.8em; }";
using (var stream = new MemoryStream())
{
using (var document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, stream);
document.Open();
using (var htmlStream = new MemoryStream(Encoding.UTF8.GetBytes(HTML)))
{
using (var cssStream = new MemoryStream(Encoding.UTF8.GetBytes(css)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(
writer, document, htmlStream, cssStream
);
}
}
}
File.WriteAllBytes(OUTPUT, stream.ToArray());
}
输出:
这在 HTML5 和 PDF 视图中对我都有效。 pdf 似乎忽略了 css 但喜欢标签...
<html>
<head>
<style>
.sup {
font-size: 60%;
vertical-align: super;
}
</style>
</head>
<body><span>Something<sup><span class="sup">©</span></sup> Else</span>
</body>
</html>