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

如何使用PDFBox修改PDF内容的文本编码?

基于PDFBox修复PDF文本编码异常的实操方案
  • 先做问题诊断
    这类编码乱码/异常问题,大多是PDF内部字体编码映射错误(比如自定义编码未关联正确Unicode)或字体嵌入不完整导致的。先用PDFBox的命令行工具提取文本,明确问题细节:
    java -jar pdfbox-app-x.x.x.jar ExtractText -encoding UTF-8 你的PDF文件.pdf 输出文本.txt
    打开输出的文本文件,确认是全文档乱码还是局部字体导致的异常。

  • 核心修复步骤(代码实现)
    如果是编码映射错误,通过PDFBox重新关联字体的标准编码(比如WinAnsiEncoding或UTF-8),核心代码如下:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.font.*;
import java.io.File;

public class FixPdfEncoding {
    public static void main(String[] args) throws Exception {
        PDDocument document = PDDocument.load(new File("你的PDF文件.pdf"));
        for (PDPage page : document.getPages()) {
            PDResources resources = page.getResources();
            for (COSName fontName : resources.getFontNames()) {
                PDFont font = resources.getFont(fontName);
                // 针对不同类型字体重置编码
                if (font instanceof PDType0Font) {
                    ((PDType0Font) font).setEncoding(WinAnsiEncoding.INSTANCE);
                } else if (font instanceof PDType1Font) {
                    ((PDType1Font) font).setEncoding(WinAnsiEncoding.INSTANCE);
                }
                // 若为CJK字体,需确保嵌入对应完整字体,可额外设置CIDFont编码
            }
        }
        document.save("修复后的PDF文件.pdf");
        document.close();
    }
}

注意:如果是中文等CJK字体异常,要确保使用的字体文件包含完整的CJK字符集,必要时替换为已嵌入完整字符的字体。

  • 验证修复效果
    再次用PDFBox提取修复后的PDF文本,对比你期望的结果:
    java -jar pdfbox-app-x.x.x.jar ExtractText -encoding UTF-8 修复后的PDF文件.pdf 验证输出.txt
    如果仍有局部异常,需单独排查对应字体的编码映射,手动补充缺失的字符编码映射表。

  • 特殊情况处理
    如果你的PDF是扫描件经OCR生成的,编码异常可能是OCR识别错误导致的,这种情况需要重新用专业OCR工具(比如Tesseract)处理后,再用PDFBox整合文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:30:03