目录
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。
引入依赖
业务代码
读取网络中的PDF文件与文件类型转换
如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。
有以下中有功能 -
- Extract Text - 使用PDFBox,您可以从PDF文件中提取Unicode文本。
- Split & Merge - 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。
- Fill Forms - 使用PDFBox,您可以在文档中填写表单数据。
- Print - 使用PDFBox,您可以使用标准Java打印API打印PDF文件。
- Save as Image - 使用PDFBox,您可以将PDF保存为图像文件,如PNG或JPEG。
- Create PDFs - 使用PDFBox,您可以通过创建Java程序创建新的PDF文件,还可以包含图像和字体。
- Signing - 使用PDFBox,您可以将数字签名添加到PDF文件。
有一个教程对PDFBox的介绍很详细,这里不再多说。
引入依赖
<!--start:PDF获取第一页的图片-->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.20</version>
</dependency>
<!--end:PDF获取第一页的图片-->
业务代码
/**
* 截取PDF中的某一页作为缩略图,并上传(保存)
* @param pdfFileName
* @return
*/
public String PDFFramer(String pdfFileName){
//将网络中的PDF文件转换成file
File file = URLToFile(pdfFileName);
//new File() 只能访问本地文件
//将本地文件转换成file
//File file = new File("C:\\Users\\Administrator\\Downloads\\(重要必看).pdf");
String pdfUrl="";
try
{
// 打开来源 pdf
log.info("开始截取PDF:");
//PDDocument类的load()方法用于加载现有PDF文档
PDDocument pdfDocument = PDDocument.load(file);
//PDFRenderer的类将PDF文档呈现为AWT BufferedImage
PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument);
// 提取的页码
int pageNumber = 0;
// 以300 dpi 读取存入 BufferedImage 对象
int dpi = 300;
//Renderer类的renderImage()方法在特定页面中渲染图像
BufferedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
// 文件类型转换
MultipartFile multipartFile = fileCase(buffImage);
log.info("PDF开始上传:");
pdfUrl = fileLoad(multipartFile);
log.info("PDF上传成功:{}",pdfUrl);
// 关闭文档
pdfDocument.close();
//删除临时文件
String s = threadLocal.get();
log.info("临时文件的目录:"+s);
File f=new File(s);
boolean delete = f.delete();
log.info("文件是否删除"+delete);
}
catch (InvalidPasswordException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return pdfUrl;
}
读取网络中的PDF文件与文件类型转换
/**
* 读取网络中的PDF文件
* @param url
* @return
*/
public File URLToFile(String url){
log.info("读取FastDFS上的PDF");
//保存临时文件--jar包的相对位置
File file1 = new File("Temporary.pdf");
try {
URL url1 = new URL(url);
FileUtils.copyURLToFile(url1,file1);
} catch (IOException e) {
e.printStackTrace();
}
File absoluteFile = file1.getAbsoluteFile();
threadLocal.set(absoluteFile.toString());
log.info("ppt已经存储到本地"+absoluteFile.toString());
return file1;
}
/**
* 文件转换将BufferedImage转换成MultipartFile:为了文件上传
* @param image
* @return
*/
public static MultipartFile fileCase(BufferedImage image){
//得到BufferedImage对象
// BufferedImage bufferedImage = JoinTwoImage.testEncode(200, 200, url);
MultipartFile multipartFile= null;
try {
//创建一个ByteArrayOutputStream
ByteArrayOutputStream os = new ByteArrayOutputStream();
//把BufferedImage写入ByteArrayOutputStream
ImageIO.write(image, "jpg", os);
//ByteArrayOutputStream转成InputStream
InputStream input = new ByteArrayInputStream(os.toByteArray());
//InputStream转成MultipartFile
multipartFile =new MockMultipartFile("file", "file.jpg", "text/plain", input);
} catch (IOException e) {
e.printStackTrace();
}
return multipartFile;
}