PDF에 페이지 번호 추가

이게 뭐야



Python을 사용하여 무료로 PDF를 편집하는 방법을 알아보십시오.
샘플로서 각 페이지에 페이지 번호를 추가해 보겠습니다.



설치



다음을 사용합니다.

  • ReportLab : Python용, PDF 생성 라이브러리. 유료 버전과 무료 버전이 있습니다.

  • PyPDF2 : 페이지 단위의 PDF 편집 라이브러리.

  • PdfFormFiller : PDF에 텍스트를 삽입하는 라이브러리.

  • 설치
    conda install -y reportlab
    pip install PyPDF2 pdfformfiller
    

    아나콘다을 사용하지 않는 경우 conda 대신 pip을 사용하십시오.

    페이지 번호를 추가하는 샘플



    일본어 폰트로서, IPAexGothic 글꼴 (을)를 사용하고 있습니다만, 다른 폰트라도 상관하지 않습니다.
    (Ubuntu에서는 apt-get install fonts-ipaexfont로 설치할 수 있습니다)

    주의점으로서, 용지 사이즈를 나타내는 PyPDF2.pdf.PageObject.mediaBox 의 요소인 FloatObject 가 Decimal 를 돌려주기 때문에, 실수와의 가감 연산으로 에러가 됩니다. 여기에서는, 무리해, FloatObject 가 실수와 가감 연산할 수 있도록(듯이) 옮겨놓고 있습니다.

    addPage(입력 파일, 출력 파일)로 하면, 원의 PDF에, 페이지 번호를 추가한 PDF를 작성할 수 있습니다.

    파이썬
    import PyPDF2
    class FloatObject(PyPDF2.generic.FloatObject):
        def __add__(self, other):
            return self.as_numeric() + other
        def __radd__(self, other):
            return self.as_numeric() + other
        def __sub__(self, other):
            return self.as_numeric() - other
        def __rsub__(self, other):
            return -self.as_numeric() + other
    PyPDF2.generic.FloatObject = FloatObject
    
    from reportlab.lib.styles import ParagraphStyle
    from reportlab.lib.enums import TA_CENTER
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    from pdfformfiller import PdfFormFiller
    
    def addPage(infile, outfile):
        # Linuxでは、'/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf'など
        pdfmetrics.registerFont(TTFont('IPAexGothic', 'c:/Windows/Fonts/ipaexg.ttf'))
        sty = ParagraphStyle('sty', alignment=TA_CENTER, fontName='IPAexGothic', fontSize=9)
        ff = PdfFormFiller(infile)
        for i in range(ff.pdf.getNumPages()):
            p = ff.pdf.getPage(i)
            ff.add_text('ページ %d'%(i+1), i, (0,p.mediaBox[3]-30), p.mediaBox.getUpperRight(), sty)
        ff.write(outfile)
    
  • Windows, Ubuntu, Alpine-Linux에서 작동 확인 중입니다.

  • 추가



    패키지화했습니다.

    이상

    좋은 웹페이지 즐겨찾기