2012-12-21 39 views
5

Tôi đã tải về và cài đặt PythonMagick cho python 2.7, 64 bit Windows 7, từ Unofficial Windows Binaries.PythonMagick không thể tìm thấy file pdf của tôi

Tôi cố gắng để chạy mã này (Processor.py)

import PythonMagick 

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

trong thư mục này (D: \ Python Projects \ Tờ nhạc đọc) D:\Python Projects\Sheet Music Reader

Tuy nhiên, sử dụng con đường pdf tương đối hoặc pdf = "D:\\Python Projects\\Sheet Music Reader" kết quả do lỗi này;

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 

Tôi chỉ đơn giản là không hiểu tại sao nó không thể tìm thấy pdf của tôi; nó nằm trong cùng thư mục với tập lệnh python.

Điều gì gây ra lỗi này và cách khắc phục?
(Tôi đã ấn tượng rằng việc chuyển đổi tệp pdf sang hình ảnh trong python là một con ngựa đêm)

+0

Kết quả của 'os.path.exists (" D: \\ Python Projects \\ Sheet Music Reader \\ test.pdf "'? Liệu 'p.read (pdf)' có mong đợi tên tệp hoặc đối tượng tệp không? –

+0

'os.path.exists()' trả về True, và truyền một đối tượng tệp như pdf làm tăng lỗi; 'ArgumentError: kiểu đối số Python trong Image.read (Hình ảnh, tệp) không khớp với chữ ký C++:' –

Trả lời

17

Tôi đã gặp vấn đề tương tự vài ngày trước. Trong khi chuyển đổi từ .gif (oder cái gì khác) để .jpg làm việc thực sự tốt, chuyển đổi từ. Pdf để .jpg sản xuất chính xác cùng một lỗi. Thats vui vì ImageMagick sử dụng Ghostscript để đọc/chuyển đổi PDF.

Bạn có thể giải quyết sự cố bằng cách cài đặt Ghostscript (chỉ phiên bản 32 bit hoạt động). Đừng quên thêm "C: \ Program Files (x86) \ gs \ gs9.06 \ bin" vào đường dẫn hệ thống của bạn.

Dưới đây là một công việc PythonMagick bước-by-step-hướng dẫn làm thế nào tôi đã nhận được:
(. Tôi đang sử dụng Python 2.7.3 32-bit trên Windows 7 64-bit)

  1. Cài đặt phiên bản mới nhất của ImageMagick ("ImageMagick-6.8.1-1-Q16-windows-dll.exe" tại thời điểm viết. Lưu ý rằng đây là phiên bản 32 bit; 64 bit cũng hoạt động tốt cho tôi).
    KHÔNG quên kiểm tra tùy chọn "Cài đặt tiêu đề phát triển và thư viện cho C và C++".
  2. Đặt "MAGICK_HOME" môi trường vào đường dẫn của ImageMagick (đối với tôi C:\Program Files (x86)\ImageMagick-6.8.1-Q16).
    Thêm đường dẫn này vào đường dẫn toàn hệ thống của bạn ở vị trí đầu tiên nếu nó chưa có ở đó.
  3. Tải xuống và cài đặt phiên bản 32 bit GhostScript (64 bit sẽ không hoạt động, ngay cả khi bạn đã cài đặt phiên bản ImageMagick 64 bit).
    Đặt C:\Program Files (x86)\gs\gs9.06\bin vào đường dẫn toàn hệ thống của bạn, ngay sau ImageMagick.
  4. Kiểm tra xem thiết lập của bạn có hoạt động không. Hãy thử convert some.pdf some.jpg trong dòng lệnh. Nếu nó không hoạt động bạn đã làm điều gì đó sai tại điểm 1-3.
  5. Cài đặt PythonMagick với nhị phân không chính thức, không phải với easy_install hoặc pip.
    (Một lần nữa: Tôi đang sử dụng trình thông dịch Python 2.7.3 32 bit, vì vậy tôi đã lấy "PythonMagick-0.9.7.win32-py2.7.‌exe" cho điều đó.)
  6. Bắt đầu bạn Python dòng lệnh util và thử một cái gì đó như thế này:
from PythonMagick import Image 
im = Image() 
im.read(r"C:\Path\To\Some.pdf") 
im.write("some.jpg") 



bổ sung một ví dụ cho một PDF với nhiều trang:

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) 

Đó là chỉ workaround cho rằng vấn đề mà đi vào tâm trí của tôi.

+0

@ Anti Earth: Bạn đã thử sử dụng [cây đũa phép] (http://pypi.python.org/pypi/Wand)? Nó có giao diện nhiều hơn pythonic so với PythonMagick – floqqi

+0

Tôi vẫn nhận được lỗi tương tự, sau khi cài đặt Ghostscript và thêm chuỗi đó vào con đường của tôi Tôi nhớ lại có vấn đề với pyPdf và nhớ 'python 2.5' đã được tham gia. (Tôi cũng nghe những điều xấu xấu về việc đưa cây đũa phép đến nơi làm việc) Có lẽ sử dụng python 64 bit là một cờ lê khác trong các công trình. Java có bất kỳ API pdf biết và chức năng nào không? –

+0

Đã thêm hướng dẫn từng bước. – floqqi

Các vấn đề liên quan