合并多个PDF文档的解决:附生成天善用户的博客内容合集的Python示例

浏览: 5288

上一篇《天善博客内容如何转成PDF文档》介绍了如何从html生成pdf的原理,

不过wkhtmltopdf有限制,文档多了,需要生成多个pdf文件,原来使用http://www.pdfmerge.com/在线服务合并文档。

感觉不完美,合并更多文件就比较麻烦了,找了一些工具最终解决了,生成的pdf见<天善用户的博客内容合集PDF>。

当然程序还有些欠缺:

1.uft8的文件名在linux能使用,到windows下就软乱码了。

2.wkhtmltopdf读取html遇到503错误,需要再次检查和重新读取。

测试了PyPDF2、pdftk、ghostscript,都能合并,不过PyPDF2、pdftk对wkhtmltopdf生成的文档的outline合并有问题,特别是PyPDF2需要修改代码,才能完成合并。

最后还是用了ghostscript,才完成。

相关工具版本要求:

ghostscript:9.19

wkhtmltopdf:0.12.3 (with patched qt)

ghostscript的安装使用:

下载:

http://ghostscript.com/download/gsdnld.html

帮助文档:

http://www.ghostscript.com/doc/9.19/Use.htm

命令示例:

gs-919-linux_x86_64 -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=./output/all_coffee.pdf coffee1_20.pdf coffee21_40.pdf
linux_x86_64 -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=all_seng.pdf seng*.pdf

PyPDF2的安装使用:

PyPDF2版本:1.25.1

https://pypi.python.org/pypi/PyPDF2/1.25.1

https://github.com/mstamy2/PyPDF2

安装:

pip install PyPDF2

使用示例:

from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
input1 = open("hql_1_20.pdf", "rb")
input2 = open("hql_21_40.pdf", "rb")
merger.append(input1)
merger.append(input2)
# Write to an output PDF document
output = open("hql_all.pdf", "wb")
merger.write(output)

--------------------

注意合并wkhtmltopdf系统会出错:

PdfReadError: Unexpected destination '/__WKANCHOR_2'

#fix PyPDF2 merge outline出问题的解决

#参考https://github.com/mstamy2/PyPDF2/issues/193

pdf.py 1225-1226按如下屏蔽即可
# if destination found, then create outline
if dest:
    if isinstance(dest, ArrayObject):
        outline = self._buildDestination(title, dest)
    elif isinstance(dest, Str) and dest in self._namedDests:
        outline = self._namedDests[dest]
        outline[NameObject("/Title")] = title
    #### else:
    ####     raise utils.PdfReadError("Unexpected destination %r" % dest)
return outline

pdftk的安装使用:

安装:

sudo yum install libgcj
sudo rpm -i pdftk-2.02-1.*.rpm

使用:

pdftk a1*.pdf cat output combined.pdf  

outline的手工修复:

pdftk支持outline的编辑,可以参考这个,

http://stackoverflow.com/questions/2969479/merge-pdfs-with-pdftk-with-bookmarks

pdftk hql_1_20.pdf dump_data > in1.info

#手工修改in1.info文件

pdftk hql_1_20.pdf update_info in1.info output out.pdf.
推荐 6
本文由 seng 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

5 个评论

求也分享点R语言的学习资料
R语言我没学过.....
这个非常有用,谢谢分享
有用就好^-^
厉害

要回复文章请先登录注册