Java PdfBox将多页PDF转换为一张图像JPG

Java PdfBox将多页PDF转换为一张图像JPG,java,pdfbox,Java,Pdfbox,我有一个pdf和几个页面,我想把它转换成一个图像 我的实际代码创建一个pdf的页面图像 @Test public void testImage() throws IOException { try { PDDocument pdDocument = PDDocument.load(new File("download.pdf")); PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);

我有一个pdf和几个页面,我想把它转换成一个图像

我的实际代码创建一个pdf的页面图像

@Test
public void testImage() throws IOException {

    try {
        PDDocument pdDocument = PDDocument.load(new File("download.pdf"));
        PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
        for (int x = 0; x < pdDocument.getNumberOfPages(); x++) {
            BufferedImage bImage = pdfRenderer.renderImageWithDPI(x, 300, ImageType.RGB);
            ImageIOUtil.writeImage(bImage, String.format(x +"__template_image.%s", "jpg"), 300);
            File imageFile = new File(x +"_template_image.jpg");
        }
        pdDocument.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
@测试
public void testImage()引发IOException{
试一试{
PDDocument PDDocument=PDDocument.load(新文件(“download.pdf”);
PDFRenderer PDFRenderer=新的PDFRenderer(pdDocument);
对于(int x=0;x

如何为所有pdf页面仅创建一个图像?

以下是解决方案:

   @Test
    public void testImage() throws IOException {

        try {
            //Load PDF
            PDDocument pdDocument = PDDocument.load(new File("download.pdf"));
            //Create the renderer
            PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
            BufferedImage joinBufferedImage = new BufferedImage(10, 10,  BufferedImage.TYPE_INT_ARGB);

            for (int x = 0; x < pdDocument.getNumberOfPages(); x++) {

                BufferedImage bImage = pdfRenderer.renderImageWithDPI(x, 150, ImageType.RGB);
                joinBufferedImage = joinBufferedImage(joinBufferedImage, bImage);
                //File imageFile = new File(x +"_template_image.jpg");
            }

            ImageIOUtil.writeImage(joinBufferedImage, String.format("template_image.%s", "png"), 150);
            pdDocument.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 public BufferedImage joinBufferedImage(BufferedImage img1, BufferedImage img2) {

        //do some calculate first
        int offset = 5;
        int wid = Math.max(img1.getWidth(), img2.getWidth()) + offset;
        int height = img1.getHeight()+ img2.getHeight() + offset;
        //create a new buffer and draw two image into the new image
        BufferedImage newImage = new BufferedImage(wid, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = newImage.createGraphics();
        Color oldColor = g2.getColor();
        //fill background
        g2.setPaint(Color.WHITE);
        g2.fillRect(0, 0, wid, height);
        //draw image
        g2.setColor(oldColor);
        g2.drawImage(img1, null, 0, 0);
        g2.drawImage(img2, null, 0 , img1.getHeight() + offset);
        g2.dispose();
        return newImage;
    }
@测试
public void testImage()引发IOException{
试一试{
//加载PDF
PDDocument PDDocument=PDDocument.load(新文件(“download.pdf”);
//创建渲染器
PDFRenderer PDFRenderer=新的PDFRenderer(pdDocument);
BuffereImage JoinBuffereImage=新的BuffereImage(10,10,BuffereImage.TYPE_INT_ARGB);
对于(int x=0;x
这不是一个真正的PDFBox问题。。。您希望将多个图像合并为一个。但这些图像很可能有不同的大小。无论如何,策略是创建一个大图像,然后获得一个图形设备,然后在大图像上绘制单个图像。但是如果它们有不同的宽度/高度,应该怎么做?他们应该被画在彼此的正下方还是在彼此的正下方?是的,我成功地做到了你说的:)thnks