1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでPDFにハイパーリンクを追加・削除する

Posted at

PDFファイルは、今や文書の保存や配布に最適なフォーマットです。しかし、PDFファイルは静的な性質を持っているため、インタラクティブ性が制限されることがあります。ハイパーリンクは、PDFファイルのインタラクティブ性とユーザーエクスペリエンスを向上させるための重要な要素です。
強力なプログラミング言語であるPythonには、ハイパーリンクの追加や削除など、PDFファイルを扱うための様々なライブラリやツールがあります。この記事では、これらの操作を実行するためにサードパーティ製ライブラリSpire.PDF for Pythonを使用する方法について詳しく説明します。

Pythonライブラリをインストールする

PDFファイルを処理するには、Spire.PDF for Pythonライブラリが必要です。以下のpipコマンドで直接インストールできます:

pip install Spire.Pdf

PythonでPDFにハイパーリンクを追加する

Spire.PDF for Pythonは、PDFに様々なタイプのハイパーリンクを追加することをサポートしています:

  • 単純なテキストリンク: PdfPageBase.Canvas.DrawString() メソッドを使ってPDFページに直接描画できます。
  • ハイパーテキストリンク、電子メールリンク: PdfTextWebLink.DrawTextWebLink() メソッドでPDFページに描画できます。
  • ドキュメントリンク: PdfPageBase.AnnotationsWidget.Add(PdfFileLinkAnnotation) メソッドで追加できます。

Pythonコード:

from spire.pdf.common import *
from spire.pdf import *

# PDF文書を作成し、ページを追加する
pdf = PdfDocument()
page = pdf.Pages.Add()

# 開始X座標とY座標を指定する
y = 30.0
x = 10.0

# True Typeフォントの作成
font = PdfTrueTypeFont("Yu Mincho", 12.0, PdfFontStyle.Regular, True)
font1 = PdfTrueTypeFont("Yu Mincho", 12.0, PdfFontStyle.Underline, True)

# シンプルなテキストリンクを追加する
label = "簡単なテキストリンク:"
format = PdfStringFormat()
format.MeasureTrailingSpaces = True
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
url = "https://qiita.com/"
page.Canvas.DrawString(url, font1, PdfBrushes.get_Blue(), x, y)
y = y + 28

# ハイパーテキストリンクの追加
label = "ハイパーテキストリンク:"
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
webLink = PdfTextWebLink()
webLink.Text = "ホームページ"
webLink.Url = url
webLink.Font = font1
webLink.Brush = PdfBrushes.get_Blue()
webLink.DrawTextWebLink(page.Canvas, PointF(x, y))
y = y + 28

# Eメールリンクの追加
label = "Eメールリンク: "
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
link = PdfTextWebLink()
link.Text = "お問い合わせ"
link.Url = "mailto:support@e-iceblue.com"
link.Font = font1
link.Brush = PdfBrushes.get_Blue()
link.DrawTextWebLink(page.Canvas, PointF(x, y))
y = y + 28

# 文書リンクを追加する
label = "文書リンク: "
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
text = "クリックしてファイルを開く"
location = PointF(x, y)
size = font1.MeasureString(text)
linkBounds = RectangleF(location, size)
fileLink = PdfFileLinkAnnotation(linkBounds, "C:\\Users\\Administrator\\Desktop\\report.xlsx")
fileLink.Border = PdfAnnotationBorder(0.0)
page.AnnotationsWidget.Add(fileLink)
page.Canvas.DrawString(text, font1, PdfBrushes.get_Blue(), x, y)

# PDFファイルを保存する
pdf.SaveToFile("PDFLinks.pdf")
pdf.Close()

生成されたファイル:
PDFLink.png

PythonでPDFからハイパーリンクを削除する

PDF文書に存在するすべてのハイパーリンクを一度に削除したい場合は、次の手順を参照してください:

  1. LoadFromFile()メソッドでPDF文書を読み込みます。
  2. ドキュメント内のページをループし、PdfPageBase.AnnotationsWidget プロパティを通して各ページの注釈を取得します。
  3. すべての注釈をループし、各注釈がハイパーリンクであるかどうかをチェックします。
  4. そうであれば、PdfAnnotationCollection.Remove() メソッドを使用して削除します。
  5. PdfDocument.SaveToFile() メソッドを使用してドキュメントを保存します。

Pythonコード:

from spire.pdf import *
from spire.pdf.common import *

# PDF文書を読み込む
pdf = PdfDocument()
pdf.LoadFromFile("PDFLinks.pdf")

# 文書内のすべてのページを反復処理する
for j in range(pdf.Pages.Count):
    # 各ページを取得する
    page = pdf.Pages.get_Item(j)
    # 各ページの注釈を取得する
    annotations = page.AnnotationsWidget
    # すべての注釈を反復処理する
    if annotations.Count > 0:
        i = annotations.Count - 1
        while i >=0:
            # 注釈を取得する
            annotation = annotations.get_Item(i)
            # 各注釈がハイパーリンクかどうかをチェックする
            if isinstance(annotation, PdfTextWebLinkAnnotationWidget):
                # ハイパーリンク注釈の削除
                annotations.Remove(annotation)
            i -= 1

# PDF文書を保存する
pdf.SaveToFile("RemovePDFLinks.pdf")
pdf.Close()

PDFページ内の指定されたハイパーリンクを削除するだけなら、以下のコードを参照できます:

# 最初のページの最初のハイパーリンクを削除する
page = pdf.Pages.get_Item(0)
page.AnnotationsWidget.RemoveAt(0)

生成されたドキュメントの赤いウォーターマークは、以下のリンクをクリックして、1ヶ月の無料ライセンスをリクエストすることで削除できます:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?