场景:调用第三方的接口取得的PDF文件流中有个不想要的图片,跟第三方接口沟通无果的情况下,自己想办法去掉吧。

解决思路:打算用PDFBox去掉PDF中的图片,但是在代码中resources.getImages()总是获取为空,经过一番搜索决定利用免费版的Spire.PDF for Java,测试结果图片果然被去掉了,但是生成的pdf顶部增加了多余的文字Evaluation Warning : The document was created with Spire.PDF for Java.。现在的问题又变成了去掉pdf的文字,用PDFBox去文字还是有效的,最后结合一下,达到了去掉PDF文件中图片的目的。

解决方式:

1、加入maven依赖

<dependency><groupId> e-iceblue </groupId><artifactId>spire.pdf</artifactId><version>3.11.6</version>
</dependency>
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version>
</dependency>

2、删除图片代码

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdfwriter.ContentStreamWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDStream;import java.io.*;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;/*** 删除pdf文件流中图片*/
public class DeleteImage {public static void main(String[] args) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();//创建一个PDF实例PdfDocument doc = new PdfDocument();//加载pdf base64流String pdfStr = "base64文件流";doc.loadFromBytes(Base64.getDecoder().decode(pdfStr));//获取文档的第一页PdfPageBase page = doc.getPages().get(0);//删除第一页的第一张图page.deleteImage(0);doc.saveToStream(baos);ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());// 删除水印handlePdfBook(swapStream);doc.close();}public static void handlePdfBook(InputStream in) {try (PDDocument pdfDocument = PDDocument.load(in)) {//加载PDF文件//处理PDF中的每一页for (PDPage page : pdfDocument.getPages()) {//解析PDF,找出其中有"xxxx"文字的token也就是COSString元素,找到后把值改掉即可PDFStreamParser parser = new PDFStreamParser(page);parser.parse();List<Object> tokens = parser.getTokens();for (Object o : tokens) {if (o instanceof COSString) {COSString cs = (COSString) o;if(cs.toString().contains("Evaluation Warning : The document was created with Spire.PDF for Java.")){cs.setValue(new byte[0]);}}}//将修改后的token要存进page中去,即修改page中原来的tokensPDStream updatedStream = new PDStream(pdfDocument);OutputStream out = updatedStream.createOutputStream(COSName.FLATE_DECODE);ContentStreamWriter tokenWriter = new ContentStreamWriter(out);tokenWriter.writeTokens(tokens);out.close();page.setContents(updatedStream);}//将修改后的PDF保存pdfDocument.save("d:\\修改后pdf.pdf");} catch (Exception e) {System.out.println(e.getMessage());}}}综上:其他的操作也可以开拓思路,组合实现。

Java去除PDF文件中的图片相关推荐

  1. 向pdf文件中插入图片及文字 java实现

    向pdf文件中插入图片及文字 引入itextpdf相关依赖 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> ...

  2. 如何用迅捷PDF转换器获取PDF文件中的图片

    工作中有的人喜欢将文档保存为PDF格式,因为PDF格式安全性和兼容性都比较高,但是在使用PDF文档的时候,也会一些小问题,比如说,PDF文档过大,想要查看文档中的图片,就需要耗费不少的时间,那么怎么才 ...

  3. PDF文件中的图片如何删除?分享两种删除方法

    我们怎么把PDF文件中的图片给删除掉呢?大家在日常使用PDF文件的过程中,难免会对文件有编辑需求,有时候需要编辑文字,有时候需要对文件中的图片进行删除处理.遇到这种只需要删除PDF文件里的图片的时候, ...

  4. 如何快速在PDF文件中插入图片

    在 PDF文件中插入图片我优先想到了 Adobe Acrobat DC,胜任此项工作完全 OK.但是有个问题,Acrobat 会自动识别 PDF 中的文字.如果有手写字迹经过 Acrobat 识别再保 ...

  5. PDF文件中的图片怎么导出?

    我们经常使用PDF文档.我们都知道,PDF文档在阅读方面的体验非常的好,但是想使用PDF文件内的内容却很难,由于PDF可以固定文档的页面布局,因此无法直接保存PDF文档中的内容.我们在阅读PDF文件内 ...

  6. Python脚本工具,PyMuPDF批量提取PDF文件中的图片

    如何批量快速提取出PDF中的图片文件,你是否遇到这样的一个问题,尤其是PPT文件转换为PDF文件,需要快速提取其中的图片文件,如果你恰好会那么一点py,同时复制粘贴没问题的话,那么相信你也能够很轻松的 ...

  7. 解决Zotero显示pdf文件中的图片左上角有黑色遮挡的问题

    解决Zotero显示pdf文件中的图片左上角有黑色遮挡的问题 在菜单编辑选择"首选项": 弹出如下图所示的对话框. 3. 选择"高级"-"设置编辑器& ...

  8. 使用PyPDF4和PIL修改PDF文件中的图片

    继上篇从PDF中提取图片数据之后,我们看如何使用PIL修改图片并写入到PDF文件. 先放两个相关链接: 使用PyPDF4提取pdf文件中的图片 PIL从内存中加载图片 先放代码: import PyP ...

  9. 网页导出pdf不完整_怎样将PDF文件中的图片提取出来并保存?

    日常工作或学习中经常会接触很多PDF文档,有时其中有些图片是我们需要用到的,应该如何将这些图片从PDF文件中提取出来并且保存呢? 我们可以用PDF编辑器来实现这个需求,首先用极速PDF编辑器打开我们需 ...

最新文章

  1. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?
  2. springboot中端点监管 endpoint actuator
  3. 在Finder标题栏上显示完整路径
  4. 开发人员的幸福:您需要知道的
  5. 日常(关于游泳之列的真理问题讨论)
  6. 矩阵化简计算器_论一台图形计算器,如何拯救你的SAT2数学
  7. 邮件发送异常, [Errno 110] Connection timed out
  8. 批量查询ip地址的归属地
  9. java英文翻译_Java实现英文文本单词翻译器功能的简单实例
  10. 无疆_炎戎的2011跨年总结
  11. 使用TEXT函数处理日期时间
  12. 【Redis】Redis介绍
  13. 嵌入式物联网项目实践1.1
  14. 小学教师资格考试——教育教学——学生指导、班级管理;教育教学相关的口诀...
  15. android 2k 屏幕 字体模糊,显示字体小到有些模糊?高分屏别忘了这些设置
  16. java神奇蜘蛛侠攻略_神奇蜘蛛侠攻略带领新手快速入门
  17. 微信好友信息统计-图、词云和热图
  18. 软考架构师-知识点总结
  19. 众昂矿业刘金海:我国萤石进出口现状解析
  20. 项目开发中的一些注意事项以及技巧总结

热门文章

  1. 微信小程序用户头像昵称获取规则
  2. 网站上传图片提示错误怎么办
  3. linux 如何删除log文件,linux的删除文件日志命令是什么
  4. 实测江民KV2009主动防御及自我保护
  5. Arduino UNO输出高电平点亮LED(三)
  6. 为什么很多人辛劳一生,仍然生活在社会底层?
  7. 满速下载!PanDownload重振回归
  8. 在微型计算机中机器指令,机器指令语句
  9. Ubuntu系统利用snap包管理的使用
  10. ArcGis Server安装与使用