除去pdf文件内部的超链接/a标签
2015-12-16 20:14
483 查看
pdf格式是一个比较固定的,正常状态下是不能编辑的格式,主要用来传递信息和展示,但项目中或迟或早的肯定会遇到需要修改pdf内容的需求,目前遇到的就有:pdf2html, pdf2png, pdf内部去链接, pdf加水印, 修改删除pdf文档内容(去水印)……
目前, 所有需求都已经实现, 具体如下:
pdf2png: 用imagemagick可以实现, 不赘述;
pdf2html: 使用html2pdfEX, /article/10297022.html
pdf加水印: 使用java的itext模块, /article/10297036.html
pdf内容修改(有内容遮罩, 定点删除, 内容匹配删除)的批量自动化, 已有代码, 合适的时候在放出来
本节讲pdf内部去链接
其实用到的是比较偏门的方法: pdf的merge功能会导致pdf里面所有的链接失效
1. 使用语言的模块(如java的itext, python的pyPDF, reportlab):
其中mergePage可以去链接, 操作cropBox可以调节pdf的展示区域, 实现假修改
使用pdftk的background/stamp功能
直接在command line运行(需要将下面的string用python的语法解析):
merge时会去链接的原因分析: 说到底是pdf这种格式导致的, 其文本和链接存在不同的地方, merge时只merge了文本(再多的楼主也不太清楚)
目前, 所有需求都已经实现, 具体如下:
pdf2png: 用imagemagick可以实现, 不赘述;
pdf2html: 使用html2pdfEX, /article/10297022.html
pdf加水印: 使用java的itext模块, /article/10297036.html
pdf内容修改(有内容遮罩, 定点删除, 内容匹配删除)的批量自动化, 已有代码, 合适的时候在放出来
本节讲pdf内部去链接
其实用到的是比较偏门的方法: pdf的merge功能会导致pdf里面所有的链接失效
1. 使用语言的模块(如java的itext, python的pyPDF, reportlab):
existing_pdf = PdfFileReader(file(input_pdf, "rb")) isEncrypted = existing_pdf.isEncrypted if isEncrypted: existing_pdf.decrypt('') page_nums = existing_pdf.getNumPages() output = PdfFileWriter() pdf_size = getPdfsize(input_pdf, 0, 0) packet = StringIO.StringIO() doc = LetterMaker(packet, "The MVP", 10,pdf_size) doc.createDocument() doc.savePDF() packet.seek(0) new_pdf = PdfFileReader(packet) page_blank = new_pdf.getPage(0) merger_error = False for page_index in range(page_nums)[:]: # output.addPage(page_blank) print "Page: ",page_index + 1 page = copy.deepcopy(page_blank) page2 = copy.deepcopy(page_blank) try: exist_page = existing_pdf.getPage(page_index) # exist_page.trimBox.lowerLeft = (25, 25) # exist_page.trimBox.upperRight = (225, 225) # exist_page.cropBox.lowerLeft = (0, 0) # exist_page.cropBox.upperRight = pdf_size print exist_page.artBox print exist_page.bleedBox print exist_page.cropBox print exist_page.cropBox.lowerLeft print type(exist_page.cropBox.lowerLeft) print type(exist_page.cropBox.lowerLeft[0]) print type(exist_page.cropBox.lowerLeft[1]) print exist_page.cropBox.upperRight print exist_page.mediaBox print exist_page.trimBox # page.mergePage(exist_page.rotateClockwise(180)) # page2.mergePage(page.rotateClockwise(180)) except Exception, e: merger_error = True for page_index in range(page_nums)[:]: output.addPage(page) break output.addPage(exist_page)
其中mergePage可以去链接, 操作cropBox可以调节pdf的展示区域, 实现假修改
使用pdftk的background/stamp功能
直接在command line运行(需要将下面的string用python的语法解析):
"pdftk '%s' input_pw '' multibackground '%s' output '%s'" % (blank_pdf, input_pdf, output_pdf)
merge时会去链接的原因分析: 说到底是pdf这种格式导致的, 其文本和链接存在不同的地方, merge时只merge了文本(再多的楼主也不太清楚)
相关文章推荐
- viewController的生命周期
- 设置查看java的源程序
- 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】
- Stucts应用引起的OutOfMemoryError
- 文件查找命令―find
- 消息的本质
- 12c中保持 启动CDB后PDB的状态
- 线性回归
- 谁最美妙的公司福利?男员工也有“大妈假”
- Visual Studio 2015 安装笔记
- python(1)
- picker 的简单设置
- 命名规范。
- Objective-C简单教程(入门)-从官方文档中挑选
- 【SAP BO】制作SAP BO Dashboards入门教程(一)
- 欢迎使用CSDN-markdown编辑器
- 数据持久化初级沙盒
- spark on yarn-kill正在跑进程
- 修改了chrome的官方的有道词典插件,添加了生词本的功能
- 算法训练 出现次数最多的整数