抖音资讯

douyinzx

长截图如何分页打印pdf(拆分pdf文件最简单的方法)

iseeyu2年前 (2024-05-06)抖音资讯138

背景

抱歉也开始用了这么“标题党”的标题。事情起源于前几天需要把个人资料的pdf文档一页一页的拆出来,好传到相关的网站上。直接截图到word再转pdf比较麻烦,所以想用工具直接转换。结果找了几个pdf阅读器,这类操作都需要会员或收费。作为一名程序员,这么简单的操作还要收费显然是一种羞耻(当然我是不会承认主要是因为qiong的),几分钟就可以代码解决的问题为啥要花钱呢?废话不多说,开搞。

工具准备

之前的文章Apache POI 详解及 Word 文档读取示例中,我们曾经用apache poi来实现对word文档的操作。对于pdf文件,也同样有apache的pdfbox(官网:
https://pdfbox.apache.org/),和itextpdf(官网:https://itextpdf.com/)包可以使用。

PDFBox:

PDFBox 是 Java 实现的 PDF 文档协作类库,提供 PDF 文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具。PDFBox提供的主要功能有:

  • 从 PDF 提取文本
  • 合并 PDF 文档
  • PDF 文档加密与解密
  • 与 Lucene 搜索引擎的集成
  • 填充 PDF/XFDF 表单数据
  • 从文本文件创建 PDF 文档
  • 从 PDF 页面创 建图片
  • 打印 PDF 文档

itextpdf:

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

依赖引入

新建一个java maven工程,引入依赖包(这里使用的是itextpdf的5.5.1 和 pdfbox的2.0.15版本):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>pdf-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.1</version>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.15</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.15</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/jempbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>jempbox</artifactId>
            <version>1.8.16</version>
        </dependency>
    </dependencies>

</project>

pdf文件拆分导出实现

要实现功能:输入pdf文件路径,指定起止页码,截取这几页内容并写入新的pdf文件。例如起始页码1,截止页码3,则生成一个新文件,存储原pdf文档的1-3页。

这里使用的是itextpdf,代码如下:

/** * 导出pdf文档中的部分页到新的pdf文件 * @param filePath 文件路径 * @param newFile 写入目标文件路径 * @param from 起始页码 * @param end 结束页码 */
	public static void pdfToSub(String filePath, String newFile, int from, int end) {
		Document document = null;
		PdfCopy copy = null;
		try {
			PdfReader reader = new PdfReader(filePath);
			//查询pdf文档页数
			int n = reader.getNumberOfPages();
			if (end == 0) {
				end = n;
			}
			document = new Document(reader.getPageSize(1));
			copy = new PdfCopy(document, new FileOutputStream(newFile));
			document.open();
			for (int j = from; j <= end; j++) {
				document.newPage();
				PdfImportedPage page = copy.getImportedPage(reader, j);
				copy.addPage(page);
			}
			document.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

main函数:

String filePath = "/Users/xxxx/Downloads/数据中台- 77ebooks.com.pdf";
String newFile = "/Users/xxxx/Downloads/1-3.pdf";
pdfToSub(filePath, newFile, 1, 3);

执行后在目录下可以看到结果文件:

 

 

读取pdf文件内容

使用pdfbox的pdfparser,代码如下:

/** * 读取pdf文档指定页数的文本内容 * @param fileName 文件路径及文件名 * @param from 开始页码 * @param end 结束页码 * @return */
	public static String readPdfByPage(String fileName, int from, int end) {
		String result = "";
		File file = new File(fileName);
		FileInputStream in = null;
		try {
			in = new FileInputStream(fileName);
			// 新建PDF解析器对象
			PDFParser parser = new PDFParser(new RandomAccessFile(file,"rw"));
			// 文件解析
			parser.parse();
			// 获取解析后得到的PDF文档对象
			PDDocument pdfDocument = parser.getPDDocument();
			int size = pdfDocument.getNumberOfPages();
			// 新建PDF文本剥离器
			PDFTextStripper stripper = new PDFTextStripper();
			stripper.setSortByPosition(false); //true则按照行进行读取,默认false

			// 设置起始页
			stripper.setStartPage(from);
			// 设置结束页
			stripper.setEndPage(end);
			// 从PDF文档中读取文本
			result = stripper.getText(pdfDocument);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
		return result;
	}

执行后输出:

 

示例需要需要引入的package如下:

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import org.apache.pdfbox.io.RandomAccessFile;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

小结

本篇对pdf的操作做了初步的尝试。后续将详解pdf文件格式,以及pdfbox和itextpdf的核心源码。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/43467.html

相关文章

搜狗跑数码产品广告下单成本多少?搜狗代理商是哪家?

搜狗跑数码产品广告下单成本多少?搜狗代理商是哪家?

另一家中国互联网公司可能将从美股退市。7月27日,搜狗网宣布已收到腾讯对该公司的首次非约束性收购要约。搜狗广告电话如果拟议交易完成,搜狗将成为腾讯私人持有的间接全资子公司,搜狗的美国存托股票将从纽约证券交易所退市。受此影响,搜狗股价飙升近50%,截至发稿时为8.58美元。根据公告,腾讯计划收购搜狗已...

抖音超级福袋限制刷新多久?有哪些规则?

抖音超级福袋限制刷新多久?有哪些规则?

抖音超级福袋限制刷新多久?有哪些规则? 抖音超级福袋限制刷新多久? 刷新时间没有规定。 不能主动解除,一定要等账号变白才能解除。 如何设置抖音超级福袋? 首先主播要进入直播间→然后点击“互动玩法”→点“福袋”→“自定义奖励”,可以完成超级福袋...

快手“磁力增长数据营销”六大优势,赋能资产数据沉淀,助力营销提效

随着互联网流量增长速度放缓,新还在井喷式地出现,竞争日益激烈,互联网下半场的流量红利逐渐消失,原来粗放式的运营方式已经无法满足生意的高效增长,如何破局成为广告主亟待解决的问题。数字化营销可以将很多碎片化的信息转变为可度量的,建立数字化模型,有依据、可视化地助力广告主的营销各...

抖音短视频运营是什么(抖音短视频运营是什么

抖音短视频运营是什么(抖音短视频运营是什么

本文目录 抖音官方运营是做什么的? (1)收集整理可用于抖音短视频的内容素材,包括文字、视频、音频、图片等。 (2)撰写抖音短视频脚本,确定内容选题,策划抖音剧本及热点话题。 (3)统计分析抖音平台相关数据,包...

抖音转发出现好友顺序是怎么删除掉(抖音调整私信的顺序)

抖音转发出现好友顺序是怎么删除掉(抖音调整私信的顺序)

抖音app在不断更新的过程中增加了很多新的功能,除了之前更新的热搜、点赞、评论等功能,最近抖音正式上线转发功能,一起来看看新版抖音转发功能在哪里及其使用方法一览! 新版抖音转发功能在哪里 抖音的视频一直以来只有点赞、评论,对于站内视频的扩散一直依靠系统的推荐机制,即使是转...

抖音不能关注别人怎么回事(抖音点不上关注破解方法)

抖音不能关注别人怎么回事(抖音点不上关注破解方法)

被关进小黑屋怎么办?最近小编总是看到有人在贴吧里评论被关进小黑屋,那么一般会关进小黑屋多久呢,在此期间无法发视频,有人说7天后解禁是真的吗,今天小编就和大家介绍一下吧! 抖音被关进小黑屋 正常情况下,被关进小黑屋,可以关注别人,也可以被别人关注,也可以看视频,但是有一点是无法发布视频...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片