详解Java如何实现在PDF中插入,替换或删除图像
作者:Carina-baby 发布时间:2022-04-07 22:40:36
前言
图文并茂的内容往往让人看起来更加舒服,如果只是文字内容的累加,往往会使读者产生视觉疲劳。搭配精美的文章配图则会使文章内容更加丰富,增加文章可读性的同时,也能提升用户体验。但由于PDF文档安全性较高,不易对其进行修改编辑,那我们要如何在PDF中插入、替换或删除图像呢?别担心,今天为大家介绍一种高效便捷的方法。我们可以通过编程的方式来实现此操作。
将图像插入PDF文档
替换PDF文档中的图像
删除PDF文档中的指定图像
代码编译环境:
IntelliJ IDEA 2018(jdk 1.8.0)
PDF Jar包:Free Spire.PDF for Java 5.1.01.引入jar包
导入方法1:
手动引入。将Free Spire.PDF for Java下载到本地,解压,找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:
导入方法2:如果您想通过 Maven安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
将图像插入PDF文档
初始化 PdfDocument 类的实例。
使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
使用 PdfDocument.getPages().get() 方法在 PDF 文档中获取所需的页面。
使用 PdfImage.fromFile() 方法加载图像。
指定页面上图像区域的宽度和高度。
指定 X 和 Y 坐标以开始绘制图像。
使用 PdfPageBase.getCanvas().drawImage() 方法在页面上绘制图像。
使用 PdfDocument.saveToFile() 方法保存结果文档。
完整代码
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
public class AddImage {
public static void main(String []args){
//初始化 PdfDocument 类的实例
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("阿拉斯加犬.pdf");
//获取所需的页面
PdfPageBase page = pdf.getPages().get(0);
//加载图像
PdfImage image = PdfImage.fromFile("图片1.jpg");
//指定页面上图像区域的宽度和高度
float width = image.getWidth() * 0.30f;
float height = image.getHeight() * 0.30f;
//指定 X 和 Y 坐标以开始绘制图像
float x = 130f;
float y = 240f;
//在页面指定位置上绘制图像
page.getCanvas().drawImage(image, x, y, width, height);
//保存结果文档
pdf.saveToFile("插入图片.pdf", FileFormat.PDF);
}
}
效果图
替换PDF文档中的图像
以下是替换PDF文档图像的具体步骤:
初始化 PdfDocument 类的实例。
使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
使用 PdfDocument.getPages().get() 方法在 PDF 文档中获取所需的页面。
使用 PdfImage.fromFile() 方法加载图像。
使用 PdfPageBase.replaceImage() 方法将页面上的特定图像替换为加载的图像。
使用 PdfDocument.saveToFile() 方法保存结果文档。
完整代码
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
public class ReplaceImage {
public static void main(String []args){
//初始化 PdfDocument 类的实例
PdfDocument doc = new PdfDocument();
//加载 PDF 文档
doc.loadFromFile("插入图片.pdf");
//获取所需的页面
PdfPageBase page = doc.getPages().get(0);
//加载图像
PdfImage image = PdfImage.fromFile("图片2.jpg");
//将页面上的指定图像替换为加载的图像
page.replaceImage(0, image);
//保存结果文档
doc.saveToFile("替换图片.pdf", FileFormat.PDF);
}
}
效果图
删除PDF文档中的指定图像
以下是从 PDF 文档中删除图像的具体步骤:
初始化 PdfDocument 类的实例。
使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
使用 PdfDocument.getPages().get() 方法在 PDF 文档中获取所需的页面。
使用 PdfPageBase.deleteImage() 方法删除页面上的特定图像。
使用 PdfDocument.saveToFile() 方法保存结果文档。
完整代码
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
public class DeleteImage {
public static void main(String []args){
//初始化 PdfDocument 类的实例
PdfDocument pdf = new PdfDocument();
//加载 PDF 文档
pdf.loadFromFile("插入图片.pdf");
//获取所需的页面
PdfPageBase page = pdf.getPages().get(0);
//删除页面上的指定图像
page.deleteImage(0);
//保存结果文档
pdf.saveToFile("删除图片.pdf", FileFormat.PDF);
}
}
效果图
来源:https://www.cnblogs.com/Carina-baby/p/17044041.html


猜你喜欢
- 前言EasyCache升级兼容 Springboot2,有个业务系统启动总是会卡住,最后抛出超时异常,如下:java.util.concur
- 本文实例讲述了C#在运行时动态创建类型的实现方法。是C#项目开发中很实用的技巧。分享给大家供大家参考。具体分析如下:具体来说,C# 在运行时
- 反射反射定义对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有) 通过java语言中的反射机制可以操作字节码文件,可以读和修改
- 表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。SortedList最合适对一列健/值对 进行排序,在排序时,是对键进行排序,S
- 本篇实例内容是关于C#读取CAD文件的,直接看代码//在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上
- 目前只实现了java生成的固定的uuid:85bb94b8-fd4b-4e1c-8f49-3cedd49d8f28的序列化package m
- 1、线程的控制很常见,如文件传送到一半时,需要暂停文件传送,或终止文件传送,这实际上就是控制线程的运行。2、线程有创建、可运行、运行中、阻塞
- 首先先简单的说一下其3大特性的定义:封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。将抽象得到的数据和
- 引入假定我们有两个项目:Cup 和 Water,其中 Cup 表示主项目,而 Water 表示子模块项目。其中 Cup 的远程仓库地址为 g
- launch 是 CoroutineScope 的一个扩展函数,该方法在不阻塞当前线程的情况下启动新的协程,launch 里面的代码虽然有挂
- 如下所示本来 bookService的引用一直是null。导致每次测试都报空指针异常。然后现在继承相应的 ApplicationTests类
- 方法一,修改gradle.properties文件,增加一句gradle.user.home=D\:\\Android\\.gradle但这
- @WebFilter注解过滤器@WebFilter加在过滤器的注解上使用import lombok.extern.slf4j.Slf4j;i
- 本文实例为大家分享了android实现注册页面开发的具体代码,供大家参考,具体内容如下在values文件里创建以下几个文件colors代码:
- 1.什么是WebSocketWebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信
- 概述ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。ArrayList不是
- CAS原理在计算机科学中,比较和交换(Compare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较
- 一Map特性:1 Map提供一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;2
- 题目要求思路:模拟解题的核心思想在于逆向思维,不考虑每个子数组中的唯一字符个数,转而考虑每个字符可以作为多少个子数组的唯一字符;所以在计算答
- 如果一个项目内有很多个界面,那么在layout下会有太多的activity***.xml文件,这个时候就需要使用文件夹对这些分别存放了。当然