データプリミティブとXMPメタデータ
データプリミティブとXMPメタデータ
Aspose.PDF FOSS for Python は、aspose_pdf.engine.dataで定義された小さなプリミティブデータ型の集合の上に、その上位レベルのAPI—Document、Page、およびアノテーションとフォームクラス—を構築します。これらの多くを直接構築することはほとんどありませんが、プロパティ型や戻り値として常に現れます。ページのリソース辞書はPdfName値をキーにし、色はColorインスタンスであり、Document.xmp_metadataはXmpPacketを返します。本ガイドでは、オブジェクトアイデンティティのプリミティブ、プリミティブ値ラッパー、Color、テキストエンコーディング列挙型、そしてXMPメタデータモデルを紹介します。
オブジェクトアイデンティティとオブジェクトレジストリ
PdfObjectIDは、PDFファイル内の間接オブジェクトをobject_numberとgeneration_numberで識別します。PdfObjectRegistryはオブジェクトがシリアライズされる際にこれらの識別子を割り当て、追跡し、PdfTrailerableはPDFトレーラに書き込まれる辞書を生成できるオブジェクトの共通インターフェースです。
import aspose_pdf
from aspose_pdf.engine.data import PdfObjectRegistry
registry = PdfObjectRegistry()
# register() assigns a PdfObjectID to a serializable object
object_id = registry.register(some_pdf_object)
print(object_id.object_number, object_id.generation_number)
# get() resolves an object back from its PdfObjectID
resolved = registry.get(object_id)プリミティブ値ラッパー
PdfNumberとPdfNameは、生のPDF値を型付けされたPythonオブジェクトでラップします。PdfNumberは数値的なvalueをネイティブなPythonintまたはfloatとして保持します。PdfNameはname文字列を保持し、低レベルオブジェクトモデル全体で辞書キーに使用される型です――例えば、ページのリソース辞書のFontおよびResourcesキーです。PdfNullはPDFのnullオブジェクトを表します。
import aspose_pdf
from aspose_pdf.engine.data.number import PdfNumber
from aspose_pdf.engine.data.types import PdfName
number = PdfNumber(3.14)
raw_value = number.value # already the native int/float you passed in
resources_key = PdfName("Resources")
font_key = PdfName("Font")カラー値
Color は r、g、b、a の float プロパティを持つ RGBA カラーを表します。2 引数+アルファのコンストラクタに加えて、完全な名前付きカラー工場セットを提供します — 小文字の (aqua(), blue(), azure(), red(), green(), yellow(), black(), white(), gray()) と PascalCase エイリアス (Aqua(), Blue(), Azure(), Red(), Green(), Yellow(), Black(), White(), Gray()) が用意されています。
import aspose_pdf
from aspose_pdf.engine.data.types import Color
custom = Color(r=0.2, g=0.4, b=0.8, a=1.0)
# Named factories return ready-made Color instances
highlight = Color.yellow()
border = Color.Black()テキストエンコーディングとストリームフィルタ
EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) はテキストエンコーディングを識別し、Encoding は一致するエンコーディング定数 (UTF8, UTF16, LATIN1, WIN_ANSI) と、エンコードされた bytes を返す encode(text, encoding_type) メソッドを提供します。FilterType (NONE, FLATE_DECODE, LZW_DECODE, DCT_DECODE, JPX_DECODE, CCITT_FAX_DECODE, JBIG2_DECODE) は圧縮された PDF コンテンツに適用されるストリームフィルタを識別します。
import aspose_pdf
from aspose_pdf.engine.data import Encoding, EncodingType, FilterType
encoded = Encoding.encode("Hello, world", EncodingType.WIN_ANSI)
# FilterType values identify how a content or image stream is compressed
current_filter = FilterType.FLATE_DECODEXMP メタデータ
XmpPacket はドキュメントの XMP メタデータパケットのインメモリモデルです — Document.xmp_metadata が返す型です。fields の順序付きコレクション(各要素は XmpField、XmpArray、または XmpProperty)を保持し、XmpNamespaceProvider を通じて名前空間プレフィックスを解決します。型付き getter と setter(get_value スタイルのアクセサである get_bool、get_int、get_real、get_date、get_localized_text、get_array とそれらの set_* 対応物)は、名前空間プレフィックスまたは URI とプロパティ名で個別のプロパティを読み書きします。
import aspose_pdf
doc = aspose_pdf.Document()
doc.load_from("input.pdf")
xmp = doc.xmp_metadata # XmpPacket
title = xmp.get_localized_text("dc", "title", lang="x-default")
xmp.set_value("dc", "creator", "Jane Doe")
serialized = xmp.serialize()XmpStruct は独自の get(name) ルックアップを持つ構造化された (rdf:parseType="Resource") 値をモデル化し、XmpArray は add(item) と remove(item) を備えた順序付き配列をモデル化し、XmpProperty は独自の add_qualifier/remove_qualifier 修飾子を持つプロパティです。これら四つはすべて、個々の値のための同じ XmpField ビルディングブロックを共有します。
ヒントとベストプラクティス
- 最初から作成するのではなく、
Document.xmp_metadataを読み取ってドキュメントのXmpPacketを取得してください — それはロードされたファイルからすでに設定されています。 PdfNumber.valueを直接読み取ります — コンストラクタに渡したネイティブな Pythonintまたはfloatがすでに保持されています;to_double()やto_int()の変換メソッドはありません。- 一般的な色には、手作りの
r/g/b/aタプルよりも、名前付きのColorファクトリ(Color.red()、Color.Black()など)を使用する方が望ましいです — 呼び出し側での可読性が向上します。 - 渡す
EncodingTypeをEncoding.encode()と、宛先(フォント、ストリーム、またはビューア)が実際に期待するエンコーディングと合わせてください; PDF のテキストエンコーディングの不一致は、文字化けの一般的な原因です。 PdfObjectRegistryとPdfObjectIDを低レベルのエンジン向け型として扱ってください — 多くのアプリケーションコードはオブジェクトを直接登録するのではなく、DocumentとPageを通じて文書内容を読み取ります。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
PdfNumber の比較が予期せず動作する | ラッパーを数値ではなくラッパー自体と比較している | 比較や演算を行う前に .value を読む |
XMP プロパティ検索は None を返す | 間違った prefix または uri が get_value スタイルのアクセサに渡された | 読み込む前に、XmpNamespaceProvider.get_uri() / get_prefix() で名前空間プレフィックスを確認してください |
Encoding.encode() の後でエンコードされたテキストが乱れたように見える | EncodingType が宛先の期待するものと一致しません | 対象のフォントまたはビューアに一致する EncodingType の値(WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE)を使用してください |
カスタム PdfObjectRegistry オブジェクトは後で解決されません | get() が、そのレジストリインスタンスで一度も register()-ed されていない PdfObjectID と共に呼び出されました | 解決する前に、同じ PdfObjectRegistry インスタンス上ですべてのオブジェクトを登録してください |
FAQ
自分で PdfObjectID または PdfObjectRegistry を構築する必要がありますか?
ほとんどの場合必要ありません。これらはエンジンのシリアライズ処理を裏で支えています; 低レベルのオブジェクトモデルを扱う場合を除き、ほとんどのアプリケーションコードは直接インスタンス化しません。
XmpField、XmpArray、XmpStruct、およびXmpPropertyの違いは何ですか?
XmpFieldは単一のスカラー値です。XmpArrayは値の順序付きリストで、XmpStructは構造化された(rdf:parseType="Resource")フィールドのグループで、XmpPropertyは独自の修飾子も持つ値です。
ドキュメントのXMPメタデータはどうやって取得しますか?
ロードされたDocumentのxmp_metadataプロパティを読み取ります — それは、その場でクエリや更新が可能なXmpPacketを返します。
小文字とPascalCaseのColorファクトリは異なる色ですか?
いいえ — Color.red()とColor.Red()は同じ色を返すエイリアスであり、便宜上両方の表記が提供されています。
API Reference の概要
| クラス / メソッド | 説明 |
|---|---|
PdfObjectID | オブジェクト番号と世代番号で間接PDFオブジェクトを識別します |
PdfObjectRegistry.register | シリアライズ中のオブジェクトにPdfObjectIDを割り当てます |
PdfObjectRegistry.get | 以前に登録されたPdfObjectIDからオブジェクトを解決します |
PdfTrailerable.get_dictionary | PDFトレーラに書き込まれる辞書を生成します |
PdfNumber.value | ラップされた数値は、すでにネイティブな Python int または float です。 |
PdfName | PDF の名前値をラップし、低レベルオブジェクトモデルの辞書キーとして使用されます。 |
PdfNull | PDF の null オブジェクトを表します |
Color | RGBA カラー値、名前付きファクトリ (red, blue, Black など) と共に |
Encoding.encode | テキストをbytesにエンコードし、EncodingTypeを使用します |
EncodingType | テキストエンコーディング識別子: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE |
FilterType | コンテンツストリームと画像ストリームで使用されるストリーム圧縮フィルタ識別子 |
XmpPacket | メモリ内のXMPメタデータパケットで、Document.xmp_metadataによって返されます |
XmpField | 単一の XMP プロパティ値 |
XmpArray | 順序付けられた XMP 配列値 |
XmpStruct | 構造化された (rdf:parseType="Resource") XMP 値 |
XmpProperty | 独自の修飾子を持つ XMP プロパティ |
XmpNamespaceProvider | XMP 名前空間プレフィックスを URI に、または URI から解決します |