Java读取pdf中文

本文介绍了如何在Java中处理PDF文件中的中文字符,强调了选择正确的jar版本和覆写XMLWorkerFontProvider$getFont方法来使用系统字体,确保中文显示正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接使用系统字体读取或创建带中文的pdf,需要注意jar的版本。

        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.8</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.6</version>
        </dependency>

代码如下,覆写XMLWorkerFontProvider$getFont即可读取中文

    public void createPdf(String src, String dest) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
        document.open();
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(src), null, new XMLWorkerFontProvider(){

            public Font getFont(final String fontname, final String encoding,  
                    final boolean embedded, final float size, final int style,  
                    final BaseColor color) {  
                BaseFont bf = null;  
                try {  
                    bf = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
                Font font = new Font(bf, size, style, color);  
                font.setColor(color);  
                return font;  
            }  

        });
        document.close();
    }

创建时,使用系统(windows下)的字体即可

    BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);     
        Font font = new Font(baseFont); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值