You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

说明

  1. 确保使用iText7 7.1.15及以上版本,该版本开始支持COLR/CPAL格式的颜色字体(大部分彩色符号字体采用此格式)
  2. SetColorFont(true)会让iText7解析并加载字体中携带的颜色信息表,生成PDF时自动渲染字体原生颜色,无需额外设置文本颜色

内容的提问来源于stack exchange,提问作者fharreau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:35:33