出现这种问题的原因是由于PdfBox升级导致一些方法变更,因此需要一些修改。下面给出一个示例代码,以演示如何修复这个问题:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PdfToImageConvertor {
private static final String PDF_FILE_PATH = "input.pdf";
private static final String DESTINATION_FOLDER_PATH = "output/";
public static void main(String[] args) {
try {
PDDocument document = PDDocument.load(new File(PDF_FILE_PATH));
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int pageCounter = 0; pageCounter < document.getNumberOfPages(); pageCounter++) {
PDPage pdPage = document.getPage(pageCounter);
BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter, 300);
File outputfile = new File(DESTINATION_FOLDER_PATH + "image_" + (pageCounter + 1) + ".png");
PDImageXObject pdImageXObject = PDImageXObject.createFromFileByContent(outputfile, document);
pdPage.getResources().getCOSObject().setNeedToBeUpdated(true);
pdPage.getResources().getXObject(pdImageXObject.getCOSObject().getItem(COSName.NAME)).getCOSObject()
.setNeedToBeUpdated(true);
}
document.save("output.pdf");
document.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
这个示例代码的作用是将PDF文件转换为图片。在这个示例代码中,我们首先加载PDF文件,然后使用PDFRenderer渲染每个页面的图像,并将其保存在一个文件中。然后,我们使用PDImageXObject将每个页面的图像添加到相应的页面中。最后,我们将修改过的PDF文件保存到磁盘中。
需要注意的是,每次调用createFromFileByContent方法时,PDImageXObject都会自动调用COSStream.createTemporary方法,并将图像内容复制到一个ByteArrayOutputStream中。因此需要注意内存使用情况。
在修复这个问题后,我们就可以成功导入PDImageXObject了。