Pythonを介してPDFドキュメントを操作する

Manipulate PDF Document in Python

PDF A標準 (A 1AおよびA 1B) に対するPDFドキュメントの検証

PDFドキュメントをPDF/A-1aまたはPDF/A-1b互換性について検証するには、Documentクラスのvalidateメソッドを使用します。このメソッドを使用すると、結果を保存するファイルの名前と必要な検証タイプPdfFormat列挙型: PDF_A_1AまたはPDF_A_1Bを指定できます。

以下のコードスニペットは、PDFドキュメントをPDF/A-1Aに対して検証する方法を示しています。


    import aspose.pdf as ap

    # ドキュメントを開く
    document = ap.Document(input_pdf)

    # PDF/A-1aに対してPDFを検証
    document.validate(output_xml, ap.PdfFormat.PDF_A_1A)

以下のコードスニペットは、PDFドキュメントをPDF/A-1bに対して検証する方法を示しています。


    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("目次")
    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 = ["最初のページ", "2ページ目", "3ページ目", "4ページ目"]
    for i in range(0, 2):
        # 見出しオブジェクトを作成
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = tocPage
        heading2.segments.append(segment2)

        # 見出しオブジェクトの宛先ページを指定
        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()

    # リーダータイプを設定
    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
    # 各レベルの左マージンとテキストフォーマット設定を定義して、4レベルリストのフォーマットを定義

    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()

    # セクションに4つの見出しを追加
    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)

TOCでページ番号を非表示にする

TOCの見出しとともにページ番号を表示したくない場合は、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("目次")
    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
    # 左マージンを設定し、各レベルのテキストフォーマット設定を行い、4レベルリストの形式を定義

    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()
    # セクションに4つの見出しを追加
    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 = "これはレベル " + str(Level) + " の見出しです"
        heading2.is_in_list = True
        page.paragraphs.add(heading2)
    doc.save(output_pdf)

TOCを追加する際のページ番号のカスタマイズ

PDFドキュメントにTOCを追加する際に、TOCのページ番号をカスタマイズすることは一般的です。例えば、ページ番号の前に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情報を表すオブジェクトを作成
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("目次")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    # TOCのタイトルを設定
    toc_info.title = title
    toc_info.page_numbers_prefix = "P"
    toc_page.toc_info = toc_info
    for i in range(len(doc.pages)):
        # 見出しオブジェクトを作成
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        # 見出しオブジェクトの宛先ページを指定
        heading2.destination_page = doc.pages[i + 1]
        # 宛先ページ
        heading2.top = doc.pages[i + 1].rect.height
        # 宛先座標
        segment2.text = "ページ " + str(i)
        # TOCを含むページに見出しを追加
        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('ファイルは期限切れです。新しいものが必要です。');"
    )
    # JavaScriptをPDFのオープンアクションとして設定
    doc.open_action = javaScript

    # PDFドキュメントを保存
    doc.save(output_pdf)

Pythonで記入可能なPDFをフラット化する

PDFドキュメントには、ラジオボタン、チェックボックス、テキストボックス、リストなどのインタラクティブな記入可能なウィジェットが含まれていることがよくあります。さまざまなアプリケーションの目的で編集できなくするために、PDFファイルをフラット化する必要があります。Aspose.PDFは、わずか数行のコードでPythonで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)