Các Kiểu Dữ Liệu Cơ Bản và Siêu Dữ Liệu XMP

Các Kiểu Dữ Liệu Cơ Bản và Siêu Dữ Liệu XMP

Các kiểu dữ liệu nguyên thủy và siêu dữ liệu XMP

Aspose.PDF FOSS cho Python xây dựng API cấp cao hơn — Document, Page, và các lớp chú thích và biểu mẫu — dựa trên một tập hợp nhỏ các kiểu dữ liệu nguyên thủy được định nghĩa trong aspose_pdf.engine.data. Bạn sẽ hiếm khi tự tạo trực tiếp hầu hết chúng, nhưng chúng luôn xuất hiện như các kiểu thuộc tính và giá trị trả về: từ điển tài nguyên của một trang được đánh dấu bằng các giá trị PdfName, màu sắc là các thực thể Color, và Document.xmp_metadata trả về một XmpPacket. Hướng dẫn này giới thiệu các primitive nhận dạng đối tượng, các wrapper giá trị primitive, Color, các enum mã hoá văn bản, và mô hình siêu dữ liệu XMP.


Nhận dạng đối tượng và đăng ký đối tượng

PdfObjectID xác định một đối tượng gián tiếp trong tệp PDF bằng object_number và generation_number của nó. PdfObjectRegistry gán và theo dõi các định danh này khi các đối tượng được tuần tự hoá, và PdfTrailerable là hợp đồng chung cho các đối tượng có thể tạo ra từ điển được ghi vào trailer của 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)

Các wrapper giá trị primitive

PdfNumber và PdfName bao bọc các giá trị PDF thô trong các đối tượng Python có kiểu. PdfNumber giữ value số học của nó dưới dạng Python int hoặc float gốc; PdfName giữ một chuỗi name và là kiểu được sử dụng cho các khóa từ điển trong toàn bộ mô hình đối tượng cấp thấp — ví dụ, các khóa Font và Resources trong từ điển tài nguyên của một trang. PdfNull đại diện cho đối tượng null của PDF.

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")

Giá trị màu

Color đại diện cho màu RGBA với các thuộc tính float r, g, b và a. Ngoài trình khởi tạo hai đối số cộng alpha, nó cung cấp một bộ đầy đủ các nhà máy màu có tên — cả dạng chữ thường (aqua(), blue(), azure(), red(), green(), yellow(), black(), white(), gray()) và các bí danh 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()

Mã hoá văn bản và bộ lọc luồng

EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) xác định một mã hoá văn bản, và Encoding cung cấp các hằng số mã hoá tương ứng (UTF8, UTF16, LATIN1, WIN_ANSI) cùng với một phương thức encode(text, encoding_type) trả về bytes đã mã hoá. FilterType (NONE, FLATE_DECODE, LZW_DECODE, DCT_DECODE, JPX_DECODE, CCITT_FAX_DECODE, JBIG2_DECODE) xác định bộ lọc luồng được áp dụng cho nội dung PDF đã nén.

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_DECODE

Siêu dữ liệu XMP

XmpPacket là mô hình trong bộ nhớ cho gói siêu dữ liệu XMP của tài liệu — nó là kiểu được Document.xmp_metadata trả về. Nó chứa một tập hợp có thứ tự của fields (mỗi một XmpField, XmpArray, hoặc XmpProperty) và giải quyết các tiền tố không gian tên thông qua một XmpNamespaceProvider. Các getter và setter có kiểu (get_value) — các truy cập kiểu get_bool, get_int, get_real, get_date, get_localized_text, get_array, và các phiên bản set_* của chúng — đọc và ghi các thuộc tính riêng lẻ theo tiền tố không gian tên hoặc URI và tên thuộc tính.

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 mô hình một giá trị có cấu trúc (rdf:parseType="Resource") với bảng tra cứu get(name) riêng, XmpArray mô hình một mảng có thứ tự với add(item) và remove(item), và XmpProperty là một thuộc tính mang các định tính add_qualifier/remove_qualifier riêng của nó. Bốn thành phần này đều chia sẻ cùng một khối xây dựng XmpField cho các giá trị riêng lẻ.


Mẹo và Thực tiễn Tốt nhất

  • Đọc Document.xmp_metadata để lấy XmpPacket của tài liệu thay vì tự tạo từ đầu — nó đã được điền sẵn từ tệp đã tải.
  • Đọc PdfNumber.value trực tiếp — nó đã chứa Python int hoặc float gốc mà bạn đã truyền vào hàm khởi tạo; không có phương pháp chuyển đổi to_double() hoặc to_int().
  • Ưu tiên các nhà máy Color có tên (Color.red(), Color.Black(), v.v.) hơn các tuple tự tạo r/g/b/a cho các màu phổ biến — chúng dễ đọc hơn tại các vị trí gọi.
  • Khớp EncodingType bạn truyền vào Encoding.encode() với bộ mã mà đích (phông chữ, luồng hoặc trình xem) thực sự yêu cầu; sự không khớp mã hóa văn bản PDF là nguyên nhân phổ biến gây ra đầu ra rối rắm.
  • Xem PdfObjectRegistry và PdfObjectID như các kiểu cấp thấp, hướng vào động cơ — hầu hết mã ứng dụng đọc nội dung tài liệu thông qua Document và Page thay vì đăng ký các đối tượng trực tiếp.

Các vấn đề thường gặp

Vấn đềNguyên nhânKhắc phục
Các phép so sánh PdfNumber hoạt động không như mong đợiSo sánh wrapper thay vì giá trị số của nóĐọc .value trước khi so sánh hoặc thực hiện phép tính
Tra cứu thuộc tính XMP trả về NoneSai prefix hoặc uri được truyền vào các bộ truy cập kiểu get_valueXác nhận tiền tố không gian tên qua XmpNamespaceProvider.get_uri() / get_prefix() trước khi đọc
Văn bản đã mã hoá trông bị rối rắm sau Encoding.encode()EncodingType không khớp với những gì đích mong đợiSử dụng giá trị EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) phù hợp với phông chữ hoặc trình xem mục tiêu
Các đối tượng PdfObjectRegistry tùy chỉnh không được giải quyết sau nàyget() được gọi với một PdfObjectID mà chưa bao giờ được register()-ed trên thể hiện registry đóĐăng ký mọi đối tượng trên cùng một thể hiện PdfObjectRegistry trước khi giải quyết nó

FAQ

Tôi có cần tự tạo PdfObjectID hoặc PdfObjectRegistry không?

Hiếm khi. Chúng hỗ trợ quá trình tuần tự hoá của động cơ; hầu hết mã ứng dụng không bao giờ khởi tạo chúng trực tiếp trừ khi làm việc với mô hình đối tượng cấp thấp.

Sự khác nhau giữa XmpField, XmpArray, XmpStruct và XmpProperty là gì?

XmpField là một giá trị vô hướng đơn. XmpArray là một danh sách có thứ tự các giá trị, XmpStruct là một nhóm có cấu trúc (rdf:parseType="Resource") của các trường, và XmpProperty là một giá trị cũng mang theo các tiêu chí riêng của nó.

Làm sao tôi có thể lấy siêu dữ liệu XMP của tài liệu?

Đọc thuộc tính xmp_metadata trên một Document đã tải — nó trả về một XmpPacket mà bạn có thể truy vấn và cập nhật ngay tại chỗ.

Các nhà máy màu viết thường và PascalCase có phải là các màu khác nhau không?

Không — Color.red() và Color.Red() là các bí danh trả về cùng một màu; cả hai cách viết đều được cung cấp để tiện lợi.


API Reference Tóm tắt

Lớp / Phương thứcMô tả
PdfObjectIDXác định một đối tượng PDF gián tiếp bằng số đối tượng và số thế hệ
PdfObjectRegistry.registerGán một PdfObjectID cho một đối tượng đang được tuần tự hoá
PdfObjectRegistry.getGiải quyết một đối tượng từ PdfObjectID đã đăng ký trước đó
PdfTrailerable.get_dictionaryTạo ra từ điển được ghi vào phần trailer của PDF
PdfNumber.valueGiá trị số đã được bao bọc, đã là Python gốc int hoặc float
PdfNameBao bọc một giá trị tên PDF, được sử dụng làm khóa từ điển trong mô hình đối tượng cấp thấp
PdfNullBiểu diễn đối tượng null của PDF
ColorGiá trị màu RGBA với các nhà máy đặt tên (red, blue, Black, và các giá trị khác)
Encoding.encodeMã hoá văn bản sang bytes bằng một EncodingType
EncodingTypeMã định danh mã hoá văn bản: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE
FilterTypeMã định danh bộ lọc nén luồng được sử dụng cho các luồng nội dung và hình ảnh
XmpPacketGói dữ liệu siêu dữ liệu XMP trong bộ nhớ, được trả về bởi Document.xmp_metadata
XmpFieldMột giá trị thuộc tính XMP duy nhất
XmpArrayMột giá trị mảng XMP có thứ tự
XmpStructMột giá trị XMP có cấu trúc (rdf:parseType="Resource")
XmpPropertyMột thuộc tính XMP mang các định tính riêng của nó
XmpNamespaceProviderGiải quyết các tiền tố không gian tên XMP tới và từ URI

Xem thêm

 Tiếng Việt