Apache PDFBox 库是一个开源、用于操作 PDF 文档的 Java 工具库。PDFBox 允许创建新的 PDF 文档、操作现有文档,以及从文档中提取内容。
获取 Apache PDFBox 下载地址,目前版本 2.0.25,核心 jar 是 pdfbox-2.0.25.jar,其他还有几个 jar 可以根据需要进行导入。
这里 jar包下载与源码学习可以下载全部的 jar 和一些命令行工具,下载 pdfbox-2.0.25-src.zip 源码可以看到文件夹 examples 里面有不少例子进行了示范。
pdf合并
package pdfUtity;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
//import org.apache.pdfbox.util.PDFMergerUtility;
public class pdfMerge {
private static String[] getPdfs(String fileAddress) throws IOException {
File file = new File(fileAddress);
String[] pdfs;
if (file.isDirectory()) {
pdfs = file.list();
return pdfs;
} else {
throw new IOException("输入的路径有问题");
}
}
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
PDFMergerUtility mergePdf = new PDFMergerUtility();
System.out.println("请输入要合并的PDF文件所在的文件夹路径");
String fileAddress = in.nextLine();
System.out.println("你输入的路径是:" + fileAddress);
String destinationFileName = "javaweb2020.pdf";
String[] pdfs = getPdfs(fileAddress);
for (int i = 0; i < pdfs.length; i++)
mergePdf.addSource(fileAddress + File.separator + pdfs[i]);
mergePdf.setDestinationFileName(destinationFileName);
System.out.println("合并比较费时间,请等待个几分钟吧!");
mergePdf.mergeDocuments();
System.out.print("合并完成");
}
}
pdf转换为图片
package pdfUtity;/*
* 读取 pdf,将其中的某一页另存为 png 图片
*/
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;
public class PDFSavePNG
{
public static void main(String[] args)
{
try
{
// 打开来源 pdf
PDDocument pdfDocument = PDDocument.load(new File("d://desktopfile//pdfs//1.pdf"));
PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument);
for(int pageNumber=0;pageNumber<pdfDocument.getNumberOfPages();pageNumber++){
// 提取的页码
// int pageNumber = 0;
// 以300 dpi 读取存入 BufferedImage 对象
int dpi = 300;
BufferedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
// 将 BufferedImage 写入到 png
ImageIOUtil.writeImage(buffImage, "d://desktopfile//pdfPhotos//"+pageNumber+".png", dpi);
// 关闭文档
}
pdfDocument.close();
}
catch (InvalidPasswordException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}