PythonMagick не может найти мои pdf файлы

Я скачал и установил 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 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.

В чем причина этой ошибки и как ее исправить?
(У меня сложилось впечатление, что преобразование PDF в изображения на Python - это ночная кобыла)

1 ответ

Решение

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

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

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

  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).
    Задавать 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. Запустите утилиту командной строки 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)

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

Другие вопросы по тегам