저는 기본 프로그래밍 과정을 거의 밟지 않은 순수한 수학을 최근에 졸업했습니다. 인턴십을하고 있으며 내부 데이터 분석 프로젝트가 있습니다. 지난 몇 년 동안 내부 PDF를 분석해야합니다. PDF는 "보안"됩니다. 즉, 암호화됩니다. 우리는 PDF 암호를 가지고 있지 않으며, 더 많은 암호가 있는지 확실하지 않습니다. 그러나 우리는 이러한 모든 문서를 가지고 있으며 수동으로 읽을 수 있습니다. 인쇄 할 수도 있습니다. 우리가 생각하는 언어이기 때문에 파이썬으로 읽는 것이 목표입니다.
먼저, 일부 파이썬 라이브러리로 PDF를 읽으려고했습니다. 그러나 내가 찾은 Python 라이브러리는 암호화 된 PDF를 읽지 않습니다. 당시에는 Adobe Reader를 사용하여 정보를 내보낼 수 없었습니다.
둘째, PDF를 해독하기로 결정했습니다. 파이썬 라이브러리 pykepdf를 성공적으로 사용했습니다. Pykepdf 는 매우 잘 작동합니다! 그러나 이전 시점의 Python 라이브러리 ( PyPDF2 및 Tabula )를 사용 하여 해독 된 PDF를 읽을 수 없습니다 . 현재 Adobe Reader를 사용하면 해독 된 PDF에서 정보를 내보낼 수 있지만 파이썬으로 모든 것을 수행하는 것이 목표이기 때문에 약간의 개선이 이루어졌습니다.
내가 보여주는 코드는 암호화되지 않은 PDF에서는 완벽하게 작동하지만 암호화 된 PDF에서는 완벽하게 작동하지 않습니다. pykepdf로 얻은 해독 된 PDF에서는 작동하지 않습니다.
코드를 작성하지 않았습니다. 파이썬 라이브러리 Pykepdf 및 Tabula 의 문서에서 찾았습니다 . PyPDF2 솔루션은 Al Sweigart 가 자신의 저서 " Python으로 지루한 물건 자동화 "에서 작성했습니다 . 또한 앞에서 설명한 제한 사항으로 코드가 제대로 작동하는지 확인했습니다.
첫 번째 질문, 프로그램이 암호화되지 않은 파일로 프로그램이 작동하는 경우 해독 된 파일을 읽을 수없는 이유는 무엇입니까?
두 번째 질문입니다. 어떻게하면 해독 된 파일을 파이썬으로 읽을 수 있습니까? 어느 도서관이 할 수 있습니까 아니면 불가능합니까? 해독 된 모든 PDF를 추출 할 수 있습니까?
시간과 도움에 감사드립니다 !!!
Python 3.7, Windows 10, Jupiter Notebooks 및 Anaconda 2019.07을 사용하여 이러한 결과를 찾았습니다.
Python
import pikepdf
with pikepdf.open("encrypted.pdf") as pdf:
num_pages = len(pdf.pages)
del pdf.pages[-1]
pdf.save("decrypted.pdf")
import tabula
tabula.read_pdf("decrypted.pdf", stream=True)
import PyPDF2
pdfFileObj=open("decrypted.pdf", "rb")
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
pdfReader.numPages
pageObj=pdfReader.getPage(0)
pageObj.extractText()
Tabula를 사용하면 "출력 파일이 비어 있습니다"라는 메시지가 나타납니다.
PyPDF2를 사용하면 '/ n'만 받고 있습니다.
업데이트 10/3/2019 Pdfminer.six (버전 11 월 2018)
DuckPuncher가 게시 한 솔루션을 사용하여 더 나은 결과를 얻었 습니다 . 해독 된 파일의 경우 레이블이 있지만 데이터는 없습니다. 암호화 된 파일에서도 마찬가지입니다. 암호화되지 않은 파일은 완벽하게 작동합니다. 암호화되거나 해독 된 파일의 데이터와 레이블이 필요하기 때문에이 코드는 작동하지 않습니다. 이 분석을 위해 2018 년 11 월에 릴리스 된 Python 라이브러리 인 pdfminer.six 를 사용 했습니다 . Pdfminer.six에는 pycryptodome 라이브러리가 포함되어 있습니다. 그들의 문서에 따르면 " PyCryptodome 은 저수준 암호 프리미티브의 자체 포함 된 파이썬 패키지입니다."
코드는 스택 교환 질문에 있습니다 : 파이썬에서 PDFMiner를 사용하여 PDF 파일에서 텍스트 추출?
내 실험을 반복하고 싶으면 좋겠습니다. 설명은 다음과 같습니다.
1)이 질문에서 언급 한 코드를 암호화되지 않은 PDF로 실행하십시오.
2) PDF "보안"(Adobe에서 사용하는 용어)과 동일하게 암호화 된 PDF라고합니다. Google에서 찾을 수있는 일반적인 양식을 사용하십시오. 다운로드 한 후 필드를 채워야합니다. 그렇지 않으면 레이블은 검사하지만 필드는 검사하지 않습니다. 데이터는 필드에 있습니다.
3) Pykepdf를 사용하여 암호화 된 PDF를 해독하십시오. 해독 된 PDF가됩니다.
4) 해독 된 PDF를 사용하여 코드를 다시 실행하십시오.
2019 년 10 월 10 일 카멜롯 업데이트 (2019 년 7 월 버전)
파이썬 라이브러리 카멜롯을 찾았습니다. camelot-py 0.7.3 이 필요합니다 .
매우 강력하며 Python 3.7에서 작동합니다. 또한 사용하기가 매우 쉽습니다. 먼저 Ghostscript 도 설치해야합니다 . 그렇지 않으면 작동하지 않습니다. Pandas 도 설치해야합니다 . pip install camelot-py를 사용하지 마십시오 . 대신 pip install camelot-py [cv]를 사용하십시오.
프로그램의 저자는 Vinayak Mehta입니다. Frank Du는 YouTube 비디오 "Python을 사용하여 Camelot으로 PDF에서 테이블 데이터 추출"에서이 코드를 공유합니다.
코드를 확인했으며 암호화되지 않은 파일로 작업하고 있습니다. 그러나 암호화 및 해독 된 파일에는 작동하지 않으므로 이것이 나의 목표 입니다.
Camelot은 PDF에서 테이블을 가져 오기위한 것입니다.
코드는 다음과 같습니다.
Python
import camelot
import pandas
name_table = camelot.read_pdf("uncrypted.pdf")
type(name_table)
#This is a Pandas dataframe
name_table[0]
first_table = name_table[0]
#Translate camelot table object to a pandas dataframe
first_table.df
first_table.to_excel("unencrypted.xlsx")
#This creates an excel file.
#Same can be done with csv, json, html, or sqlite.
#To get all the tables of the pdf you need to use this code.
for table in name_table:
print(table.df)
업데이트 10/7/2019 하나의 트릭을 찾았습니다. Adobe Reader로 보안 PDF를 열고 Microsoft에서 PDF로 인쇄 한 다음 PDF로 저장하면 해당 사본을 사용하여 데이터를 추출 할 수 있습니다. 또한 PDF 파일을 JSON, Excel, SQLite, CSV, HTML 및 다른 형식으로 변환 할 수도 있습니다. 이것은 내 질문에 대한 가능한 해결책입니다. 그러나 목표는 Python으로 100 %를 수행하는 것이기 때문에 여전히 그 트릭없이 수행 할 수있는 옵션을 찾고 있습니다. 또한 더 나은 암호화 방법을 사용하면 트릭이 작동하지 않을 수도 있습니다. 추출 가능한 사본을 얻으려면 Adobe Reader를 여러 번 사용해야하는 경우가 있습니다.
2019 년 8 월 8 일 업데이트. 세번째 질문입니다. 이제 세 번째 질문이 있습니다. 모든 보안 / 암호화 된 PDF가 비밀번호로 보호됩니까? 왜 pikepdf가 작동하지 않습니까? 내 생각에 현재 버전의 pikepdf는 일부 암호화 유형을 손상시킬 수 있지만 모든 암호화 유형을 파괴하지는 않습니다. @constt는 PyPDF2가 일부 유형의 보호를 중단 할 수 있다고 언급했습니다. 그러나 PyPDF2가 Adobe Acrobat Pro 6.0으로 작성된 암호화를 손상시킬 수 있지만 그 이후 버전에서는 암호화되지 않을 수 있다는 기사를 발견했다고 그에게 대답했습니다.
qpdf
파일을 해독하는 데 사용하려고 했습니까 ? 트릭을 수행하는 경우 subprocess
파싱하기 전에 모듈을 사용하여 스크립트에서 파일을 해독 하여 파일을 해독 할 수 있습니다.
PyPDF2
. 모든 것이 제대로 작동합니다. 내가 사용하는pdftk
암호화 파일에 대한 온라인 서비스뿐만 아니라. "고생스러운"pdf 파일에 대한 링크를 게시 할 수 있습니까?