Python PDF转图片jpg等

 

找了两天还是绕回到原路了:

PDF单页转换:
可以用Wand(http://docs.wand-py.org/en/0.4.1/)来转:
from wand.image import Image

with Image(filename=’filename.pdf’) as pdf:
with pdf.convert(‘jpeg’) as image:
image.save(filename=’result.jpeg’)

 

PDF多页转换:

最近工作中需要把pdf文件转化为图片,想用Python来实现,于是在网上找啊找啊找啊找,找了半天,倒是找到一些代码。


1、第一个找到的代码,我试了一下好像是反了,只能实现把图片转为pdf,而不能把pdf转为图片。。。

http://zhidao.baidu.com/link?url=QUoPVmQTP9fXktULAjxLtjVx4NXju631yQNfs9nAsYe6iGfv8LwmAbWA8mjlFEkCbLb9HveeT-48QSxAWyxrsH6L25-LD6HsVjlYs2aUBeG

代码如下:

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. #!/usr/bin/env python  
  2.   
  3. import os  
  4. import sys  
  5. from reportlab.lib.pagesizes import A4, landscape  
  6. from reportlab.pdfgen import canvas  
  7. f = sys.argv[1]  
  8. filename = .join(f.split(‘/’)[-1:])[:-4]  
  9. f_jpg = filename+‘.jpg’  
  10. print f_jpg  
  11. def conpdf(f_jpg):  
  12.     f_pdf = filename+‘.pdf’  
  13.     (w, h) = landscape(A4)  
  14.     c = canvas.Canvas(f_pdf, pagesize = landscape(A4))  
  15.     c.drawImage(f, 00, w, h)  
  16.     c.save()  
  17.     print “okkkkkkkk.”  
  18.    
  19. conpdf(f_jpg)  

 

2、第二个是文章写的比较详细,可惜的是Linux下的代码,所以仍然没用。


3、第三个文章指出有一个库PythonMagick可以实现这个功能,需要下载一个库 PythonMagick-0.9.10-cp27-none-win_amd64.whl 这个是64位的。

这里不得不说自己又犯了一个错误,因为自己从python官网上下载了一个python 2.7,以为是64位的版本,实际上是32位的版本,所以导致python的版本(32位)和下载的PythonMagick的版本(64位)不一致,弄到晚上12点多,总算了发现了这个问题。。。


4、然后,接下来继续用搜索引擎搜,找到很多stackoverflow的问题帖子,发现了2个代码,不过要先下载PyPDF2以及ghostscript模块。


先通过pip来安装 PyPDF2、PythonMagick、ghostscript 模块。

 

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. C:UsersAdministrator>pip install PyPDF2  
  2. Collecting PyPDF2  
  3.   Using cached PyPDF2-1.25.1.tar.gz  
  4. Installing collected packages: PyPDF2  
  5.   Running setup.py install for PyPDF2  
  6. Successfully installed PyPDF2-1.25.1  
  7. You are using pip version 7.1.2, however version 8.1.2 is available.  
  8. You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.  
  9.   
  10.   
  11. C:UsersAdministrator>pip install C:PythonMagick-0.9.10-cp27-none-win_amd64.whl  
  12. Processing c:pythonmagick-0.9.10-cp27-none-win_amd64.whl  
  13. Installing collected packages: PythonMagick  
  14. Successfully installed PythonMagick-0.9.10  
  15. You are using pip version 7.1.2, however version 8.1.2 is available.  
  16. You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.  
  17.   
  18.   
  19. C:UsersAdministrator>pip install ghostscript  
  20. Collecting ghostscript  
  21.   Downloading ghostscript-0.4.1.tar.bz2  
  22. Requirement already satisfied (use –upgrade to upgrade): setuptools in c:python27libsite-packages (from ghostscript)  
  23. Installing collected packages: ghostscript  
  24.   Running setup.py install for ghostscript  
  25. Successfully installed ghostscript-0.4.1  
  26. You are using pip version 7.1.2, however version 8.1.2 is available.  
  27. You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.  

 

下面是代码

代码1:

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. import os  
  2. import ghostscript  
  3. from PyPDF2 import PdfFileReader, PdfFileWriter  
  4. from tempfile import NamedTemporaryFile  
  5. from PythonMagick import Image  
  6.   
  7.   
  8. reader = PdfFileReader(open(“C:/deep.pdf”“rb”))  
  9. for page_num in xrange(reader.getNumPages()):  
  10.     writer = PdfFileWriter()  
  11.     writer.addPage(reader.getPage(page_num))  
  12.     temp = NamedTemporaryFile(prefix=str(page_num), suffix=“.pdf”, delete=False)  
  13.   
  14.     writer.write(temp)  
  15.   
  16.     print temp.name  
  17.   
  18.     tempname = temp.name  
  19.     temp.close()  
  20.       
  21.   
  22.     im = Image(tempname)  
  23.     #im.density(“3000”) # DPI, for better quality  
  24.     #im.read(tempname)  
  25.     im.write(“some_%d.png” % (page_num))  
  26.       
  27.     os.remove(tempname)  

代码2:

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. import sys  
  2. import PyPDF2  
  3. import PythonMagick  
  4. import ghostscript  
  5.   
  6. pdffilename = “C:deep.pdf”   
  7. pdf_im = PyPDF2.PdfFileReader(file(pdffilename, “rb”))  
  8.   
  9. print ‘1’  
  10.   
  11. npage = pdf_im.getNumPages()  
  12. print(‘Converting %d pages.’ % npage)  
  13. for p in range(npage):  
  14.     im = PythonMagick.Image()  
  15.     im.density(‘300’)  
  16.     im.read(pdffilename + ‘[‘ + str(p) +‘]’)  
  17.     im.write(‘file_out-‘ + str(p)+ ‘.png’)  
  18.     #print pdffilename + ‘[‘ + str(p) +’]’,’file_out-‘ + str(p)+ ‘.png’  

 

然后执行时都报错了,这个是 代码2 的报错信息:

 

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. Traceback (most recent call last):  
  2.   File “C:c.py”, line 15, in   
  3.     im.read(pdffilename + ‘[‘ + str(p) +’]’)  
  4. RuntimeError: pythonw.exe: PostscriptDelegateFailed `C:DEEP.pdf’: No such file or directory @ error/pdf.c/ReadPDFImage/713  

总是在上面的     im.read(pdffilename + ‘[‘ + str(p) +’]’) 这一行报错。

 

于是,根据报错的信息在网上查,但是没查到什么有用的信息,但是感觉应该和GhostScript有关,于是在网上去查安装包,找到一个在github上的下载连接,但是点进去的时候显示无法下载可怜

最后,在csdn的下载中找到了 这个文件:GhostScript_Windows_9.15_win32_win64,安装了64位版本,之后,再次运行上面的代码,都能用了得意


不过代码2需要做如下修改,不然还是会报 No such file or directory @ error/pdf.c/ReadPDFImage/713 错误:

 

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. #代码2  
  2. import sys  
  3. import PyPDF2  
  4. import PythonMagick  
  5. import ghostscript  
  6.   
  7. pdffilename = “C:deep.pdf”   
  8. pdf_im = PyPDF2.PdfFileReader(file(pdffilename, “rb”))  
  9.   
  10. print ‘1’  
  11.   
  12. npage = pdf_im.getNumPages()  
  13. print(‘Converting %d pages.’ % npage)  
  14. for p in range(npage):  
  15.     im = PythonMagick.Image(pdffilename + ‘[‘ + str(p) +‘]’)  
  16.     im.density(‘300’)  
  17.     #im.read(pdffilename + ‘[‘ + str(p) +’]’)  
  18.     im.write(‘file_out-‘ + str(p)+ ‘.png’)  
  19.   
  20.     #print pdffilename + ‘[‘ + str(p) +’]’,’file_out-‘ + str(p)+ ‘.png’  

 

这次有个很深刻的体会,就是解决这个问题过程中,大部分时间都是用在查资料、验证资格资料是否有用上了,搜索资料的能力很重要。

而在实际搜索资料的过程中,国内关于PythonMagick的文章太少了,搜索出来的大部分有帮助的文章都是国外的,但是这些国外的帖子文章,也没有解决我的问题或者是给出有用的线索,最后还是通过自己的思考,解决了问题。

 

http://blog.csdn.net/sqlserverdiscovery/article/details/51425543

 

2016-11-17经测试,在安装GhostScript_Windows_9.18_win32_win64之后可以顺利运行,那么终于搞定了PDF和JPG之间的转换,收工!

###############测试直接把JPG保存为PDF
# Image.save(newfilename,outfile, "PDF", resoultion = 100.0)
###############测试直接把pDF保存为JPG



# 代码2
import PyPDF2
import PythonMagick


pdf_file_name = 'zhishi0/zhishi.pdf'
pdf_im = PyPDF2.PdfFileReader(open(pdf_file_name, "rb"))
n_page = pdf_im.getNumPages()
print('Converting %d pages.' % n_page)
for p in range(n_page):
im = PythonMagick.Image(pdf_file_name + '[' + str(p) + ']')
im.density('300')
# im.read(pdffilename + '[' + str(p) +']')
im.write('zhishi/file_out-' + str(p) + '.png')
# print pdffilename + '[' + str(p) +']','file_out-' + str(p)+ '.png'

 

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

11 Comments