最近要做一个PDF盖章程序,研究了一下PDF,也在网上找了不少关于PDF的工具,发现都是使用已有的iSharepText或者PDFCreater做PDF处理,于是研究了一下PDF的格式文档,其实如果只导出PDF图片还是比较简单的。

PDF文档说明中有体现了PDF是由多个PDFObject组成,再通过RootObject作为文档根节点处理页面。而图片也都是PDFObject的结构,所以只要导出所有图片类型的Object就可以了。

通过文档可以知道PDFObject都有类型标记,而图片的类型就是Image,所以只要找到所有Image类型的PDFObject就可以了。

PDF文档结尾处有个固定结构的标记,叫startxref,用来标记xref表所在的字节位置,而这个xref就是所有PDFObject的起始字节位置的表,所以只要分析出每个Object起点,再找到/Type和/Image作为标记的Object,把Object对应Stream导出就可以了。

Image对应的Stream有不同编码方式,目前已知的有/CCITTFaxDecode模式和/DCTDecode模式,分别对应了CCIT4和JPG的编码,不过对于/CCITTFaxDecode模式只有数据,需要自己给流结构增加Tiff文件头和文件结尾,再保存就可以识别为tiff,而DCTDecode是可以直接保存为jpg文件的。

xref在PDF1.4版本是使用了一个固定格式的文本来表示,第一行表示起始对象编号和对象数量,第二行开始为对象起始字节位置,对象子版本号,对象是否有效三个部分总共20个字节,用空格分开的。而到了PDF1.5xref就可以用一个PDFObject来表示,这个PDFObject可以用一个压缩流和一个编码来处理一个Stream,处理时根据PDFObject的DcodeParams 来设立解码的参数,处理结束的Stream转成字节组后根据/Index和/W来获取xref表的数据。W表示了每组xref数据的字节数,比如[1 2 0]表示第一个字段一个字节,第二个字段2个字节,第三个字段0字节,再根据第一个字段的内容来确认后面的字节如何表示数据起点,第一个字段只有3中数据,0表示未使用的PDFObject,1表示在使用的PDFObject,2表示压缩的对象编号而非对象起始位置。后面的字节根据w设置的字节数表示一个地址数字,高位在前,地位在后的字节组。

通过这些设置就可以分析出所有PDFObject,再根据Image对应的编码模式判断是否需要增加tiff文件头来保存流。如果只是为了导出Image这些就够了,至于写PDF可以以后再慢慢处理。

PDF文件中的图片导出相关推荐

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

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

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

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

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

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

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

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

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

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

  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编辑器打开我们需 ...

  10. Java去除PDF文件中的图片

    场景:调用第三方的接口取得的PDF文件流中有个不想要的图片,跟第三方接口沟通无果的情况下,自己想办法去掉吧. 解决思路:打算用PDFBox去掉PDF中的图片,但是在代码中resources.getIm ...

最新文章

  1. linux 下得到进程的启动时间
  2. 《WCF技术剖析(卷2)》目录
  3. 【嵌入式】嵌入式天地博客汇总
  4. 适合文科女孩子学的计算机类专业,文科女生最吃香的专业2021 哪些专业有前景...
  5. python 命名空间冲突_python-命名空间
  6. poj1094Sorting It All Out(拓扑排序)
  7. 找出字符串数组中的等于某字符串的所有索引位置
  8. 项目练习(二)—微博数据结构化
  9. 主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现
  10. 在vue中后台返回的文本包含标签时候解析为html代码
  11. swagger导出excel文档_excel导入导出api
  12. 算法竞赛命题指南(命题流程、Polygon的使用等)
  13. Windows 10企业批量部署实战之WDS配置
  14. JQuery实现图片自动轮播左右切换鼠标移入
  15. 聊天记录:李维、左轻侯、周爱民谈Diamondback
  16. 手把手教你逆向微信之朋友圈小视频转发(上)
  17. 2021宿迁所有高中高考成绩查询,宿迁市“赫赫有名”的4所高中,高考成绩说话,不愧是211后援团...
  18. 解决mac excel中文乱码的问题
  19. 【HTML】颜色和选择器
  20. 数据恢复陶工西数500GWD5000AAKX-08U6AA0摔敲盘不认紫色线圈磁头开盘恢复数据

热门文章

  1. 《蜗居》100句台词 血淋淋的经典
  2. f(!gotop.length) return false;
  3. java汤姆猫安装_汤姆猫跑酷安装
  4. python 002 __小斌文档 | ipython的基本使用
  5. Excel基础(14)条件格式与公式
  6. BOB靶机渗透实战-----攻略(大神勿喷)
  7. [QCTF2018]Xman-RSA
  8. 1.居民身份证号码,由17位数字本体码,和1位数字校验码组成 2.判断用户输入的身份证号码是否合法 规则为:号码为18位,不能以0开头,前17位只可以是数字,最后一位可以是数字或‘X‘
  9. 四年级语文期中测试卷
  10. 欧洲足球协会联盟使用区块链发售马德里德比超级杯门票