2015-01-28 9 views
8

Python'da bu iletinin altındaki kodla birlikte bir pdf'deki metni okumak için pdfminer kullanıyorum. Ben buna (veya "okuma korumalı") sabitlenir çıkıyor Acrobat Pro ile bu pdf açtığınızdaPython'da "güvenli" (okuma korumalı) PDF nasıl açılır?

File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfpage.py", line 124, in get_pages 
    raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp) 
PDFTextExtractionNotAllowed: Text extraction is not allowed: <cStringIO.StringO object at 0x7f79137a1 
ab0> 

: Şimdi belirten bir hata mesajı alıyorum. Ancak this link, ben örneğin pdfunlock.com. pdfminer kaynağı haline dalış, ben hata yukarıdaki these lines oluşturulur görüyoruz.

if check_extractable and not doc.is_extractable: 
    raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp) 
için (kolayca bu salt korumasını devre dışı bırakabilirsiniz hizmetlerin çok sayıda var olduğunu okumak

Bu okuma korumasını bir saniye içinde devre dışı bırakabilecek çok sayıda hizmet olduğu için, bunun gerçekten çok kolay olduğunu varsayıyorum. .is_extractable, doc'un basit bir özelliği gibi görünüyor, ancak sanırım bu kadar basit değil .is_extractable değerini doğru olarak değiştirin.

Okuma proksisini nasıl devre dışı bırakabileceğimi bilen var mı? Python kullanarak bir pdf üzerinde tection? Tüm ipuçları bekliyoruz!

================================= ==

Aşağıda, okunmakta olan korumalı metinleri ayıkladığım kodu bulacaksınız.

def getTextFromPDF(rawFile): 
    resourceManager = PDFResourceManager(caching=True) 
    outfp = StringIO() 
    device = TextConverter(resourceManager, outfp, codec='utf-8', laparams=LAParams(), imagewriter=None) 
    interpreter = PDFPageInterpreter(resourceManager, device) 

    fileData = StringIO() 
    fileData.write(rawFile) 
    for page in PDFPage.get_pages(fileData, set(), maxpages=0, caching=True, check_extractable=True): 
     interpreter.process_page(page) 
    fileData.close() 
    device.close() 

    result = outfp.getvalue() 

    outfp.close() 
    return result 
+0

.is_extractable öğesini True olarak değiştirmeyi denediniz mi? Aslında işe yarayacak makul bir şans var. – user3757614

cevap

9

olarak bildiğim kadarıyla, çoğu durumda PDF dolu içeriği aslında şifreleme anahtarı olarak şifre kullanarak, şifrelenir ve böylece sadece True için .is_extractable yardımcı olmak için gitmiyor ayarı. Bu konuya Başına

:

Does a library exist to remove passwords from PDFs programmatically?

ben bir komut satırı aracı ile salt koruma kaldırma öneriyoruz gibi qpdf (bunu yoksa kolayca kurulabilir, Ubuntu üzerinde örneğin apt-get install qpdf kullanmak zaten):

qpdf --password=PASSWORD --decrypt SECURED.pdf UNSECURED.pdf 

Sonra pdfminer ile kilidi dosyasını açmak ve eşyalarını yapmak. saf-Python çözüm için

, sen PyPDF2 ve .decrypt() yöntemi kullanarak deneyebilirsiniz, ama sadece qpdf kullanarak bunu gerçekten, daha iyiyiz, şifreleme her türlü çalışmaz - bkz:

https://github.com/mstamy2/PyPDF2/issues/53

1

benim durumumda orada şifre yok, ama sadece check_extractable=False ayarı (diğer izleyiciler ince açılmış) sorunlu bir dosya için PDFTextExtractionNotAllowed istisna susturdum.

+0

Dosya şifreli değilken veya parola korumalıyken hata atıldığında en iyi yanıt. – Doug713705

İlgili konular