我已经下载并安装PythonMagick为Python 2.7,64位Windows 7,从非官方的Windows二进制文件。
我试图运行此代码(Processor.py)
import PythonMagick
pdf = 'test.pdf'
p = PythonMagick.Image()
p.density('600')
p.read(pdf)
p.write('doc.jpg')
此文件夹中(d:\ Python项目\乐谱阅读器)
然而,使用的是,相对PDF路径或pdf = "D:\\Python Projects\\Sheet Music Reader"
导致此错误;
Traceback (most recent call last):
File "D:/Python Projects/Sheet Music Reader/Processor.py", line 6, in <module>
p.read(pdf)
RuntimeError: Magick: PostscriptDelegateFailed `D:\Python Projects\Sheet Music Reader\test.pdf':
No such file or directory @ error/pdf.c/ReadPDFImage/664
我只是不明白为什么找不到我的PDF格式; 它在相同的目录python脚本。
是什么造成这个错误,以及如何解决它?
(我的印象是,在Python PDF文件转换为图像是一个恶梦)
我有完全相同的问题几天前。 虽然从.gif注意转换(奥德别的东西),以.JPG的工作非常细,从.PDF转换为生产一模一样的错误.JPG。 那是因为happing ImageMagick的使用Ghostscript的读/转换PDF文件。
您可以通过安装解决问题的Ghostscript (仅限32位版本的作品)。 不要忘了添加 “C:\ Program Files文件(x86)的\ GS \ gs9.06 \ BIN” 到你Systempath下。
这里一步一步引导如何我得到PythonMagick工作:
(我使用Python 2.7.3 32位Windows 7上的64位)。
- 安装最新版本的ImageMagick (“ImageMagick的-6.8.1-1-Q16-Windows的dll.exe”在写作的时刻请注意,这是32位版本,64位优秀作品对我来说)。
别忘了勾选“安装开发头文件和库C和C ++”。 - 设置“MAGICK_HOME”环境的ImageMagick的路径(我的
C:\Program Files (x86)\ImageMagick-6.8.1-Q16
)。
另外一组这条路您全系统路径的第一个位置,如果它已不存在。 - 下载并安装的32位版本的GhostScript的 (64位将无法正常工作,即使你已经安装的ImageMagick的64位版本)。
设置C:\Program Files (x86)\gs\gs9.06\bin
到您的系统范围的路径,ImageMagick的后面。 - 检查您的设置工作。 尝试
convert some.pdf some.jpg
在命令行。 如果不工作,你做错了什么在点1-3。 - 安装PythonMagick与非官方的二进制文件,不使用easy_install或点子。
(还是那句话:我使用的是32位的Python 2.7.3解释,所以我把 “PythonMagick-0.9.7.win32-py2.7.exe” 了点。) - 启动你的Python命令生产线使用率和尝试是这样的:
from PythonMagick import Image
im = Image()
im.read(r"C:\Path\To\Some.pdf")
im.write("some.jpg")
对于具有多页的PDF附加一个例子:
import os
from pyPdf import PdfFileReader, PdfFileWriter
from tempfile import NamedTemporaryFile
from PythonMagick import Image
reader = PdfFileReader(open("some.pdf", "rb"))
for page_num in xrange(reader.getNumPages()):
writer = PdfFileWriter()
writer.addPage(reader.getPage(page_num))
temp = NamedTemporaryFile(prefix=str(page_num), suffix=".pdf", delete=False)
writer.write(temp)
temp.close()
im = Image()
im.density("300") # DPI, for better quality
im.read(temp.name)
im.write("some_%d.jpg" % (page_num))
os.remove(temp.name)
这对于它进入我的脑海这个问题唯一的解决方法。