Định dạng tệp PDF được giải thích: Cấu trúc, Lớp và Tiêu chuẩn
Thực sự có gì bên trong một tệp PDF? Một sơ đồ có nhãn và thuật ngữ bao gồm bốn phần vật lý (header, body, xref, trailer), sáu lớp nội dung (văn bản, hình ảnh, phông chữ, chú thích, vector, chữ ký), siêu dữ liệu và các tiêu chuẩn ISO (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) được xây dựng trên đó.
Một tệp PDF không phải là một thứ duy nhất. Nó là một vùng chứa nhị phân với cấu trúc cụ thể trên đĩa, một tập hợp các lớp nội dung xếp chồng lên nhau bên trong vùng chứa đó và một họ các tiêu chuẩn ISO được xây dựng trên đặc tả cơ bản. Mở một tệp trong trình soạn thảo mã hex và cấu trúc sẽ hiển thị dưới dạng văn bản thuần túy trong vài dòng đầu tiên. Mở một tệp trong trình xem và các lớp sẽ hiển thị cùng nhau như một trang duy nhất.
Hướng dẫn này là một tài liệu tham khảo có nhãn: cấu trúc tệp vật lý, các lớp nội dung mà một body chứa, siêu dữ liệu bao quanh mọi thứ và các tiêu chuẩn (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) giới hạn nó cho các trường hợp sử dụng cụ thể.

Muốn sử dụng sơ đồ này trên blog của bạn? Sao chép mã nhúng này:
Bốn Phần Vật Lý
Mọi tệp PDF trên đĩa đều có cùng cấu trúc bốn phần, theo thứ tự này:
1. Header
Dòng đầu tiên của tệp. Luôn bắt đầu bằng %PDF- theo sau là số phiên bản:
%PDF-1.7Các phiên bản dao động từ 1.0 (phát hành năm 1993) đến 2.0 (phát hành năm 2017, hiện tại). Header theo sau là một dòng chú thích với các byte nhị phân để báo cho FTP và các công cụ truyền tải khác biết đây là tệp nhị phân.
2. Body - Indirect Objects
Phần lớn của tệp. Mỗi trang, phông chữ, hình ảnh, chú thích và trường biểu mẫu là một đối tượng gián tiếp được đánh số:
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Type /Page /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobjMỗi đối tượng có một ID (số trước 0 obj), một số thế hệ (0, được sử dụng cho các cập nhật tăng dần) và một tải trọng giữa << và >> cho các từ điển hoặc stream và endstream cho các luồng nhị phân (dữ liệu hình ảnh, dữ liệu phông chữ, nội dung nén).
Các đối tượng tham chiếu lẫn nhau bằng cú pháp <id> <gen> R (ví dụ: 3 0 R có nghĩa là "đối tượng 3, thế hệ 0"). Đây là cách một trang tham chiếu đến phông chữ mà nó sử dụng, hoặc cách một catalog tham chiếu đến gốc của cây trang.
3. Bảng Tham Chiếu Chéo (xref)
Một bảng tra cứu vị trí byte. Đối với mỗi đối tượng trong body, xref ghi lại vị trí byte tuyệt đối của nó trong tệp:
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nĐây là điều làm cho tệp PDF có thể truy cập ngẫu nhiên. Một trình xem có thể đọc xref, nhảy thẳng đến vị trí byte của đối tượng 3 và hiển thị trang đó mà không cần phân tích phần còn lại của tệp. Đó là lý do tại sao các tệp PDF của một chương duy nhất mở ngay lập tức ngay cả khi tệp nguồn có 500 trang.
4. Trailer
Phần cuối cùng. Nó cho trình phân tích cú pháp biết nơi tìm bảng xref và đối tượng nào là gốc:
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFGiá trị startxref là vị trí byte của bảng xref. Dấu %%EOF là điểm kết thúc thực tế của tệp. Trailer là thứ làm cho các bản cập nhật tăng dần có thể thực hiện được: thêm một xref + trailer mới ở cuối cho phép bạn thêm đối tượng mà không cần ghi lại toàn bộ tệp.
Sáu Lớp Nội Dung
Bên trong body, nội dung được lưu trữ trên sáu loại lớp. Mỗi trang PDF được hiển thị là sự kết hợp của các lớp này:
1. Văn Bản
Các lệnh vị trí ký tự và tham chiếu phông chữ, không phải chuỗi văn bản. Tệp PDF lưu trữ các chỉ dẫn như "vẽ ký tự 42 từ phông chữ F3 tại vị trí (120, 540)" thay vì "vẽ chữ A ở đây." Đây là lý do tại sao văn bản có thể chọn và tìm kiếm được: trình xem ánh xạ ngược ID ký tự sang điểm mã Unicode thông qua ánh xạ ToUnicode (hoặc CMap cho phông chữ CJK).
Khi văn bản thiếu ánh xạ ToUnicode, bạn gặp phải vấn đề kinh điển "tệp PDF có văn bản có thể chọn nhưng sao chép ra lại bị lỗi". Văn bản hiển thị được, nhưng ánh xạ ký tự sang Unicode bị hỏng hoặc thiếu.
2. Hình Ảnh
Được lưu trữ dưới dạng các luồng nhúng trong một trong nhiều định dạng:
- JPEG (bộ lọc DCTDecode): ảnh chụp, phổ biến nhất
- JPEG2000 (JPXDecode): nén cao hơn, ít phổ biến hơn
- Tương đương PNG (FlateDecode + Predictor): ảnh chụp màn hình, đồ họa đường nét
- CCITT Group 4 (CCITTFaxDecode): văn bản quét đen trắng, được sử dụng trong các bản quét lưu trữ
- JBIG2 (JBIG2Decode): hình ảnh nhị phân, phổ biến trong các tài liệu OCR
Hình ảnh có thể được giảm mẫu, nén lại hoặc thay thế mà không ảnh hưởng đến nội dung khác.
3. Phông Chữ
Được nhúng dưới dạng các chương trình phông chữ đầy đủ, tập con (chỉ bao gồm các ký tự được sử dụng), hoặc được tham chiếu theo tên (phải được cài đặt trên hệ thống của người xem). Tập con là mặc định - nó giảm đáng kể kích thước tệp. Các định dạng phông chữ được hỗ trợ: Type1, TrueType, OpenType và CIDFont (cho CJK).
Khi một phông chữ được tham chiếu nhưng không được nhúng và không được cài đặt trên hệ thống của người xem, trình xem sẽ thay thế bằng một phông chữ tương tự - điều này thường trông không đúng. PDF/A yêu cầu tất cả các phông chữ phải được nhúng để ngăn chặn điều này.
4. Chú Thích
Các điểm nổi bật, nhận xét, liên kết, con dấu, hình mờ và trường biểu mẫu đều là các chú thích. Chúng được xếp lớp lên trên nội dung trang và có thể được thêm, chỉnh sửa hoặc xóa mà không làm thay đổi trang cơ bản.
Trường biểu mẫu là một trường hợp đặc biệt: một chú thích widget tương tác (phần hiển thị) cộng với một từ điển trường (phần dữ liệu). Khi bạn điền vào biểu mẫu và lưu, chỉ các từ điển trường thay đổi - bản thân trang không bị ảnh hưởng.
5. Đồ Họa Vector
Các đường thẳng, hình dạng, đường cong và đường dẫn được vẽ bằng các toán tử giống PostScript (moveto, lineto, curveto). Có thể mở rộng vô hạn mà không làm giảm chất lượng. Hầu hết các bản xuất CAD, biểu đồ và sơ đồ trong tệp PDF là đồ họa vector.
6. Chữ Ký Số
Các chữ ký được hỗ trợ bởi PKI, gắn liền với các phạm vi byte của tệp. Từ điển chữ ký chỉ định "các byte từ 0 đến 12.547 và từ 14.200 đến cuối tệp đã được ký" - một phạm vi nhỏ ở giữa được dành riêng cho chính giá trị chữ ký. Bất kỳ thay đổi nào đối với các phạm vi byte đã ký sẽ làm mất hiệu lực chữ ký, đây là cách PDF phát hiện giả mạo sau khi ký.
Một số tệp PDF có nhiều chữ ký, được xếp lớp dưới dạng các bản cập nhật tăng dần - mỗi người ký ký vào tệp như nó tồn tại khi họ nhận được nó, bảo toàn chuỗi.
Siêu Dữ Liệu: Hai Hệ Thống Song Song
PDF có hai hệ thống siêu dữ liệu thường không khớp với nhau:
Từ Điển /Info Tiêu Chuẩn
Lưu trữ trong trailer. Các trường: Title, Author, Subject, Keywords, Creator (ứng dụng người dùng tạo tài liệu), Producer (ứng dụng tạo tệp PDF), CreationDate, ModDate. Các chuỗi văn bản thuần túy, dễ đọc bằng bất kỳ công cụ PDF nào.
Luồng Siêu Dữ Liệu XMP
Một luồng XML riêng biệt (Adobe XMP, dựa trên RDF/XML) hỗ trợ các lược đồ phong phú hơn: Dublin Core, IPTC, các lược đồ tùy chỉnh theo lĩnh vực (hồ sơ màu, đăng ký bản quyền, phiên bản bản thảo).
Các trình tạo PDF hiện đại ghi vào cả hai. Các tệp PDF cũ chỉ có /Info. Một số tệp PDF có /Info cũ từ phiên bản trước và XMP chính xác từ một lần chỉnh sửa gần đây - hoặc ngược lại. Khi kiểm tra tệp PDF để tuân thủ hoặc điều tra pháp y, hãy kiểm tra cả hai.
Các Tiêu Chuẩn ISO Được Xây Dựng Trên PDF
Đặc tả PDF cơ bản là ISO 32000. Một số tiêu chuẩn dẫn xuất giới hạn PDF cho các trường hợp sử dụng cụ thể:
| Tiêu Chuẩn | Sử Dụng | Giới Hạn |
|---|---|---|
| PDF/A | Lưu trữ dài hạn | Tất cả phông chữ được nhúng, không có JavaScript, không có âm thanh/video, không gian màu độc lập với thiết bị. Các cấp độ tuân thủ: PDF/A-1, A-2, A-3 (cho phép tệp đính kèm) |
| PDF/X | Sản xuất in ấn | Màu CMYK, phông chữ và hồ sơ màu được nhúng, không có độ trong suốt (PDF/X-1a) hoặc độ trong suốt được kiểm soát (PDF/X-4) |
| PDF/UA | Khả năng truy cập | Cây cấu trúc được gắn thẻ, siêu dữ liệu ngôn ngữ, văn bản thay thế cho hình ảnh, thứ tự đọc logic |
| PDF/E | Kỹ thuật | Mô hình 3D (định dạng U3D, PRC), siêu dữ liệu dành riêng cho CAD |
| PDF/VT | In ấn giao dịch biến đổi | Tối ưu hóa cho các thư cá nhân hóa khối lượng lớn |
Một tệp PDF có thể tuân thủ nhiều tiêu chuẩn đồng thời - PDF/A-2u (lưu trữ với ánh xạ Unicode) cộng với PDF/UA (khả năng truy cập) là phổ biến cho các kho lưu trữ chính phủ và pháp lý.
PDF Tuyến Tính Hóa (Tối Ưu Cho Web)
Một tệp PDF "tuyến tính hóa" hoặc "tối ưu hóa cho web" sắp xếp lại body để các đối tượng của trang đầu tiên xuất hiện sớm trong tệp. Trình xem web có thể hiển thị trang 1 sau khi chỉ tải khoảng 50 KB đầu tiên thay vì đợi toàn bộ tệp. Trailer được nhân đôi ở đầu, cộng với một bảng gợi ý cho trình xem biết mỗi trang bắt đầu ở đâu.
Hầu hết các trình tạo PDF hiện đại hỗ trợ tuyến tính hóa như một tùy chọn "Lưu cho Web". Định dạng này làm tăng kích thước tệp thêm 2-5% để đổi lấy việc hiển thị trang đầu tiên nhanh chóng qua các kết nối chậm.
Mã Hóa và Quyền
Tệp PDF có thể được mã hóa bằng mật khẩu (hoặc chứng chỉ) và được cấp các quyền chi tiết: in, sao chép văn bản, sửa đổi, điền biểu mẫu, trích xuất để truy cập. Việc mã hóa được lưu trữ trong từ điển /Encrypt của trailer.
Độ mạnh của mã hóa đã phát triển: RC4 40-bit (các tệp PDF ban đầu, dễ dàng bị bẻ khóa ngày nay), RC4 128-bit (vẫn yếu), AES-128, AES-256. Việc triển khai RC4 ban đầu của Acrobat 5 đã bị bẻ khóa công khai vào năm 2001; mã hóa PDF hiện đại (AES-256, PDF 2.0) là vững chắc khi được sử dụng với mật khẩu mạnh.
Lưu ý: "Quyền" là khuyến nghị. Một trình xem tôn trọng chúng sẽ thực thi chúng. Một trình xem bỏ qua chúng (hoặc một công cụ loại bỏ mã hóa) thì không.
Cách PDFSub Đọc Tệp PDF
PDFSub xử lý tệp PDF bằng cách sử dụng binding PDFium của Rust (cùng một công cụ cung cấp trình xem PDF của Chromium) cộng với PaddleOCR cho các tài liệu đã quét. Để biết chi tiết kiến trúc đầy đủ và so sánh với các công cụ dựa trên đám mây, hãy xem Trình duyệt so với Bảo mật PDF trên Đám mây.
Để chuyển đổi tệp PDF sang các định dạng khác trong khi bảo toàn cấu trúc được mô tả ở trên:
- PDF sang Excel - trích xuất văn bản + bảng, bảo toàn tọa độ
- OCR PDF - thêm lớp văn bản có thể tìm kiếm vào tệp PDF đã quét
- PDF sang Word - định dạng lại văn bản thành các đoạn có thể chỉnh sửa
- Nén PDF - giảm mẫu hình ảnh, tập con phông chữ
Đối với quy trình làm việc lưu trữ cụ thể, hãy xem Cách chuyển đổi PDF sang PDF/A.
Đọc Thêm
- ISO 32000-2 (đặc tả PDF 2.0) - tài liệu tham khảo có thẩm quyền, có phí
- Lưu trữ Tài liệu Tham khảo PDF của Adobe - tài liệu tham khảo miễn phí cho PDF 1.7
- Hiệp hội PDF - nhóm làm việc ngành, các bài viết miễn phí và tệp kiểm tra tuân thủ
Đối với các chủ đề cụ thể về PDF: Hướng dẫn Tuân thủ PDF cho Luật sư, Hướng dẫn Chuyển đổi PDF/A.