2012-12-21 1 views
5

ho scaricato e installato PythonMagick per Python 2.7, 64 bit di Windows 7, dal Unofficial Windows Binaries.PythonMagick non riesce a trovare i miei file pdf

Sto cercando di eseguire questo codice (Processor.py)

import PythonMagick 

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

all'interno di questa cartella (D: \ Python Projects \ Sheet Music Reader) D:\Python Projects\Sheet Music Reader

Tuttavia, utilizzando tale percorso relativo pdf o pdf = "D:\\Python Projects\\Sheet Music Reader" risultati in questo errore;

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 

Semplicemente non capisco perché non riesca a trovare il mio pdf; è nella stessa directory dello script python.

Che cosa sta causando questo errore e come lo risolvo?
(Ho l'impressione che convertire pdf in immagini in python sia una cavalla notturna)

+0

Qual è il risultato di 'os.path.exists (" D: \\ Progetti Python \ Lettore di spartiti \\ test.pdf "'? 'P.read (pdf)' si aspetta un nome file o un oggetto file? –

+0

'os.path.exists()' restituisce True e passa un oggetto file come pdf solleva l'errore; 'ArgumentError: tipi di argomenti Python in Image.read (Immagine, file) non corrisponde alla firma C++:' –

risposta

17

Ho avuto esattamente lo stesso problema un paio di giorni fa. Mentre la conversione da .gif (o qualcos'altro) a .jpg ha funzionato davvero bene, la conversione da .pdf a .jpg ha prodotto esattamente lo stesso errore. Questo è un problema, perché ImageMagick utilizza Ghostscript per la lettura/conversione di PDF.

È possibile risolvere il problema installando Ghostscript (funziona solo la versione a 32 bit). Non dimenticare di aggiungere "C: \ Programmi (x86) \ gs \ gs9.06 \ bin" al tuo percorso di sistema.

Qui un'opera PythonMagick step-by-step-guida su come mi è stato sempre:
(. Sto usando Python 2.7.3 a 32 bit su Windows 7 64-bit)

  1. Installare la versione più recente di ImageMagick ("ImageMagick-6.8.1-1-Q16-windows-dll.exe" al momento della scrittura. Si noti che questa è la versione a 32 bit, 64 bit funziona anche per me).
    NON dimentica di selezionare l'opzione "Installa intestazioni di sviluppo e librerie per C e C++".
  2. Impostare "MAGICK_HOME" ambiente sul percorso di ImageMagick (per me C:\Program Files (x86)\ImageMagick-6.8.1-Q16).
    Ulteriori impostare questo percorso sul percorso a livello di sistema nella prima posizione, se non è già lì.
  3. Scaricare e installare la versione a 32 bit di GhostScript (64 bit non funzionerà, anche se è stata installata la versione a 64 bit di ImageMagick).
    Impostare C:\Program Files (x86)\gs\gs9.06\bin sul percorso a livello di sistema, subito dopo ImageMagick.
  4. Controlla se la tua installazione funziona. Prova convert some.pdf some.jpg nella riga di comando. Se non funziona hai sbagliato qualcosa al punto 1-3.
  5. Installare PythonMagick con il binario non ufficiale, non con easy_install o pip.
    (Anche in questo caso: sto usando l'interprete Python 2.7.3 a 32 bit, quindi ho preso "PythonMagick-0.9.7.win32-py2.7.exe" per quello.)
  6. riga di comando di avvio si Python util e provare qualcosa di simile:
from PythonMagick import Image 
im = Image() 
im.read(r"C:\Path\To\Some.pdf") 
im.write("some.jpg") 



supplementare un esempio per un PDF con più pagine:

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) 

Questo è l'unico soluzione per quel problema che mi viene in mente.

+0

@ Anti Terra: hai provato a usare [bacchetta] (http://pypi.python.org/pypi/Wand)? Ha un'interfaccia molto più pitonica di PythonMagick. – floqqi

+0

Sto ancora ricevendo lo stesso errore, dopo aver installato Ghostscript e aggiungendo quella stringa al mio percorso. Ricordo vagamente di avere problemi con pyPdf e ricordo che "python 2.5" era coinvolto. (Ho anche sentito cose brutte su come far funzionare la bacchetta) Forse usando python a 64 bit è un altro spanner in lavorazione. Java ha delle API pdf conosciute e funzionanti? –

+0

Aggiunta una guida passo-passo. – floqqi