pdfbox2.0.4将pdf与中文转换为png

时间:2017-02-28 09:35:22

标签: java pdfbox

我已导入 pdfbox-2.0.4.jar fontbox-2.0.4.jar commons-logging-1.1.1.jar 进入eclipse kepler。该程序在win10上运行。 控制台打印了很多这样的警告

org.apache.pdfbox.pdmodel.font.PDCIDFontType2 <init>
WARNING: Using fallback font ArialUnicodeMS for CID-keyed TrueType font KaiTi_GB2312.

我无法访问包含全部内容的图像文件。我该如何解决? 我的代码是这样的:

public class PdfboxTest {
    private static final String filePath = "xxx";
    private static final String outputFilePath = "xxx";

    public static void change(File inputFile, File outputFolder) throws IOException {

        String totalFileName = inputFile.getName();
        String fileName = totalFileName.substring(0,totalFileName.lastIndexOf("."));
        PDDocument doc = null;
        try {
            doc = PDDocument.load(inputFile);
            PDFRenderer pdfRenderer = new PDFRenderer(doc);
            int pageCounter = 0;
            for(PDPage page : doc.getPages())
            {
                BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter, 300, ImageType.RGB);
                ImageIOUtil.writeImage(bim, outputFilePath + "\\" + fileName + (pageCounter++) +".png", 300);
            }
            doc.close();

        } finally {
            if (doc != null) {
                doc.close();
            }
        }
    }
    public static void main(String[] args) {
        File inputFile = new File(filePath);
        File outputFolder = new File(outputFilePath);
        if(!outputFolder.exists()){
            outputFolder.mkdirs();
        }
        try {
            change(inputFile, outputFolder);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

如评论中所示 - 最佳解决方案是安装缺少的字体KaiTi_GB2312。消息Using fallback font表示PDF引用了上述字体并且没有嵌入它,但无法在您的计算机上找到它,因此PDFBox尝试了后备解决方案,在本例中为{{1字体。遗憾的是,这种后备解决方案并不总是完美的,这就是渲染图像中缺少某些字形的原因。