iText7嵌入字体原生颜色失效问题求助
嵌入彩色字体在iText7中丢失原生颜色的解决方案
问题背景
使用iText7嵌入一款带原生颜色的符号字体时,生成的PDF中文本仅显示黑白效果,但在Word中输入相同内容(如"aaaddd")可正常显示彩色符号;Word中若出现黑白显示,将文本颜色设为"auto"即可恢复原生颜色,但iText7中找不到对应设置。
复现代码
using iText.Kernel.Pdf; using iText.Layout.Element; using iText.Layout; using ConsoleApp1.Properties; using iText.IO.Font; using iText.Kernel.Font; var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\test.pdf"; var symbol = PdfFontFactory.CreateFont(Resources.swsymbolsFRcolor_Regular, PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED); var writer = new PdfWriter(path); var pdf = new PdfDocument(writer); var document = new Document(pdf); var paragraph1 = new Paragraph("aaaddd"); paragraph1.SetFont(symbol); document.Add(paragraph1); document.Close();
解决方案
这类字体属于颜色字体(Color Fonts),iText7默认未启用颜色字体的加载支持,需通过配置FontProgram.LoadOptions开启颜色信息加载:
修改后的代码
using iText.Kernel.Pdf; using iText.Layout.Element; using iText.Layout; using ConsoleApp1.Properties; using iText.IO.Font; using iText.Kernel.Font; var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\test.pdf"; // 启用颜色字体加载选项 var loadOptions = new FontProgram.LoadOptions(); loadOptions.SetColorFont(true); // 加载字体时传入选项 var symbol = PdfFontFactory.CreateFont(Resources.swsymbolsFRcolor_Regular, PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED, loadOptions); var writer = new PdfWriter(path); var pdf = new PdfDocument(writer); var document = new Document(pdf); var paragraph1 = new Paragraph("aaaddd"); paragraph1.SetFont(symbol); document.Add(paragraph1); document.Close();
说明
- 确保使用iText7 7.1.15及以上版本,该版本开始支持COLR/CPAL格式的颜色字体(大部分彩色符号字体采用此格式)
SetColorFont(true)会让iText7解析并加载字体中携带的颜色信息表,生成PDF时自动渲染字体原生颜色,无需额外设置文本颜色
内容的提问来源于stack exchange,提问作者fharreau
相关产品推荐
相关产品推荐

