Python에서 PDF 파일 작업
여러분 모두 PDF가 무엇인지 잘 알고 있어야 합니다. 사실 그것들은 가장 중요하고 널리 사용되는 디지털 미디어 중 하나입니다. PDF는 다음을 의미합니다. 휴대용 문서 형식 . 그것은 사용한다 .pdf 확대. 이는 소프트웨어 하드웨어나 운영 체제에 관계없이 안정적으로 문서를 제시하고 교환하는 데 사용됩니다.
발명자 어도비 벽돌 PDF는 이제 국제표준화기구(ISO)에서 관리하는 개방형 표준입니다. PDF에는 오디오 비디오 및 비즈니스 로직 필드의 링크와 버튼이 포함될 수 있습니다.
이 기사에서는 다음과 같은 다양한 작업을 수행하는 방법을 배웁니다.
- PDF에서 텍스트 추출
- PDF 페이지 회전
- PDF 병합
- PDF 분할
- PDF 페이지에 워터마크 추가
설치: 간단한 파이썬 스크립트를 사용해보세요!
우리는 타사 모듈인 pypdf를 사용할 것입니다.
pypdf는 PDF 툴킷으로 구축된 Python 라이브러리입니다. 다음을 수행할 수 있습니다.
- 문서 정보 추출(제목 작성자…)
- 페이지별로 문서 분할
- 페이지별로 문서 병합
- 페이지 자르기
- 여러 페이지를 단일 페이지로 병합
- PDF 파일 암호화 및 해독
- 그리고 더!
pypdf를 설치하려면 명령줄에서 다음 명령을 실행하세요.
pip install pypdf이 모듈 이름은 대소문자를 구분하므로 그리고 은 소문자이고 나머지는 모두 대문자입니다. 이 튜토리얼/기사에 사용된 모든 코드와 PDF 파일을 사용할 수 있습니다. 여기 .
1. PDF 파일에서 텍스트 추출
Python# importing required classes from pypdf import PdfReader # creating a pdf reader object reader = PdfReader ( 'example.pdf' ) # printing number of pages in pdf file print ( len ( reader . pages )) # creating a page object page = reader . pages [ 0 ] # extracting text from page print ( page . extract_text ())위 프로그램의 출력은 다음과 같습니다.
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
위의 코드를 덩어리로 이해해 보겠습니다.
reader = PdfReader('example.pdf')
- 여기서 우리는 객체를 생성합니다 PDF리더 pypdf 모듈의 클래스를 만들고 PDF 파일의 경로를 전달하고 PDF 리더 개체를 가져옵니다.
print(len(reader.pages))
- 페이지 속성은 PDF 파일의 페이지 수를 제공합니다. 예를 들어 우리의 경우에는 20입니다(출력의 첫 번째 줄 참조).
pageObj = reader.pages[0]
- 이제 우리는 객체를 생성합니다 페이지객체 pypdf 모듈의 클래스. PDF 리더 개체에는 기능이 있습니다. 페이지[] 페이지 번호(인덱스 0부터 시작)를 인수로 사용하고 페이지 개체를 반환합니다.
print(pageObj.extract_text())
- 페이지 객체에는 기능이 있습니다 추출_텍스트() PDF 페이지에서 텍스트를 추출합니다.
메모: PDF 파일은 사람들이 쉽게 인쇄하고 읽을 수 있는 방식으로 텍스트를 배치하는 데 적합하지만 소프트웨어가 일반 텍스트로 구문 분석하는 것은 간단하지 않습니다. 따라서 pypdf는 PDF에서 텍스트를 추출할 때 실수를 할 수 있으며 일부 PDF를 전혀 열지 못할 수도 있습니다. 안타깝게도 이에 대해 할 수 있는 일은 많지 않습니다. pypdf는 특정 PDF 파일 중 일부를 작동하지 못할 수도 있습니다.
2. PDF 페이지 회전
# importing the required classes from pypdf import PdfReader PdfWriter def PDFrotate ( origFileName newFileName rotation ): # creating a pdf Reader object reader = PdfReader ( origFileName ) # creating a pdf writer object for new pdf writer = PdfWriter () # rotating each page for page in range ( len ( reader . pages )): pageObj = reader . pages [ page ] pageObj . rotate ( rotation ) # Add the rotated page object to the PDF writer writer . add_page ( pageObj ) # Write the rotated pages to the new PDF file with open ( newFileName 'wb' ) as newFile : writer . write ( newFile ) def main (): # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'rotated_example.pdf' # rotation angle rotation = 270 # calling the PDFrotate function PDFrotate ( origFileName newFileName rotation ) if __name__ == '__main__' : # calling the main function main ()
여기에서 첫 번째 페이지가 어떻게 표시되는지 확인할 수 있습니다. 회전_예제.pdf 회전 후 (오른쪽 이미지)와 같습니다.
위 코드와 관련된 몇 가지 중요한 사항은 다음과 같습니다.
- 회전을 위해 먼저 원본 PDF의 PDF 판독기 개체를 만듭니다.
writer = PdfWriter()
- 회전된 페이지는 새 PDF에 기록됩니다. PDF에 쓰기 위해 우리는 PDFWriter pypdf 모듈의 클래스.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- 이제 원본 PDF의 각 페이지를 반복합니다. 우리는 다음과 같이 페이지 개체를 얻습니다. .페이지[] PDF 리더 클래스의 방법. 이제 페이지를 회전합니다. 회전() 페이지 개체 클래스의 메서드입니다. 그런 다음 다음을 사용하여 PDF 작성기 개체에 페이지를 추가합니다. 추가하다() 회전된 페이지 개체를 전달하여 PDF 작성기 클래스의 메서드입니다.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- 이제 PDF 페이지를 새 PDF 파일에 작성해야 합니다. 먼저 새 파일 객체를 열고 다음을 사용하여 PDF 페이지를 작성합니다. 쓰다() PDF 작성기 개체의 방법입니다. 마지막으로 원본 PDF 파일 개체와 새 파일 개체를 닫습니다.
3. PDF 파일 병합
Python # importing required modules from pypdf import PdfWriter def PDFmerge ( pdfs output ): # creating pdf file writer object pdfWriter = PdfWriter () # appending pdfs one by one for pdf in pdfs : pdfWriter . append ( pdf ) # writing combined pdf to output pdf file with open ( output 'wb' ) as f : pdfWriter . write ( f ) def main (): # pdf files to merge pdfs = [ 'example.pdf' 'rotated_example.pdf' ] # output pdf file name output = 'combined_example.pdf' # calling pdf merge function PDFmerge ( pdfs = pdfs output = output ) if __name__ == '__main__' : # calling the main function main ()
위 프로그램의 출력은 결합된 PDF입니다. Combined_example.pdf 병합하여 얻은 예제.pdf 그리고 회전_예제.pdf .
- 이 프로그램의 중요한 측면을 살펴보겠습니다.
pdfWriter = PdfWriter() - 병합을 위해 사전 빌드된 클래스를 사용합니다. PDFWriter pypdf 모듈.
여기서 객체를 생성합니다. PDF작성기 PDF 작가 수업 중
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- 이제 우리는 다음을 사용하여 각 PDF의 파일 객체를 PDF 작성기 객체에 추가합니다. 추가() 방법.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- 마지막으로 다음을 사용하여 PDF 페이지를 출력 PDF 파일에 씁니다. 쓰다 PDF 작성기 개체의 방법입니다.
4. PDF 파일 분할
Python # importing the required modules from pypdf import PdfReader PdfWriter def PDFsplit ( pdf splits ): # creating pdf reader object reader = PdfReader ( pdf ) # starting index of first slice start = 0 # starting index of last slice end = splits [ 0 ] for i in range ( len ( splits ) + 1 ): # creating pdf writer object for (i+1)th split writer = PdfWriter () # output pdf file name outputpdf = pdf . split ( '.pdf' )[ 0 ] + str ( i ) + '.pdf' # adding pages to pdf writer object for page in range ( start end ): writer . add_page ( reader . pages [ page ]) # writing split pdf pages to pdf file with open ( outputpdf 'wb' ) as f : writer . write ( f ) # interchanging page split start position for next split start = end try : # setting split end position for next split end = splits [ i + 1 ] except IndexError : # setting split end position for last split end = len ( reader . pages ) def main (): # pdf file to split pdf = 'example.pdf' # split page positions splits = [ 2 4 ] # calling PDFsplit function to split pdf PDFsplit ( pdf splits ) if __name__ == '__main__' : # calling the main function main ()
출력은 다음과 같은 세 개의 새로운 PDF 파일이 됩니다. 분할 1 (01 페이지) 분할 2(23 페이지) 분할 3(4 페이지 끝) .
위 Python 프로그램에서는 새로운 함수나 클래스가 사용되지 않았습니다. 간단한 논리와 반복을 사용하여 전달된 목록에 따라 전달된 PDF의 분할을 만들었습니다. 분할 .
5. PDF 페이지에 워터마크 추가
Python # importing the required modules from pypdf import PdfReader PdfWriter def add_watermark ( wmFile pageObj ): # creating pdf reader object of watermark pdf file reader = PdfReader ( wmFile ) # merging watermark pdf's first page with passed page object. pageObj . merge_page ( reader . pages [ 0 ]) # returning watermarked page object return pageObj def main (): # watermark pdf file name mywatermark = 'watermark.pdf' # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'watermarked_example.pdf' # creating pdf File object of original pdf pdfFileObj = open ( origFileName 'rb' ) # creating a pdf Reader object reader = PdfReader ( pdfFileObj ) # creating a pdf writer object for new pdf writer = PdfWriter () # adding watermark to each page for page in range ( len ( reader . pages )): # creating watermarked page object wmpageObj = add_watermark ( mywatermark reader . pages [ page ]) # adding watermarked page object to pdf writer writer . add_page ( wmpageObj ) # writing watermarked pages to new file with open ( newFileName 'wb' ) as newFile : writer . write ( newFile ) # closing the original pdf file object pdfFileObj . close () if __name__ == '__main__' : # calling the main function main ()
원본(왼쪽)과 워터마크가 있는(오른쪽) PDF 파일의 첫 번째 페이지는 다음과 같습니다.
- 모든 과정은 페이지 회전 예시와 동일합니다. 유일한 차이점은 다음과 같습니다.
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- 페이지 개체는 다음을 사용하여 워터마크가 있는 페이지 개체로 변환됩니다. add_watermark() 기능.
- 이해하려고 노력해보자 add_watermark() 기능:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- 가장 먼저 우리는 PDF 리더 개체를 만듭니다. 워터마크.pdf . 우리가 사용하는 전달된 페이지 객체에 merge_page() 기능을 수행하고 워터마크 PDF 리더 개체의 첫 번째 페이지의 페이지 개체를 전달합니다. 이렇게 하면 전달된 페이지 개체 위에 워터마크가 오버레이됩니다.
이제 Python에서 PDF 파일 작업에 대한 긴 튜토리얼이 끝났습니다.
이제 나만의 PDF 관리자를 쉽게 만들 수 있습니다!
참고자료:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
GeeksforGeeks를 좋아하고 기여하고 싶다면 write.geeksforgeeks.org를 사용하여 기사를 작성하거나 기사를 [email protected]로 메일로 보낼 수도 있습니다. GeeksforGeeks 메인 페이지에 나타나는 기사를 보고 다른 Geeks를 도와주세요.
잘못된 내용을 발견했거나 위에서 논의한 주제에 대해 더 많은 정보를 공유하고 싶다면 의견을 작성해 주세요.