はじめに

PostScript(PS)と Encapsulated PostScript(EPS)は、印刷ワークフロー、レガシーパブリッシングシステム、グラフィックパイプラインで使用されるベクタードキュメント形式です。Python 用の Aspose.Page FOSS は、PsDocument を提供します――.ps.eps の両方のファイルを扱う単一クラスで、Python コードから直接 PDF やラスタ画像へエクスポートするメソッドを備えています。

このライブラリは Ghostscript のインストールも、Adobe ランタイムも、ネイティブなシステム依存も必要としません。Windows、Linux、macOS で動作します。pip でインストールし、Python 3.10+ 環境であればすぐに使用できます。


PS と EPS ファイルの読み込み

PsDocument は、ドキュメントを読み込むためのクラスメソッドを 2 つ公開しています。from_file() はファイルパスから読み込み、from_bytes() はストリームまたはアップロードからの生バイトを受け取ります。

from aspose.page.ps.document import PsDocument

# Load from file path
ps = PsDocument.from_file("document.ps")
eps = PsDocument.from_file("illustration.eps")

# Load from bytes (network stream, upload, etc.)
with open("document.ps", "rb") as f:
    data = f.read()
ps_from_bytes = PsDocument.from_bytes(data)

ドキュメントが EPS ファイルの場合、is_eps プロパティは True を返します。これは、PS と EPS の混在バッチを同一コードパスで処理する際に便利です。


PDF へのエクスポート

ロードされた PsDocument に対して to_pdf() を呼び出し、出力を bytes オブジェクトとして取得します。結果は有効な PDF バイトストリームで、ディスクに書き込んだり、データベースに保存したり、HTTP エンドポイントから返したりできます。

from pathlib import Path
from aspose.page.ps.document import PsDocument

ps = PsDocument.from_file("input.ps")
pdf_bytes = ps.to_pdf()
Path("output.pdf").write_bytes(pdf_bytes)

デフォルトの PDF エクスポートにはオプションオブジェクトは必要ありません。to_pdf() メソッドは、上級者向けの使用ケースのためにオプションの options パラメータを受け取ります。


ラスター画像へのエクスポート

PS または EPS ドキュメントをラスター画像にレンダリングするには、ImageSaveOptions インスタンスを to_image() に渡します。format"png" または "jpeg" に設定し、dpi で出力解像度を制御します。メソッドはエンコードされた画像を含む bytes オブジェクトを返します。

from pathlib import Path
from aspose.page.ps.document import PsDocument
from aspose.page.ps.output import ImageSaveOptions

eps = PsDocument.from_file("illustration.eps")
opts = ImageSaveOptions(format="png", dpi=150)
png_bytes = eps.to_image(opts)
Path("output.png").write_bytes(png_bytes)

JPEG 出力の場合は、format="jpeg" を変更します。dpi プロパティは設定されていない場合、デフォルトで 96 になります。


EPS メタデータの読み取り

PsDocument は、ファイルに DSC コメントが存在する場合に DscMetadata インスタンスを返す dsc プロパティを公開します。DscMetadata は、EPS ヘッダーから解析されたバウンディングボックス座標、ページサイズ、向き、タイトル、作成者フィールドへの構造化されたアクセスを提供します。

from aspose.page.ps.document import PsDocument

eps = PsDocument.from_file("illustration.eps")
dsc = eps.dsc
if dsc is not None:
    print("Title:", dsc.title)
    print("Bounding box:", dsc.bounding_box)
    print("HiRes bounding box:", dsc.hires_bounding_box)

バッチ変換

すべての変換メソッドは bytes を返し、ファイルパスまたは生バイトを入力として受け取るため、バッチ処理は標準の Python ループまたは concurrent.futures で直接実装できます。

from pathlib import Path
from aspose.page.ps.document import PsDocument

input_dir = Path("ps-files")
output_dir = Path("pdf-output")
output_dir.mkdir(exist_ok=True)

for ps_file in input_dir.glob("*.ps"):
    doc = PsDocument.from_file(str(ps_file))
    out_path = output_dir / ps_file.with_suffix(".pdf").name
    out_path.write_bytes(doc.to_pdf())
    print("Converted:", ps_file.name)

同じパターンは、グロブパターンを "*.eps" に変更することで EPS ファイルにも適用されます。


開始手順

関連リソース