无法在 iTextSharp XMLWorker 中设置字体系列
本文关键字:设置 字体 系列 XMLWorker iTextSharp | 更新日期: 2023-09-27 18:36:33
我正在尝试使用itextsharp XMLWorker库将一些HTML解析为PDF。它工作正常,但我无法将一些 Unicode 字符(土耳其语)渲染到我的 pdf 中。
我已经阅读了几个关于这个问题的博客,他们都建议注册一种支持 unicode 字符的字体。然后在外部css文件中,我需要指定要使用的字体系列。
html
{
font-family: 'Arial Unicode MS';
}
我也尝试了所有Arial
作为家人。我也尝试在 html 中设置家庭。
<body face = 'Arial'>
他们都没有工作。字体注册没有问题,外部CSS文件也可以工作。
这就是我将HTML转换为PDF的方式,
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
FontFactory.Register(arialuniTff);
// Resolve CSS
var cssResolver = new StyleAttrCSSResolver();
var cssFile = XMLWorkerHelper.GetCSS(new FileStream(Server.MapPath("~/Content/Editor.css"), FileMode.Open));
cssResolver.AddCss(cssFile);
// HTML
CssAppliers ca = new CssAppliersImpl();
HtmlPipelineContext hpc = new HtmlPipelineContext(ca);
hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
// PIPELINES
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline htmlPipe = new HtmlPipeline(hpc, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, htmlPipe);
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
StringReader sr = new StringReader("<html><head></head><body>" + topMessage.Replace("<br>", "<br></br>") + "</body></html>");
p.Parse(sr);
我看到您在不使用参数的情况下创建了CssAppliersImpl
实例。如果要处理字体,则应创建一个"FontProvider"实现,并将该实现的实例用作CssAppliersImpl
构造函数的参数。例如:创建一个 TestFontProvider
类,显示解析 HTML 时需要哪些字体名称。这将帮助您了解是否注册了正确的字体。如果您看到所有必需的字体都已注册,则问题可能是由其他原因引起的。例如:也许 HTML 使用错误的编码解析......
这是经过
多次尝试后的工作解决方案:
string fontPath = Path.Combine(@"fonts'Gaegu-Regular.ttf");
var fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.Register(fontPath);
CssAppliers ca = new CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(ca);
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
谢谢。