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_DECODESiê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ấyXmpPacketcủ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.valuetrực tiếp — nó đã chứa Pythoninthoặcfloatgốc mà bạn đã truyền vào hàm khởi tạo; không có phương pháp chuyển đổito_double()hoặcto_int(). - Ưu tiên các nhà máy
Colorcó tên (Color.red(),Color.Black(), v.v.) hơn các tuple tự tạor/g/b/acho các màu phổ biến — chúng dễ đọc hơn tại các vị trí gọi. - Khớp
EncodingTypebạn truyền vàoEncoding.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
PdfObjectRegistryvàPdfObjectIDnhư 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 quaDocumentvàPagethay 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ân | Khắc phục |
|---|---|---|
Các phép so sánh PdfNumber hoạt động không như mong đợi | So 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ề None | Sai prefix hoặc uri được truyền vào các bộ truy cập kiểu get_value | Xá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 đợi | Sử 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ày | get() đượ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ức | Mô tả |
|---|---|
PdfObjectID | Xác định một đối tượng PDF gián tiếp bằng số đối tượng và số thế hệ |
PdfObjectRegistry.register | Gán một PdfObjectID cho một đối tượng đang được tuần tự hoá |
PdfObjectRegistry.get | Giải quyết một đối tượng từ PdfObjectID đã đăng ký trước đó |
PdfTrailerable.get_dictionary | Tạo ra từ điển được ghi vào phần trailer của PDF |
PdfNumber.value | Giá trị số đã được bao bọc, đã là Python gốc int hoặc float |
PdfName | Bao 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 |
PdfNull | Biểu diễn đối tượng null của PDF |
Color | Giá 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.encode | Mã hoá văn bản sang bytes bằng một EncodingType |
EncodingType | Mã định danh mã hoá văn bản: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE |
FilterType | Mã đị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 |
XmpPacket | Gói dữ liệu siêu dữ liệu XMP trong bộ nhớ, được trả về bởi Document.xmp_metadata |
XmpField | Một giá trị thuộc tính XMP duy nhất |
XmpArray | Một giá trị mảng XMP có thứ tự |
XmpStruct | Một giá trị XMP có cấu trúc (rdf:parseType="Resource") |
XmpProperty | Một thuộc tính XMP mang các định tính riêng của nó |
XmpNamespaceProvider | Giải quyết các tiền tố không gian tên XMP tới và từ URI |