Python을 통한 PDF 문서 조작

파이썬으로 PDF 문서 조작하기

PDF A 표준(PDF A 1A 및 A 1B)용 PDF 문서 유효성 검사

PDF 문서의 PDF/A-1a 또는 PDF/A-1b 호환성을 검증하려면 Document 클래스의 validate 메서드를 사용하세요. 이 메서드는 결과를 저장할 파일의 이름과 필요한 유효성 검사 유형 PdfFormat 열거형: PDF_A_1A 또는 PDF_A_1B를 지정할 수 있게 합니다.

다음 코드 스니펫은 PDF/A-1A에 대해 PDF 문서를 검증하는 방법을 보여줍니다.


    import aspose.pdf as ap

    # 문서 열기
    document = ap.Document(input_pdf)

    # PDF/A-1a에 대해 PDF 유효성 검사
    document.validate(output_xml, ap.PdfFormat.PDF_A_1A)

다음 코드 스니펫은 PDF/A-1b에 대해 PDF 문서를 검증하는 방법을 보여줍니다.


    import aspose.pdf as ap

    # 문서 열기
    document = ap.Document(input_pdf)

    # PDF/A-1a에 대해 PDF 유효성 검사
    document.validate(output_xml, ap.PdfFormat.PDF_A_1B)

TOC 작업하기

기존 PDF에 TOC 추가

PDF에서 TOC는 “차례"를 의미합니다. 이는 사용자가 문서의 섹션 및 헤딩을 개요로 제공하여 문서를 빠르게 탐색할 수 있게 해주는 기능입니다.

기존 PDF 파일에 TOC를 추가하려면 aspose.pdf 네임스페이스의 Heading 클래스를 사용합니다. aspose.pdf 네임스페이스는 새로운 PDF 파일을 생성하고 기존 PDF 파일을 조작할 수 있습니다. 기존 PDF에 TOC를 추가하려면 Aspose.Pdf 네임스페이스를 사용합니다. 다음 코드 스니펫은 Python을 통해 .NET에서 기존의 PDF 파일 내부에 목차를 생성하는 방법을 보여줍니다.


    import aspose.pdf as ap

    # 기존 PDF 파일을 로드합니다
    doc = ap.Document(input_pdf)

    # PDF 파일의 첫 번째 페이지에 접근합니다
    tocPage = doc.pages.insert(1)

    # TOC 정보를 나타내기 위한 객체를 생성합니다
    tocInfo = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD

    # TOC 제목을 설정합니다
    tocInfo.title = title
    tocPage.toc_info = tocInfo

    # TOC 요소로 사용할 문자열 객체를 생성합니다
    titles = ["First page", "Second page", "Third page", "Fourth page"]
    for i in range(0, 2):
        # Heading 객체를 생성합니다
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = tocPage
        heading2.segments.append(segment2)

        # Heading 객체의 대상 페이지를 지정합니다
        heading2.destination_page = doc.pages[i + 2]

        # 대상 페이지
        heading2.top = doc.pages[i + 2].rect.height

        # 대상 좌표
        segment2.text = titles[i]

        # TOC를 포함하는 페이지에 헤딩을 추가합니다
        tocPage.paragraphs.add(heading2)

    # 업데이트된 문서를 저장합니다
    doc.save(output_pdf)

서로 다른 TOC 레벨에 대해 다른 TabLeaderType 설정하기

Aspose.PDF for Python을 사용하면 서로 다른 TOC 레벨에 대해 다른 TabLeaderType을 설정할 수 있습니다. TocInfoline_dash 속성을 설정해야 합니다.


    import aspose.pdf as ap

    doc = ap.Document()
    tocPage = doc.pages.add()
    toc_info = ap.TocInfo()

    # LeaderType 설정
    toc_info.line_dash = ap.text.TabLeaderType.SOLID
    title = ap.text.TextFragment("목차")
    title.text_state.font_size = 30
    toc_info.title = title

    # Pdf 문서의 섹션 컬렉션에 목록 섹션 추가
    tocPage.toc_info = toc_info
    # 왼쪽 여백을 설정하여 네 가지 수준 목록의 형식을 정의
    # 및 각 수준의 텍스트 형식 설정

    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.left = 0
    toc_info.format_array[0].margin.right = 30
    toc_info.format_array[0].line_dash = ap.text.TabLeaderType.DOT
    toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    toc_info.format_array[1].margin.left = 10
    toc_info.format_array[1].margin.right = 30
    toc_info.format_array[1].line_dash = 3
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].margin.left = 20
    toc_info.format_array[2].margin.right = 30
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].line_dash = ap.text.TabLeaderType.SOLID
    toc_info.format_array[3].margin.left = 30
    toc_info.format_array[3].margin.right = 30
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD

    # Pdf 문서에 섹션 생성
    page = doc.pages.add()

    # 섹션에 네 개의 헤딩 추가
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        heading2.toc_page = tocPage
        segment2.text = "샘플 헤딩" + str(Level)
        heading2.text_state.font = ap.text.FontRepository.find_font("Arial")

        # 목차에 헤딩 추가.
        heading2.is_in_list = True
        page.paragraphs.add(heading2)

    # Pdf 저장
    doc.save(output_pdf)

목차에서 페이지 번호 숨기기

목차에 제목과 함께 페이지 번호를 표시하지 않으려면 TocInfo 클래스의 is_show_page_numbers 속성을 false로 사용할 수 있습니다. 다음 코드 스니펫을 확인하여 목차에서 페이지 번호를 숨기세요:


    import aspose.pdf as ap

    doc = ap.Document()
    toc_page = doc.pages.add()
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    # Pdf 문서의 섹션 컬렉션에 목록 섹션 추가
    toc_page.toc_info = toc_info
    # 각 레벨의 왼쪽 여백과 텍스트 형식 설정을 설정하여 네 레벨 목록의 형식을 정의

    toc_info.is_show_page_numbers = False
    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.right = 0
    toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    toc_info.format_array[1].margin.left = 30
    toc_info.format_array[1].text_state.underline = True
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
    page = doc.pages.add()
    # 섹션에 네 개의 제목 추가
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        segment2.text = "this is heading of level " + str(Level)
        heading2.is_in_list = True
        page.paragraphs.add(heading2)
    doc.save(output_pdf)

목차 추가 시 페이지 번호 사용자 지정

PDF 문서에 목차를 추가할 때 페이지 번호를 사용자 지정하는 것이 일반적입니다. 예를 들어, 페이지 번호 앞에 P1, P2, P3 등과 같은 접두어를 추가해야 할 수 있습니다. 이러한 경우, Aspose.PDF for Python은 TocInfo 클래스의 page_numbers_prefix 속성을 제공하여 페이지 번호를 사용자 지정할 수 있습니다. 다음 코드 샘플과 같이 사용할 수 있습니다.


    import aspose.pdf as ap

    # 기존 PDF 파일 로드
    doc = ap.Document(input_pdf)
    # PDF 파일의 첫 번째 페이지에 액세스
    toc_page = doc.pages.insert(1)
    # 목차 정보를 나타내는 객체 생성
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    # 목차의 제목 설정
    toc_info.title = title
    toc_info.page_numbers_prefix = "P"
    toc_page.toc_info = toc_info
    for i in range(len(doc.pages)):
        # Heading 객체 생성
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        # Heading 객체의 대상 페이지 지정
        heading2.destination_page = doc.pages[i + 1]
        # 대상 페이지
        heading2.top = doc.pages[i + 1].rect.height
        # 대상 좌표
        segment2.text = "Page " + str(i)
        # 목차가 포함된 페이지에 heading 추가
        toc_page.paragraphs.add(heading2)

    # 업데이트된 문서 저장
    doc.save(output_pdf)

PDF 만료 날짜 설정 방법

우리는 PDF 파일에 액세스 권한을 적용하여 특정 사용자 그룹이 PDF 문서의 특정 기능/객체에 액세스할 수 있도록 합니다. PDF 파일 액세스를 제한하기 위해 일반적으로 암호화를 적용하고, 사용자가 문서를 액세스/보기할 때 PDF 파일 만료에 대한 유효한 메시지를 받도록 PDF 파일 만료를 설정해야 할 수도 있습니다.


    import aspose.pdf as ap

    # Document 객체 인스턴스화
    doc = ap.Document()
    # PDF 파일의 페이지 컬렉션에 페이지 추가
    doc.pages.add()
    # 페이지 객체의 단락 컬렉션에 텍스트 조각 추가
    doc.pages[1].paragraphs.add(ap.text.TextFragment("Hello World..."))
    # PDF 만료 날짜를 설정하기 위한 JavaScript 객체 생성
    javaScript = ap.annotations.JavascriptAction(
        "var year=2017;"
        + "var month=5;"
        + "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
        + "expiry = new Date(year, month);"
        + "if (today.getTime() > expiry.getTime())"
        + "app.alert('The file is expired. You need a new one.');"
    )
    # JavaScript를 PDF 열기 동작으로 설정
    doc.open_action = javaScript

    # PDF 문서 저장
    doc.save(output_pdf)

파이썬에서 작성 가능한 PDF 평탄화

PDF 문서에는 라디오 버튼, 체크박스, 텍스트 상자, 목록 등과 같은 대화형 작성 가능한 위젯이 포함된 양식이 자주 포함됩니다. 다양한 응용 프로그램 목적을 위해 편집할 수 없게 만들려면 PDF 파일을 평탄화해야 합니다. Aspose.PDF는 몇 줄의 코드만으로 파이썬에서 PDF를 평탄화하는 기능을 제공합니다:


    import aspose.pdf as ap

    # 소스 PDF 양식 로드
    doc = ap.Document(input_pdf)

    # 작성 가능한 PDF 평탄화
    if len(doc.form.fields) > 0:
        for item in doc.form.fields:
            item.flatten()

    # 업데이트된 문서 저장
    doc.save(output_pdf)