背景介绍

最近在准备软考,下载了一些 PDF 资源,但是普遍单个文件很大,包含很多页数,阅读起来不是很方便,但是一些现成的工具拆分需要付费,就很坑。但是这点小事怎么能破费呢?

操作步骤

IDEA 新建 maven project

pom.xml 引入依赖

  1. <dependency>
  2. <groupId>com.itextpdf</groupId>
  3. <artifactId>itextpdf</artifactId>
  4. <version>5.5.13</version>
  5. </dependency>

核心代码:

  1. package com.paradise.core.common.pdf;
  2. import com.itextpdf.text.Document;
  3. import com.itextpdf.text.DocumentException;
  4. import com.itextpdf.text.pdf.PdfCopy;
  5. import com.itextpdf.text.pdf.PdfImportedPage;
  6. import com.itextpdf.text.pdf.PdfReader;
  7. import java.io.File;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. public class Split2 {
  13. public static void main(String[] args) {
  14. String file = "E:\\1.pdf";
  15. splitFile(file, 1, 24,"1-计算机系统知识");
  16. splitFile(file, 25, 34,"2-程序设计语言基础");
  17. splitFile(file, 35, 51,"3-数据结构");
  18. splitFile(file, 52, 59,"4-操作系统知识");
  19. splitFile(file, 60, 85,"5-软件工程基础知识");
  20. splitFile(file, 86, 94,"6-结构化开发方法");
  21. splitFile(file, 95, 112,"7-面向对象技术");
  22. splitFile(file, 113, 119,"8-算法设计与分析");
  23. splitFile(file, 120, 132,"9-数据库技术基础");
  24. splitFile(file, 133, 148,"10-网络与信息安全基础知识");
  25. splitFile(file, 149, 157,"11-标准化和软件知识产权基础知识");
  26. splitFile(file, 158, 167,"12-软件系统分析与设计");
  27. splitFile(file, 168, 180,"13-新技术");
  28. splitFile(file, 181, 186,"14-专业英语");
  29. splitFile(file, 187, 232,"2015.11考试真题");
  30. splitFile(file, 233, 271,"2016.5考试真题");
  31. splitFile(file, 272, 309,"2016.11考试真题");
  32. splitFile(file, 310, 350,"2017.05考试真题");
  33. splitFile(file, 351, 394,"2017.11考试真题");
  34. splitFile(file, 395, 436,"2018.05考试真题");
  35. }
  36. public static String splitFile(String pdfFile, Integer from, Integer end, String targetName) {
  37. Document document;
  38. PdfCopy copy;
  39. try {
  40. PdfReader reader = new PdfReader(pdfFile);
  41. int n = reader.getNumberOfPages();
  42. if (end == 0) {
  43. end = n;
  44. }
  45. List<String> savePaths = new ArrayList<>();
  46. int a = pdfFile.lastIndexOf("1.pdf");
  47. String staticPath = pdfFile.substring(0, a);
  48. String savePath = staticPath + targetName + ".pdf";
  49. savePaths.add(savePath);
  50. document = new Document(reader.getPageSize(1));
  51. copy = new PdfCopy(document, new FileOutputStream(savePaths.get(0)));
  52. document.open();
  53. for (int j = from; j <= end; j++) {
  54. document.newPage();
  55. PdfImportedPage page = copy.getImportedPage(reader, j);
  56. copy.addPage(page);
  57. }
  58. document.close();
  59. return new File(savePath).getName();
  60. } catch (IOException | DocumentException e) {
  61. return null;
  62. }
  63. }
  64. }

TODO:
如何获取 pdf 目录 并实现根据目录自动拆分?

参考文章