logo

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 파일에서 텍스트 추출



파이썬






# 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 August27,2008 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)):> > ># creating rotated page object> >pageObj>=> reader.pages[page]> >pageObj.rotate(rotation)> > ># adding rotated page object to pdf writer> >pdfWriter.add_page(pageObj)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing rotated pages to new file> >pdfWriter.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > > 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의 PDF 판독기 개체를 만듭니다.
writer = PdfWriter()>
  • 회전된 페이지는 새 PDF에 기록됩니다. PDF에 쓰기 위해 우리는 PDFWriter pypdf 모듈의 클래스.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
  • 이제 원본 PDF의 각 페이지를 반복합니다. 우리는 다음과 같이 페이지 개체를 얻습니다. .페이지[] PDF 리더 클래스의 방법. 이제 페이지를 회전합니다. 회전() 페이지 개체 클래스의 메서드입니다. 그런 다음 다음을 사용하여 PDF 작성기 개체에 페이지를 추가합니다. 추가() 회전된 페이지 개체를 전달하여 PDF 작성기 클래스의 메서드입니다.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
  • 이제 PDF 페이지를 새 PDF 파일에 작성해야 합니다. 먼저 새 파일 객체를 열고 다음을 사용하여 PDF 페이지를 작성합니다. 쓰다() PDF 작성기 개체의 방법입니다. 마지막으로 원본 PDF 파일 개체와 새 파일 개체를 닫습니다.

3. PDF 파일 병합

파이썬




# importing required modules> from> pypdf>import> PdfMerger> > > def> PDFmerge(pdfs, output):> ># creating pdf file merger object> >pdfMerger>=> PdfMerger()> > ># appending pdfs one by one> >for> pdf>in> pdfs:> >pdfMerger.append(pdf)> > ># writing combined pdf to output pdf file> >with>open>(output,>'wb'>) as f:> >pdfMerger.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 .

  • 이 프로그램의 중요한 측면을 살펴보겠습니다.
pdfMerger = PdfMerger()>
  • 병합을 위해 사전 빌드된 클래스를 사용합니다. PDFMerger pypdf 모듈.
    여기서는 객체를 생성합니다. pdf병합 PDF 병합 클래스
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
  • 이제 각 PDF의 파일 객체를 PDF 병합 객체에 추가합니다. 추가() 방법.
with open(output, 'wb') as f: pdfMerger.write(f)>
  • 마지막으로 다음을 사용하여 PDF 페이지를 출력 PDF 파일에 씁니다. 쓰다 PDF 병합 객체의 방법.

4. PDF 파일 분할

파이썬




# 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(페이지 0,1), 분할 2(페이지 2,3), 분할 3(페이지 4-끝) .
위 Python 프로그램에서는 새로운 함수나 클래스가 사용되지 않았습니다. 간단한 논리와 반복을 사용하여 전달된 목록에 따라 전달된 PDF의 분할을 만들었습니다. 분할 .

5. PDF 페이지에 워터마크 추가

파이썬




# importing the required modules> from> pypdf>import> PdfReader> > def> add_watermark(wmFile, pageObj):> ># creating pdf reader object of watermark pdf file> >reader>=> PdfReader(wmFileObj)> > ># 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)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing watermarked pages to new file> >writer.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

>

>

원본(왼쪽)과 워터마크가 있는(오른쪽) PDF 파일의 첫 번째 페이지는 다음과 같습니다.

PDF 파일에 워터마킹하기

  • 모든 과정은 페이지 회전 예시와 동일합니다. 유일한 차이점은 다음과 같습니다.
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
  • 페이지 개체는 다음을 사용하여 워터마크가 있는 페이지 개체로 변환됩니다. 워터 마크를 추가() 기능.
  • 이해하려고 노력해보자 워터 마크를 추가() 기능:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
  • 가장 먼저, 우리는 PDF 리더 객체를 생성합니다 워터마크.pdf . 전달된 페이지 객체에 다음을 사용합니다. merge_page() 기능을 수행하고 워터마크 PDF 리더 개체의 첫 번째 페이지의 페이지 개체를 전달합니다. 이렇게 하면 전달된 페이지 개체 위에 워터마크가 오버레이됩니다.

이제 Python에서 PDF 파일 작업에 대한 긴 튜토리얼이 끝났습니다.
이제 나만의 PDF 관리자를 쉽게 만들 수 있습니다!
참고자료:

techcodeview.com를 좋아하고 기여하고 싶다면 write.techcodeview.com를 사용하여 기사를 작성하거나 기사를 [email protected]로 메일로 보낼 수도 있습니다.
잘못된 내용을 발견했거나 위에서 논의한 주제에 대해 더 많은 정보를 공유하고 싶다면 의견을 작성해 주세요.