ITPub博客

首页 > 数据库 > 数据库开发技术 > 【实用小工具】(JAVA+PS)实现替换PDF图片文字

【实用小工具】(JAVA+PS)实现替换PDF图片文字

原创 数据库开发技术 作者:小南瓜开发平台 时间:2023-07-25 22:54:03 0 删除 编辑

背景

   PDF在办公、学习和生活中应用广泛,成为一种常见的文件格式,PDF具有以下优点:

  1. 可携带性:PDF文件可以方便地共享和传输,无论是在电脑、手机、平板还是其他设备上,都可以打开和查看。

  2. 兼容性:PDF文件在不同的软件和平台中打开时,格式和布局不会发生变化,保持一致性。

  3. 安全性:PDF文件可以设置密码保护,防止他人未经授权访问和修改,还可以进行数字签名,确保文件的真实性和完整性。

  4. 可读性:PDF文件可以设置页面布局、字体、颜色等,以保证文件的可读性和易读性。

  5. 编辑性:PDF文件可以进行注释、添加文本、图片、链接等操作,方便用户进行修改和更新。

国内的有:

  1. 极光PDF:提供多种PDF工具,包括编辑、合并、拆分、压缩、转换等。

  2. 迅捷PDF编辑器:一款功能强大的PDF编辑器,支持文本编辑、注释、添加水印等。

  3. 万兴PDF专家:提供PDF编辑、注释、表单填写、OCR识别等功能。

  4. 嗨格式PDF转换器:一款多功能PDF转换工具,支持PDF与Word、Excel、PPT等格式之间的相互转换。

  5. 福昕PDF编辑器:提供PDF编辑、注释、添加水印、合并等功能。

  6. 百度文库PDF转换器:支持PDF与Word、Excel、PPT等格式之间的相互转换,同时还提供PDF加密、解密、压缩、解压等功能。

国外的有:

  1. Adobe Acrobat DC:Adobe公司出品的PDF阅读器和编辑器,功能强大,支持多种操作系统和平台。

  2. Foxit Reader:Foxit公司出品的PDF阅读器和编辑器,具有多种功能和特点,支持多种操作系统和平台。

  3. Nuance PDF Reader:Nuance公司出品的PDF阅读器,具有多种功能和特点,支持多种操作系统和平台。

  4. Adobe Acrobat Reader DC:Adobe公司出品的PDF阅读器,具有多种功能和特点,支持多种操作系统和平台。

  5. Sumatra PDF Reader:一款轻巧的PDF阅读器,支持多种操作系统和平台。



在工作中,有时候需要将PDF中的内容及图片中的文字进行修改替换;

或者pdf文件中包含图片,由多个图片生成的;

这个时候这些软件就不能很好的识别和修改pdf文件的文字和字体了。

我们可以通过如下三个步骤修改pdf的文件:

1、将pdf文件生成图片

这里通过java编写一个小工具类将pdf文件生成图片

引入依赖

<!-- iText-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.54</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>

编写工具类:生成图片



import com.spire.pdf.*;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;
public class ExtractImg { public static void main(String[] args) throws Exception{ //加载测试文档 PdfDocument pdf = new PdfDocument(); pdf.loadFromFile("D:\\temp\\MSDS.pdf");
//定义一个int型变量 int index = 0;
//遍历PDF每一页 for (int i= 0;i< pdf.getPages().getCount(); i ++){ //获取PDF页面 PdfPageBase page = pdf.getPages().get(i);
//使用extractImages方法获取页面上图片 for (BufferedImage image : page.extractImages()) { System.out.println(">>>>>>>"); //指定输出图片名称 File output = new File( String.format("D:\\temp\\00Image_%d.png", index++)); //将图片保存为PNG格式文件 ImageIO.write(image, "PNG", output); } } }}

生成的图片:



2、修改图片文字

通过PS、画图工具等软件对图片文字进行修改


3、编写程序将多个图片生成pdf




import com.itextpdf.text.Document;import com.itextpdf.text.Image;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;import java.io.FileOutputStream;
/** * @author yabushan * @version v1.0 * @project: 公众号:小南瓜开发平台 * @description: 这里描述类的用处 * @copyright: © 2023 * @company: * @date 2018/5/16 14:23 */public class PdfUtil {
private static String FILEPATH = "D:\\temp\\tt\\";
/** * * @param fileName * 生成pdf文件 * @param imagesPath * 需要转换的图片路径的数组 */ public static void imagesToPdf(String fileName, String imagesPath) { try { fileName = FILEPATH+fileName+".pdf"; File file = new File(fileName); // 第一步:创建一个document对象。 Document document = new Document(); document.setMargins(0, 0, 0, 0); // 第二步: // 创建一个PdfWriter实例, PdfWriter.getInstance(document, new FileOutputStream(file)); // 第三步:打开文档。 document.open(); // 第四步:在文档中增加图片。 File files = new File(imagesPath); String[] images = files.list(); int len = images.length;
for (int i = 0; i < len; i++) { if (images[i].toLowerCase().endsWith(".bmp") || images[i].toLowerCase().endsWith(".jpg") || images[i].toLowerCase().endsWith(".jpeg") || images[i].toLowerCase().endsWith(".gif") || images[i].toLowerCase().endsWith(".png")) { String temp = imagesPath + "\\" + images[i]; Image img = Image.getInstance(temp); img.setAlignment(Image.ALIGN_CENTER); // 根据图片大小设置页面,一定要先设置页面,再newPage(),否则无效 document.setPageSize(new Rectangle(img.getWidth(), img.getHeight())); document.newPage(); document.add(img); } } // 第五步:关闭文档。 document.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void main(String[] args) { String name = "20001543"; String imagesPath = "D:\\temp\\tt\\"; imagesToPdf(name, imagesPath); }}


原文作者:小南瓜开发平台;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-21

  • 博文量
    209
  • 访问量
    89518