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

PDFBox 3.0.0-alpha3使用Wingdings字体绘复选框/单选框报错求助

解决PDFBox使用Wingdings字体绘制复选框/单选框的字形缺失问题

问题根源

Wingdings是专用符号字体,它的字符映射和标准Unicode字符集不匹配。你使用的\u2610(空心复选框)和\u25CF(实心圆)属于标准Unicode符号,但Wingdings字体里这些码点并没有对应的字形,而是用ASCII范围内的字符码来映射符号。

解决方案1:使用Wingdings字体对应的正确字符码

根据Wingdings的字符映射表,常用符号对应的字符:

  • 空心复选框:对应ASCII 0x52(即字符'R')
  • 实心单选框:对应ASCII 0x7C(即字符'|')

修改后的代码如下:

public static void main(String[] args) throws Exception {
    try(PDDocument document = new PDDocument()){
        PDPage page = new PDPage(PDRectangle.A4);
        document.addPage(page);

        File fontFile = new File("Wingdings-Regular-Font.ttf");
        PDType0Font font = PDType0Font.load(document, fontFile);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);

        // 空心复选框(Wingdings中对应字符'R')
        contentStream.beginText();
        contentStream.setFont(font, 16);
        contentStream.newLineAtOffset(100, 700);
        contentStream.showText("R");
        contentStream.endText();

        // 实心单选框(Wingdings中对应字符'|')
        contentStream.beginText();
        contentStream.setFont(font, 16);
        contentStream.newLineAtOffset(100, 650);
        contentStream.showText("|");
        contentStream.endText();

        contentStream.close();
        document.save("output.pdf");
    }
}

解决方案2:直接用PDFBox绘图API绘制(更可靠)

如果不想依赖字体文件,也可以直接用PDFBox的绘图功能绘制复选框和单选框,避免字体兼容性问题:

public static void main(String[] args) throws Exception {
    try(PDDocument document = new PDDocument()){
        PDPage page = new PDPage(PDRectangle.A4);
        document.addPage(page);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        float size = 16;

        // 绘制空心复选框
        contentStream.setLineWidth(1f);
        contentStream.addRect(100, 700 - size, size, size);
        contentStream.stroke();

        // 绘制实心单选框
        contentStream.addCircle(100 + size/2, 650 - size/2, size/2);
        contentStream.fill();

        contentStream.close();
        document.save("output.pdf");
    }
}

说明

  • 方案1需要确保Wingdings字体文件路径正确,且字体版本对应的字符映射一致;
  • 方案2不依赖外部字体,兼容性更强,适合需要稳定输出的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:23