我是如何接触到PDFBox的
疫情期间,周末在家老实呆着,女友在学法律,但女友学习法律的pdf文件资料里每页都有一些类似培训机构联系方式的一些文字,共三四百页,用普通的编辑软件删除不了,如果要删除的话必须开通会员,也可能我没找到免费的软件吧,我国的办公编辑软件也真够可以的了,编辑个PDF还要收费,我是程序员,也明白软件开发需要成本和消耗,但如果作为大众使用者还是接受不了收费软件.于是乎,作为猿的我只能自己研究下怎么自己写代码去掉那些不怎么好看的文字,上网查找资料有哪些基于Java的类库可以读取PDF,就找到了很多猿都用的PDFBox,PDFBox同样是来自给我们猿贡献了很多免费软件的Apache基金会.
Apache PDFBox介绍
直接去官网Apache PDFBox,看版本已经发布到2.0了,首页说该类库的功能对PDF文件有:创建,提取文字,分割合并,填写表格,打印,另存为图片和加密功能,对于我的需求来说足够了,操作文档pdf操作内置对象文档,看不懂翻译即可
需求代码
我的需求是去掉PDF里每页的固定位置的文字(多余的培训机构的联系方式),以下称"多余部分",但我经过测试发下,哪些其实不是文字而是图片,整页是一张大图片,那更好操作了,首先maven引入dependency你懂得,计划为共分为三步.
1.先把pdf三四百页,以每页为一张图片导出来
/**
* pdf 转换为图片
* @param pdfPath pdf文件路径
* @param imgPath 图片导出目标路径
*/
public static void getImgInPDF(String pdfPath,String imgPath){
PDDocument document = null;
try {
File pdfFile = new File(pdfPath);
// 加载pdf文档,在pdmodel包
document = PDDocument.load(pdfFile);
// PDF文档总页数
System.out.println("共 "+num+" 页.");
// PDF文档渲染对象,在rendering包
PDFRenderer renderer = new PDFRenderer(document);
String startDate = DateTool.now();
int pageCount = document.getNumberOfPages();
System.out.println("共 "+pageCount+" 页.");
for (int i = 0; i < pageCount; i++) {
/**
* renderImage(i,1.9f)
*
* i: 指定页对象下标,从0开始,0即第一页
*
* 1.9f:DPI值(Dots Per Inch),官方描述比例因子,其中1=72 DPI
* DPI是指每英寸的像素,也就是扫描精度,DPI越低,扫描的清晰度越低
* 根据根据自己需求而定,我导出的图片是 927x1372
*/
BufferedImage image = renderer.renderImage(i,1.9f);
// 导出图片命名为:0-n.jpeg
ImageIO.write(image, "JPEG", new File(imgPath+i+".jpeg"));
System.out.println("导出 "+imgPath+i+".jpeg...");
}
System.out.println("开始时间:"+startDate);
System.out.