java 中的 Pdf(使用 3 型字体)到图像的转换

Pdf(with type 3 fonts) to Image conversion in java

我正在使用 icepdf 将 pdf 转换为图像。这是代码。

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;

import javax.imageio.ImageIO;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

public class PageCapture {

    private static ArrayList<File> fileNames = new ArrayList<File>();

    public static void main(String[] args) {

        // Get a file from the command line to open
        String filePath = "example.pdf";

        // open the file
        Document document = new Document();
        RenderedImage rendImages = null;
        File file = null;
        BufferedImage bi = null;

        int height = 0, width = 0, i = 0, x = 0, y = 0;
        try {
            document.setFile(filePath);

        } catch (PDFException ex) {
            System.out.println("Error parsing PDF document " + ex);
        } catch (PDFSecurityException ex) {
            System.out.println("Error encryption not supported " + ex);
        } catch (FileNotFoundException ex) {
            System.out.println("Error file not found " + ex);
        } catch (IOException ex) {
            System.out.println("Error IOException " + ex);
        }

        // save page captures to file.
        float scale = 5.0f;
        float rotation = 0f;

        // Paint each pages content to an image and
        // write the image to file
        for (i = 0; i < document.getNumberOfPages(); i++) {
            BufferedImage image = (BufferedImage) document.getPageImage(i,
                    GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX,
                    rotation, scale);
            height = image.getHeight();
            width = image.getWidth();
            rendImages = image;
            file = new File("C:/INC/imageCapture1_" + i + ".tif");
            try {
                fileNames.add(file);
                ImageIO.write(rendImages, "tif", file);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            image.flush();
        }
        try {
            BufferedImage result = new BufferedImage(width, height * i, // work
                                                                        // these
                                                                        // out
                    BufferedImage.TYPE_INT_RGB);
            Graphics g = result.getGraphics();
            for (int j = 0; j < fileNames.size(); j++) {

                bi = ImageIO.read(fileNames.get(j));
                g.drawImage(bi, x, y, null);
                y += height;
            }
            file = new File("C:/INC/imageCapture_new_.tif");
            ImageIO.write(result, "tif", file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // clean up resources
        document.dispose();
    }
}

上面的代码对于 true type 字体工作正常,但 type3 字体没有显示在图像中。

  1. 谁能告诉我如何将带有 type3 字体的 pdf 转换为图像。
  2. 以上代码为每个 pdf 页面生成每个图像。无论如何,是否可以为所有 pdf 页面生成单个图像。

开源版本的ICEpdf不支持Type 3字体。 PRO 版本确实支持 Type 3,并且可以根据需要获得许可。