PythonでSVGファイルをPDFドキュメントに挿入する方法

SVG（スケーラブルベクターグラフィックス）ファイルをPDF（ポータブルドキュメントフォーマット）に挿入することで、SVG画像のベクター特性を保持し、どの解像度でも鮮明さを保つことができます。また、PDF形式が持つクロスプラットフォームのドキュメント共有の利点を活用でき、技術文書、マニュアル、レポートなどの内容をより豊かで多様にし、容易に配布することが可能です。Pythonを使用すれば、SVGファイルをPDFに簡単に挿入できます。この記事では、**Pythonを使用してSVGファイルをPDFドキュメントに挿入する方法**を紹介します。

- **[PythonでSVGをPDFページに挿入する方法](#pythonでsvgをpdfページに挿入する方法)**
- **[PythonでSVGを添付ファイルとしてPDFに埋め込む方法](#pythonでsvgを添付ファイルとしてpdfに埋め込む方法)**
- **[PythonでSVGを添付ファイル注釈としてPDFに埋め込む方法](#pythonでsvgを添付ファイル注釈としてpdfに埋め込む方法)**

この記事で紹介する方法は、[Spire.PDF for Python](https://jp.e-iceblue.com/download/spire-pdf-for-python.html)を使用します。PyPIからインストールできます：`pip install Spire.PDF`。

[無料のライセンスを申請する](https://www.e-iceblue.com/TemLicense.html)

## PythonでSVGをPDFページに挿入する方法
まず、`PdfDocument.LoadFromFile()`メソッドを使用してSVGファイルの内容を読み込み、次に`PdfPageBase.Canvas.Draw()`メソッドを使ってPDFページ上に描画することで、SVGファイルの内容をPDFページに挿入することができます。以下に手順を示します：
1. 必要なモジュールをインポートします。
2. `PdfDocument`オブジェクトを作成し、`PdfDocument.LoadFromFile()`メソッドを使用してPDFファイルを読み込みます。
3. もう一つの`PdfDocument`オブジェクトを作成し、`PdfDocument.LoadFromFile()`メソッドを使用してSVGファイルを読み込みます。
4. `PdfDocument.Pages.get_Item(0).CreateTemplate()`メソッドでSVGファイルの内容をテンプレートとして作成します。
5. `PdfDocument.Pages.get_Item().Canvas.DrawTemplate()`メソッドを使って、SVGファイルの内容をPDFページに描画します。
6. `PdfDocument.SaveToFile()`メソッドでドキュメントを保存します。
7. リソースを解放します。

**コード例**
```python
from spire.pdf import PdfDocument, PointF, SizeF, FileFormat

# PdfDocumentインスタンスを作成し、PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# 別のPdfDocumentインスタンスを作成し、SVGファイルを読み込む
svg = PdfDocument()
svg.LoadFromFile("グラフ.svg", FileFormat.SVG)

# SVGファイルのテンプレートを作成する
svgTemplate = svg.Pages.get_Item(0).CreateTemplate()

# 既存のPDFファイルのページ上にテンプレートを描画する
pdf.Pages.get_Item(0).Canvas.DrawTemplate(svgTemplate, PointF(60.0, 420.0), SizeF(490.0, 230.0))

# PDFファイルを保存する
pdf.SaveToFile("output/InsertSVGToPDF.pdf")
pdf.Dispose()
```

**結果**
![PythonでSVGをPDFページに挿入](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7f6a55dd-211f-a2bd-b508-41a34700fd89.png)

## PythonでSVGを添付ファイルとしてPDFに埋め込む方法
SVGファイルをPDFドキュメントに直接添付ファイルとして埋め込むことも可能で、ドキュメントを閲覧するときに添付ファイルをクリックすることでSVGファイルの内容を表示できます。ただし、直接埋め込まれた添付ファイルはPDFビューアーの添付ファイルバーにのみ表示されます。以下に手順を示します：
1. 必要なモジュールをインポートします。
2. `PdfDocument`オブジェクトを作成し、`PdfDocument.LoadFromFile()`メソッドを使用してPDFドキュメントを読み込みます。
3. `PdfAttachment`オブジェクトを作成し、添付ファイルを作成します。
4. `Stream`オブジェクトを作成し、SVGファイルをストリームとして読み込みます。
5. `Stream.ToArray()`メソッドを使ってSVGファイルのストリームをバイト配列に変換し、`PdfAttachment.Data`プロパティを通じてそれを添付ファイルのデータとして設定します。
6. `PdfAttachment.Description`および`PdfAttachment.MimeType`プロパティを使って添付ファイルの説明とMIMEタイプを設定します。
7. `PdfDocument.Attachments.Add()`メソッドで添付ファイルをPDFドキュメントに追加します。
8. `PdfDocument.SaveToFile()`メソッドでドキュメントを保存します。
9. リソースを解放します。

**コード例**
```python
from spire.pdf import PdfDocument, Stream, PdfAttachment

# PdfDocumentインスタンスを作成し、PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# PdfAttachmentインスタンスを作成する
svgAttachment = PdfAttachment("グラフ.svg")

# SVGファイルをストリームとして読み込む
svgStream = Stream("グラフ.svg")

# SVGストリームを添付データとして設定する
svgAttachment.Data = svgStream.ToArray()

# 添付ファイルの説明とMIMEタイプを設定する
svgAttachment.Description = "これはSVGファイルです"
svgAttachment.MimeType = "image/svg+xml"

# 添付ファイルをドキュメントに追加する
pdf.Attachments.Add(svgAttachment)

# ドキュメントを保存する
pdf.SaveToFile("output/InsertSVGAttachmentToPDF.pdf")
pdf.Dispose()
```

**結果**
![PythonでSVGを添付ファイルとしてPDFに埋め込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ec3a0dd1-ba90-bb3d-902d-d9d314e86fb2.png)

## PythonでSVGを添付ファイル注釈としてPDFに埋め込む方法
SVGファイルをPDFドキュメントに直接添付ファイルとして埋め込むだけでなく、SVGファイルを注釈としてPDFドキュメントに埋め込むこともできます。これにより、ドキュメントページ上に注釈情報が表示されます。注釈として埋め込まれた添付ファイルはページ上でグラフィックとして表示され、クリックすることで直接閲覧できます。以下に手順を示します：
1. 必要なモジュールをインポートします。
2. `PdfDocument`オブジェクトを作成し、`PdfDocument.LoadFromFile()`メソッドを使用してPDFドキュメントを読み込みます。
3. SVGファイルを使用して、`PdfAttachmentAnnotation`オブジェクトを作成し、添付ファイル注釈を作成します。
4. `PdfAttachmentAnnotation`クラスのプロパティを使って注釈の形式を設定します。
5. `PdfPageBase.AnnotationsWidget.Add()`メソッドを使用して、添付ファイル注釈をPDFページに追加します。
6. `PdfDocument.SaveToFile()`メソッドでPDFドキュメントを保存します。
7. リソースを解放します。

**コード例**
```python
from spire.pdf import PdfDocument, PdfAttachmentAnnotation, RectangleF, Color, PdfAnnotationFlags, PdfAttachmentIcon, \
    PdfRGBColor

# PdfDocumentインスタンスを作成し、PDFファイルをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# PdfAttachmentAnnotationインスタンスを作成します
rect = RectangleF.FromLTRB(90.0, 420.0, 120.0, 450.0)
svgAnnotation = PdfAttachmentAnnotation(rect, "グラフ.svg")

# アノテーションのプロパティを設定します
svgAnnotation.Color = PdfRGBColor(Color.get_Blue())
svgAnnotation.Flags = PdfAnnotationFlags.NoZoom
svgAnnotation.Icon = PdfAttachmentIcon.Graph
svgAnnotation.Text = "SVGチャート"

# アノテーションを最初のページに追加します
pdf.Pages.get_Item(0).AnnotationsWidget.Add(svgAnnotation)

# ドキュメントを保存します
pdf.SaveToFile("output/InsertSVGAnnotationToPDF.pdf")
pdf.Dispose()
```

**結果**
![PythonでSVGを添付ファイル注釈としてPDFに埋め込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/c0a2b789-a215-85ef-6bca-1925ad63177b.png)

この記事では、Pythonを使用してSVGファイルをPDFドキュメントに挿入する方法を紹介しました。PDFページにSVGファイルの内容を直接挿入する方法や、SVGファイルを添付ファイルとしてPDFに埋め込む方法などを説明しました。

さらにPDFドキュメントの処理方法については、[Spire.PDF for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html)をご覧ください。