前言
初入公司,很多朋友如果碰到一些莫名其妙的需求,没有做过就会很慌张。不要慌张,本文通过一个小案例手把手教你写需求。
场景
一个阳光明媚的下午,需求小姐姐向你款款走来,娇滴滴的寻求你帮忙,她需要你把 PDF文件转换成jpg文件。
表面上你不动声色,心里想到:直接打开pdf文件,然后截图,直接更改图片后缀名为jpg不就搞定了?这也算一个需求?
需求小姐姐似乎看出了你的疑惑:这是我的pdf文件《Java核心技术卷Ⅰ》.pdf
一共700多页,似乎在暗示你 截图大法不够合适。
看着小姐姐期许的眼神,你怎么好意思说出买个付费的格式转换软件呢?只好说:稍等,我写个代码帮你搞定!
小姐姐点点头,很满意,咱们接下来开始写代码。
代码实现:
- 先熟练的创建一个maven工程,好方便自己管理依赖
- 动手写一个main方法,理清自己的逻辑
public static void main(String[] args) throws IOException {
//这是jpg文件的输出路径
String outDirPath = "C:\\Users\\w_rcss\\Desktop\\out";
// 这是目标文件《Java核心技术卷Ⅰ》.pdf的存放路径
String filePath = outDirPath + "\\《Java核心技术卷Ⅰ》.pdf";
//取了个方法名,就叫setup吧,格式转换肯定要把文件作为参数传进去
setup(filePath, outDirPath);
}
-
接下来就是实现setup方法,可是setup中怎么操作pdf格式的文档呢?
-
直接上网调研,发现可以用apache的pdfbox来操作pdf文档
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 使用此库,可以开发用于创建,转换和操作PDF文档的Java程序。
附:官方文档链接
-
pom中直接引入pdfbox依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.15</version>
</dependency>
- 实现setup方法
public static void setup(String filePath, String outDirPath) throws IOException {
//通过文件拿到file对象
File file = new File(filePath);
// load()是PDDocument的静态方法,直接加载目标pdf文档
PDDocument document = PDDocument.load(file);
// PDFRenderer是一个PDF渲染器,为每个要渲染的页面打开页面,渲染并关闭页面
PDFRenderer renderer = new PDFRenderer(document);
// 获取目标pdf的总页数
int pageTotal = document.getNumberOfPages();
System.out.println("页数:" + pageTotal);
File outDir = new File(outDirPath);
// 两个校验判定
if (!outDir.exists()) {
outDir.mkdirs();
}
if (!outDir.isDirectory()) {
System.err.println("请填写正确的输出路径");
System.exit(0);
}
int pageName = 0;
// for循环 循环将pdf转换成jpg
for (int pageIndex = 0; pageIndex < pageTotal; pageIndex++) {
System.out.println("正在转换第 " + pageIndex + " 页");
// 用RGB方式渲染700DPI
BufferedImage image = renderer.renderImageWithDPI(pageIndex, 700, ImageType.