java实现pdf转图片
摘要:利用Apache的pdfbox包进行操作,将pdf分成多个png图片。
环境:win10+Eclipse Oxygen+jdk1.8.0
第三方库:
注意:官方的pdfbox有2.0和1.8两种版本之分,在一些API上有差别。类似于Python2和Python3的区别,两者不能通用。我在一开始不了解这个区别,加之一些博客并没有明确说明,造成了很大困扰和时间浪费。本文是用的pdfbox2.0。
问题1:fontbox和pdfbox的下载地址。
解答:可以在官网中下载。https://pdfbox.apache.org/download.cgi#20x 百度搜索即可。点击左侧的download,在界面中选择下载。
问题2:只导入fontbox和pdfbox两个包为何会报错?
解答:需要导入commons-logging包,也是Apache的包。提供一些与日志相关的服务。
commons-logging的下载,可以在官网http://commons.apache.org/proper/commons-logging/download_logging.cgi上下载,点击左侧的download,在界面中选择下载即可。
代码:
/**
* @author 夹心 E-mail: yanjiaxin8410@163.com
* @version 创建时间:2018年5月18日 下午8:57:07
* 类说明
*/import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;public class PDF2png {//可自由确定起始页和终止页public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd) {// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = indexOfStart; i < indexOfEnd; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, "PNG", new File(fileAddress+"\\"+filename+"_"+(i+1)+".png"));}} catch (IOException e) {e.printStackTrace();}}//转换全部的pdfpublic static void pdf2png(String fileAddress,String filename) {// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, "PNG", new File(fileAddress+"\\"+filename+"_"+(i+1)+".png"));}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入需要转换的pdf的地址,例如 E:\软件\代码:");String fileAddress = sc.nextLine();System.out.println("请输入需要转换的pdf的名称,不要加.pdf后缀,例如 操作系统概念:");String filename =sc.nextLine();System.out.println("请输入开始转换的页码,从0开始,例如 5:");int indexOfStart=sc.nextInt();System.out.println("请输入停止转换的页码,-1为全部,例如 10:");int indexOfEnd=sc.nextInt();if (indexOfEnd==-1) {pdf2png(fileAddress, filename);}else {pdf2png(fileAddress, filename, indexOfStart, indexOfEnd);}}}
评价:
转换效率还是可以的,基本每秒转换一两张图片的速度。
图片的大小与清晰度和代码中的dpi设置有关,我尝试过96/144/198三个值,发现144比较合适。如果有特殊需求,需要更高清晰度的图片,可以自己手动调高dpi参数。
java实现pdf转图片相关推荐
- Java制作PDF转图片小工具
背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...
- java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案
java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案 方式 pdfBox iText(方式同上) spire.pdf.free(方式同上) 遇到的问题 图片清晰度.这种方式都有这个问 ...
- java代码pdf转图片中文乱码解决
1:java代码 @RequestMapping("/pdfToPng")public void pdfToPng(HttpServletResponse response) th ...
- Java 实现PDF转图片,去除PDF水印,图片转PDF
1.依赖jar包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian& ...
- java读取pdf三维图片_java 读取PDF文件生成图片形式
引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...
- JAVA的pdf转图片方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...
- java实现pdf转图片,并可生成黑白图片
一.开发前准备 所需jar:https://download.csdn.net/download/zqq3436/10588117 jdk版本:1.6 测试代码文件夹目录结构(pdf文件夹下有一些.p ...
- Java给PDF添加图片水印,且可以文字定位
这两天公司开发需要对PDF增加特定图片,类似于电子印章效果,试了许多网上的方式,经过测试PDF只可以插入图片或者通过RSA实现专属签章,我觉得插入图片好用一些,效果如下: 这是定位了<盖章> ...
- Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】
提示:有些时候我们需要在项目中展示PDF,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好.Java使用各种技术将pdf转换成图片格式,并且内容不失帧.清晰可见,该工具类也是开发中常用到的 ...
- java生成PDF(图片,模板,表格)
刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要 ...
最新文章
- php + mssql乱码
- python生成一圈数包裹一圈数的数组
- 无数老板做企业还在卖产品赚差价
- P5 MySQL数据类型和类型选择
- Linux——tmux和vim常用命令总结(必会)
- Flutter高性能,线程安全,App开发的未来
- 韩顺平 php大牛班课程,2016泰牛程序员韩顺平PHP大牛班HTML课程完整笔记资料.doc...
- Adobe Photoshop 中的魔棒工具
- 苹果appstore审核等待很长时间的解决方案
- 怎么合并mp3音频文件?
- 基于FPGA的任意字节数的串口发送(含源码工程)
- 判断当前入口是PC端企业微信还是PC端浏览器。或者是APP端企业微信
- RollPitchYaw傻傻分不清
- 渗透测试-微信刷票漏洞(IP伪造)
- 2021最新.NET/C#面试汇总:《.NET/C#面试手册》
- PyTorch学习笔记(20) ——激活函数
- 【Python】python 程序示例
- Selenium自动化测试框架基础学习(元素表单操作)(Selenium操作)
- 2022年C++学习路线以及知识整理汇总
- Intelligent Robot
热门文章
- 概率统计13——二项分布与多项分布
- 计算机换算单位 gb,mb与gb换算(gb转换mb计算器)
- 腾讯觅影正式对外开放,可用AI进行医学图像分析和辅助诊疗
- [C++系列] 66. 超详解C++阶段性总结思维导图
- 题目 1097: 蛇行矩阵
- 北京程序员平均工资达2万!你拖后腿了吗?
- 怎么用java打开pkg文件怎么打开,pkg文件怎么打开
【处置方式】
- day12【Lambda,函数式接口】Lamd
- 从NCBI中查看已发现的基因可变剪接
- oracle 存储过程body,【随手记】Oracle存储过程报错 Compilation errors for PACKAGE BODY