2012-12-21 2 views
5

Я загруженные и установленные PythonMagick для Python 2.7, 64 бит для Windows 7, из Unofficial Windows Binaries.PythonMagick не может найти мои файлы PDF

Я пытаюсь запустить этот код (Processor.py)

import PythonMagick 

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

в этой папке (D: \ Python Проекты \ Нотное чтение) 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 - ночная кобыла)

+0

Каков результат 'os.path.exists (« D: \\ Проекты Python \\ Reader Reader \\ test.pdf "??' 'P.read (pdf)' ожидать имя файла или файл? –

+0

'os.path.exists()' возвращает True и передает объект файла, поскольку pdf вызывает ошибку: 'ArgumentError: типы аргументов Python в Image.read (Изображение, файл) не соответствует сигнатуре C++:' –

ответ

17

У меня была такая же проблема пару дней назад. В то время как преобразование из .gif (иначе что-то еще) в .jpg работало очень хорошо, преобразование из .pdf в .jpg производило точно такую ​​же ошибку. Thats happing, потому что ImageMagick использует Ghostscript для чтения/преобразования PDF-файлов.

Вы можете решить проблему, установив Ghostscript (работает только 32-разрядная версия). Не забудьте добавить к вашему системному пути «C: \ Program Files (x86) \ gs \ gs9.06 \ bin».

Здесь шаг за шагом-гидом, как я получаю PythonMagick работы:
(. Я использую Python 2.7.3 32-бит на Windows 7 64-бит)

  1. Установите последнюю версию ImageMagick («ImageMagick-6.8.1-1-Q16-windows-dll.exe» на момент написания. Обратите внимание, что это 32-разрядная версия, 64-разрядная версия для меня тоже прекрасна).
    НЕ ЗАБУДЬТЕ Забудьте об опцию «Установите заголовки и библиотеки разработки для C и C++».
  2. Set "MAGICK_HOME" Окружающая среда к пути ImageMagick (для меня C:\Program Files (x86)\ImageMagick-6.8.1-Q16).
    Дополнительно установите этот путь к общему пути по всей стране, если его еще нет.
  3. Загрузите и установите 32-разрядную версию GhostScript (64 бит не будет работать, даже если вы установили 64-разрядную версию ImageMagick).
    Установите C:\Program Files (x86)\gs\gs9.06\bin на ваш системный путь, сразу после ImageMagick.
  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. Start вы 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) 

Это единственный обходной путь для этой проблемы, который приходит мне в голову.

+0

@ Anti Earth: вы пытались использовать [wand] (http://pypi.python.org/pypi/Wand)? У него гораздо больше pythonic-интерфейса, чем у PythonMagick. – floqqi

+0

Я по-прежнему получаю ту же ошибку после установки Ghostscript и добавив эту строку в свой Путь. Я слабо вспоминаю проблемы с pyPdf и помню, что был задействован «python 2.5» (я также слышал плохие вещи о том, как заставить палочку работать) Возможно, использование 64-битного питона - это еще один гаечный ключ в работе. Имеет ли Java какие-либо ноу-функциональные API-интерфейсы pdf? –

+0

Добавлен пошаговый справочник. – floqqi