SVG ファイルは、拡大縮小や調整が容易であることから、Web グラフィックスやベクター形式のイラストによく利用されます。一方 PDF は、さまざまなデバイスや OS で幅広くサポートされている汎用性の高い形式です。SVG を PDF に変換することで、受け取る側が特別なソフトウェアを用意したり、ブラウザの互換性を気にする必要なく、グラフィックスやイラストを簡単に共有できます。本記事では、Python で SVG ファイルを PDF 形式に変換する方法を Spire.PDF for Python を用いて解説します。
目次
Spire.PDF for Python のインストール
この操作には Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。
pip install Spire.PDF
Python で SVG を PDF に変換する
Spire.PDF for Python では、PdfDocument.LoadFromSvg() メソッドを使用して SVG ファイルを読み込み、PdfDocument.SaveToFile() メソッドで PDF として保存できます。手順は以下の通りです。
- PdfDocument クラスのオブジェクトを作成する
- PdfDocument.LoadFromSvg() メソッドで SVG ファイルを読み込む
- PdfDocument.SaveToFile() メソッドで PDF ファイルとして保存する
from spire.pdf import PdfDocument, FileFormat
# PdfDocument オブジェクトを作成
doc = PdfDocument()
# SVG ファイルを読み込む
doc.LoadFromSvg("Sample.svg")
# SVG を PDF 形式に保存
doc.SaveToFile("output/ConvertSvgToPdf.pdf", FileFormat.PDF)
# PdfDocument オブジェクトを閉じる
doc.Close()
Python で SVG を PDF に追加する
Spire.PDF for Python では、SVG を PDF に直接変換するだけでなく、既存の PDF に任意の位置へ追加することも可能です。手順は以下の通りです。
- PdfDocument クラスのオブジェクトを作成し、PdfDocument.LoadFromSvg() で SVG ファイルを読み込む
- 読み込んだ SVG の内容を基に Pages[].CreateTemplate() メソッドでテンプレートを作成する
- テンプレートの幅と高さを取得する
- 別の PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() で PDF ファイルを読み込む
- Pages[].Canvas.DrawTemplate() メソッドで、テンプレートを任意のサイズで指定位置に描画する
- PdfDocument.SaveToFile() メソッドで保存する
from spire.pdf import PdfDocument, PointF, FileFormat
# PdfDocument オブジェクトを作成
doc1 = PdfDocument()
# SVG ファイルを読み込む
doc1.LoadFromSvg("Sample.svg")
# SVG 内容を基にテンプレートを作成
template = doc1.Pages.get_Item(0).CreateTemplate()
# 別の PdfDocument オブジェクトを作成
doc2 = PdfDocument()
page = doc2.Pages.Add()
# 読み込んだ PDF の 1 ページ目に、テンプレートを指定位置に描画
page.Canvas.DrawTemplate(template, PointF(10.0, 100.0))
# 結果を保存
doc2.SaveToFile("output/AddSvgToPdf.pdf", FileFormat.PDF)
# PdfDocument オブジェクトを閉じる
doc2.Close()
doc1.Close()
もし PDF に他の種類の画像を挿入したい場合は、Python で PDF に画像を追加・削除・置換する方法をご参照ください。
一時ライセンスの申請
生成した文書から評価用の透かしを削除したい場合や、機能制限を解除したい場合は、30 日間有効の試用ライセンスを申請してください。