10

非公式のWindowsバイナリからPython2.7、64ビットWindows7用の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) 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スクリプトと同じディレクトリにあります。

このエラーの原因とその修正方法を教えてください。
(私は、PythonでPDFを画像に変換することは悪夢だという印象を持っています)

4

1 に答える 1

27

私は数日前にまったく同じ問題を抱えていました。.gif(他の何か)から.jpgへの変換は非常にうまく機能しましたが、.pdfから.jpgへの変換でもまったく同じエラーが発生しました。ImageMagickがPDFの読み取り/変換にGhostscriptを使用しているので、それは幸せです。

Ghostscriptをインストールすることで問題を解決できます(32ビットバージョンのみが機能します)。システムパスに「C:\ ProgramFiles(x86)\ gs \ gs9.06\bin」を追加することを忘れないでください。

ここでは、PythonMagickをどのように機能させるかについてのステップバイステップガイドを示します
(Windows 764ビットでPython2.7.332ビットを使用しています)。

  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ビットバージョンのImageMagickをインストールした場合でも、64ビットは機能しません)。ImageMagickの直後に、システム全体のパスに
    設定します。C:\Program Files (x86)\gs\gs9.06\bin
  4. セットアップが機能するかどうかを確認します。convert some.pdf some.jpgコマンドラインで試してください。それが機能しない場合は、ポイント1〜3で何か問題があります。
  5. easy_installやpipではなく、非公式のバイナリを使用してPythonMagickをインストールします。
    (繰り返しますが、私は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)

それが私の頭に浮かぶその問題の唯一の回避策です。

于 2012-12-21T08:39:24.677 に答える