PythonMagick无法找到我的pdf文件

问题描述 投票:10回答:1

我从Unofficial Windows Binaries.下载并安装了python 2.7,64位Windows 7的PythonMagick

我正在尝试运行此代码(Processor.py)

import PythonMagick

pdf = 'test.pdf'
p = PythonMagick.Image()    
p.density('600')
p.read(pdf)
p.write('doc.jpg')

在此文件夹中(D:\ Python Projects \ Sheet Music Reader)

但是,使用相对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脚本位于同一目录中。

导致此错误的原因是什么,我该如何解决? (我的印象是将pdf转换成python中的图像是一个夜晚的母马)

python windows pdf runtime-error pythonmagick
1个回答
26
投票

几天前我遇到了完全相同的问题。虽然从.gif(或其他东西)转换为.jpg工作得非常好,但从.pdf转换为.jpg会产生完全相同的错误。多数民众赞成因为ImageMagick使用Ghostscript来阅读/转换PDF。

您可以通过安装Ghostscript(只有32位版本)来解决问题。不要忘记将“C:\ Program Files(x86)\ gs \ gs9.06 \ bin”添加到您的系统中。

这是一个循序渐进的指导我如何使PythonMagick工作: (我在Windows 7 64位上使用32位的Python 2.7.3。)

  1. 在编写本文时安装最新版本的ImageMagick(“ImageMagick-6.8.1-1-Q16-windows-dll.exe”。请注意,这是32位版本; 64位也适用于我)。 不要忘记选中“为C和C ++安装开发标题和库”选项。
  2. 将“MAGICK_HOME”环境设置为ImageMagick的路径(对我而言C:\Program Files (x86)\ImageMagick-6.8.1-Q16)。 如果尚未存在,则在第一个位置设置此系统路径的路径。
  3. 下载并安装32位版本的GhostScript(64位将无法工作,即使您已安装64位版本的ImageMagick)。 在ImageMagick之后立即将C:\Program Files (x86)\gs\gs9.06\bin设置为系统范围的路径。
  4. 检查您的设置是否有效。在命令行中尝试convert some.pdf some.jpg。如果它不起作用,你在第1-3点做错了。
  5. 使用非官方二进制文件安装PythonMagick,而不是使用easy_install或pip。 (再说一遍:我使用的是32位Python 2.7.3解释器,所以我拿了“PythonMagick-0.9.7.win32-py2.7.exe”。)
  6. 启动Python命令行util并尝试这样的事情:
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)

这是我脑海中唯一解决这个问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.