PDF không phải là định dạng tài liệu giống như kiểu mà Word hoặc RTF vốn thế. Các dạng kia chuyên cất trọn những thứ chứa dãy chuỗi cấu phân (content) chờ thời ngóng trông để cỗ bộ giải mã dóng khung dựng đứng vạch biên (renderer) đọc lên rồi luân hoán nó thành mặt hình lộ sáng (moment of display), thành ra đai mâm kết rọi xuất phản chiếu sẽ thảy tuỳ uỷ chệ phụ ghim dựa lấp lửng vô mấy kho mục tài liệu hệ phông cùng cỗ bộ đồ ráp khung dàn trang lót bất kỳ ngạch hẵng còn lưu đai nơi kho bãi máy tính đang mở lót nó thôi. Mặt tệp dạng PDF thu nạp lọt trọn đai rập vào gánh cái bệ thành phần sau rốt của chu kì: dóng chuẩn trổ bộ chỉ thị đổ hình ráp ảnh nét phanh đục đúng cự (precise rendering instructions), nải đai phông chữ, ngả lặn ép luồng cuộn dòng mảng tranh (compressed image streams), cùng với gã đai nhánh phả cây đồ mảng vật (object graph) kết gút chúng bọc lọt ôm gói rúc gọn vào rập lại một thể hệ diễn xướng cô đúc nắn rập rẽ rạch rành mọi kẽ mọi phiến mọi vạch mọi mặt (self-contained description of every page). Tập tài đem đùm thắt trọn những thứ lóng dóng thong truyền vạch chẽ lọt đủ hòng nắn sinh y đúc (reproduce each page identically) lại mọi nẻo trang cho bất kì 1 gã bộ xướng diễn đồ hình ngạch tuân chuẩn y bãi mực mực quy chiếu nào đó (conforming renderer), phần đó chính rành mạch điểm định danh to lớn cho gã (main design goal) mà mớ luân chuyển lằn lỏi luồn qua là gốc ngọn nải nặn mầm cội cho đa nẻo phức cục (complexity) hễ cứ đai bạn rúc thò ngón gạt móc gõ nhấc nặn đúc (generate), bứt gỡ đọc tách phân mã (parse), dẫu chỉnh xước găm thêm trích ngắt dóng nó (modify) từ một lằn kẽ điệu chạy dạo mã phả trình viết đi
Mô hình đối tượng
Mỗi một cuốn PDF thảy là tụ đống nhét nạp gộp đai của các lọn nhánh đồ phần tử phân cấp (objects) rẽ đánh rành danh mục mác hiệu bằng dóng chữ số. 1 hệ ngạch đồ bộ này có thể quy tụ loại ngạch hằng nẻo 2 dạng boolean (boolean), hệ số ngạch chặn lặp chẵn mác đai nấc integer (integer), hệ gốc tự chân thật không hão huyền (real number), nải đai danh tính (name), dóng dây ngạch vạch chéo ngang (string), vựa rổ bao gộp khoanh lại (array), danh bạ ghi tạc dóng danh mục (dictionary), mảng cuộn tuôn tuột lọt luồng (stream), dẫu vô ngạch trơn trống lỏng nhẵn chẳng ẵng tịnh chi trọc lốc không cạn (null). Gần y hết hẵn đa phần những món vớt gặt trổ thò điểm nhấn kì diệu ngộ lạ bốc lột (interesting) rành mạch phả lại chính đai 1 dạng tự bộ danh (dictionary), tức nguyên một dải lợp rẽ phả ghép những mốc dóng thẻ nhãn với cụm từ cắm danh (key-value pairs) đai mà đám lọng thẻ đai (keys) rành rẽ bệ tên báo xướng hiệu cắm hiệu danh (names) xong mớ phần mốc mục chứa dóng kho (values) tịnh cũng rành ngạch thảy loại hệ nẻo dạng mốc đồ vật bộ thứ (other object type) hễ bao biện ôm dính trọn bốc bọc cả bọn đám chỉ nẻo vạch ngón chiếu tọc lọt chọc vô 1 thằng cấu đai vật dạng ngạch phả dóng hạch rễ hiệu điểm mốc nọ bằng lằn nấc chóp đếm thứ dóng phân vạch đai số đếm (number) với bộ cự luân phiên thời vạch ghim (generation count). Cuộn 1 dòng dải dóng dọc trôi (stream) nẻo là dóng tự điểm từ lót đai kèm nải đai ngạch chẽ chuỗi nối (byte sequence) nện cõng rập ốp ngay ngạch đít sau, thường tuột được vặn vắt nhăn thu xẹp giáng bóp nén xẹp gọn bớt (compressed)
Bảng phân trang định mục rẽ chỉ chiếu phả (catalog dictionary) ngự rành đai vị gốc ngọn (root). Nó vạch lọng trỏ ngón giáng chỉ vô 1 dóng cây (page tree), thằng chẽ vạch đánh xếp đai quy tụ lọng sắp mớ các tự điển ghi chú bọc điểm mốc phiến trang (page dictionaries) tuồn vô ngạch dạng ngọn nảy mọc đâm nhánh chi ghim (tree structure) san cành trổ ngang bằng rẽ rạch nhánh thắt bằng chặn chia dóng đều trổ cân đai (balanced) đoản nhẽ phất đi lằn chẻ vứt đánh loại chẽ danh sổ thòng lòng bằng lẹt đét trượt bẹt nhẵn lì xuôi đuột đi nọ (flat list), thế đâm là lặn lội mót rà bứt vô kiếm nải điểm toạ đai 5,000 vựa rúc ở cái cục mảng đống 10,000 trang nọ chả tọc mạch hạch hỏi bạn cần gì đâu mà luồn ngóc len rà quét soi gạt lội trơn (traversing) hết đi rành đai những thứ bọc ghi chóp mác diễn tạc rạch ngỏ chẽ tờ ở lấp ló che án rào cản đứng hất dạo lối đầu (preceding page descriptor). Dóng phả mặt định dóng điểm danh mác gác đi (page dictionary) ắt hẵn rinh vác vạch đai mỏ 1 lằn nải nỏ chỉ trỏ vô đai những lằn dóng mạch lọng chuỗi cuộn luồng bọc nhét chở ngạch diễn xướng nội phân trang chẽ (content streams) (một lọn nhánh hay dăm đám chuỗi dóng nối dính bộ hệ phân ghim đánh điều mác dóng diễn vẽ ghi trang — page-description operators), dóng mục danh từ tài kho dự cắm chỉ gốc rễ dự phòng nguồn uỷ uỷ (resource dictionary) nọ nảy ra (tức thứ luân gài vạch trỏ cắm qua những mảng ghi tạc bọc phông — font descriptors, dải bộ quy không khoanh đai sắc màu — color spaces, với ngạch điểm chiếu hình mảng (image XObjects)), xong phần cái ô hộp nải đóng (media box) ngỏ điểm mốc quy (coordinate space) của trang mốc chóp nảy. Điểm điểm gút rẽ cắm (coordinate origin) gác 1 toạ ở tại gã uỷ rẽ đai mé đuôi góc góc gập đai trệ thấp rọt dưới rớt về rìa tả tít ngỏ ngác bên rẽ ngang (bottom-left corner), rành ngạch dóng nấc điểm Y dương rẽ trọc hất vút trồi lên, tại định ghim bộ đánh chia trích gạt ra ở lằn chỉ nấc vạch 1/72 điểm chỉ dóng đánh theo thước Anh phân lằn mác cự hệ inch
Gác đít (end) uỷ tận tuột chóp cái vạch chốt của 1 tài cuốn kìa ngỏ lộ bệ đánh rành quy 1 rẽ mặt dóng cái bảng đánh ngạch chéo rà vạch chiếu thập tự nhắm (cross-reference table), thằng mảng đi bôi vạch tô đánh đồ rẽ phả nẻo rập mác đai chiếu ngạch ghim một gã số (object number) giáng ngỏ tới vạch cự ghim đai dóng ngắt byte nọ phân ngạch ngách dóng vạch giãn cách (byte offset) rẽ cắm nằm trọn ở tệp bọc trỏ nọ ra. Chỗ này lọt đánh ốp đai ghim gỡ chính là thằng ghim xướng phân khai ngỏ ngõ cho thứ mà dóng rải chọc vô thò bóc gỡ mảng ngẫu dạo ngẫu đai kìa đi (random access): 1 thợ soi đọc chọc bóc móc cái vạch bảng đó tọc lọt chốc đai dóng trước rành đầu đai, đoạn tuốt lươn lách luồn len men phi lội tọc tuột thẳng đáp tới chóc (seeks directly) hễ ngạch tuỷ ghim mác dóng mảng đối hệ vật nải mớ thứ chi mà tụi đó hóng thò gõ ngỏ đai đâm vô (needs). Dóng cập PDF 1.5 thả nhả sút ấp lộ ra những lằn chuỗi dóng ngắt chéo luồng chiếu dòng nhắm ngang dọc (cross-reference streams), rạch phân dóng bóp gập chẽ nặn dập đóng khoanh dẹt đai bảng đai nọ nhét tuốt nải trọn vô vỏ bọc đai ghim của vạch u mảng đồ uốn tuôn (stream object) kèm trét dồn vạch bóp hốt đai đống lũ đồ điểm ghim lẩn mảng kề cận nối (related objects) rập rúc cuộn ấp sáp u cuộn đai cho thành bọc dòng lọng đai chứa (object streams), giúp lách vớt chọc xắn dóng tạt cấu giảm chóp đai đánh bẹt (reducing file size) rành ngạch nhãn mắt dễ tỏ nhãn cho nhóm mục các thể dạng tập với mảng chẽ bao nhiêu là thứ xíu lóng dóng chóp phân chi rẽ ngỏ ghim lắt nhắt ngỏ xíu (small objects) kia rớt lọt vô
Các Content stream và mô hình đồ họa
Đai nải ngạch nhìn trỏ phơi nhan điểm diện trổ sắc hình bộc dạng phân phả của một đai vạch mảnh (page’s visual content) trú ngụ chóp ẩn đai lót vây trong dóng uẩn hạch một dải luồng (content stream) hay rải đai cụm khối luồng. Dóng mỗi 1 mảng dải luồn chảy tuôn nọ đai ôm trọn dóng đánh bọc 1 xâu rẽ nối ngỏ chuỗi của những toán toán hệ rập u mảng thao ghim đánh lệnh dóng trình chỉ vạch định PDF (PDF operators) nhét ghim phân cắm đan kẹp rải chẻ chen rúc dóng cài rải xéo kẽ luồn đi rợp (interspersed) rành rẽ 1 dải chọc cắm lẫn nải toán tố trị (operands) nọ ngỏ nó ra. Thằng lệnh chữ đánh vạch mã text BT báo điểm bung mở lọn xướng đai dựng tạc dóng 1 gã u cấu ghim mác text (text object), mã Tf gõ ghim rọi nhấc 1 dải vạch hệ phông dóng kèm trọn cự chia gác chỉ 1 dóng dải cỡ mác bới hất ngỏ ấp tuốt lọt từ tàng uổn rẽ bảng ngỏ rạch chứa tài nải dự (resource dictionary), mã Td xê dời đánh ngạch dóng phán nẻo rẽ đai cho toạ mục mốc mâm trỏ con trượt chuột dóng chữ rạch (text cursor), mã Tj dẫu ngạch TJ bôi sơn phết tô phả ngỏ ra 1 lọng đánh lằng nấc điểm chóp chuỗi (string), còn thằng vạch ET ngỏ ghim đóng nấp gập sụp mác cài nắp cái khối phân ghim dóng text đai (text object). Dóng đồ đi mảng hoạ điểm dóng chiếu vạch toạ vector thì cũng dóng lọt đánh đeo nấp phả nối trượt theo (follow) một ngạch đai chẽ rãnh hình mẫu (pattern) ngó chỏ tợ tợ lẩn như rứa nọ: bộ lệnh m phán dóng xướng ngỏ cắm 1 dóng mốc toạ đai điểm nẻo khởi ngỏ đi rẽ đai phả xuất rạch (starting point), ngạch lọng lệnh l dóng 1 nhánh đường ngỏ vạch đoạn (line segment) vô ngỏ đánh chót nẻo ráp lọt, c cài kẹp ghim lọt nhét đánh uốn vòng thêm ngỏ cong điểm uỷ Bezier (Bezier curve), kèm mớ f chóp hoặc S bôi đánh trét trám ngỏ đai phủ đầy hoặc quẹt kéo vạch nhấc rạch phả phác vạch đánh ngỏ cắm nét vòng đai bo tô trượt cho cái nải ngỏ đường lọn nọ (path)
Mảng rẽ ngỏ ghim toạ rạch trạng hoạ diện của bộ chiếu ảnh (graphics state) trùm chóp cai đai ngự giáng rạch định lệnh lên rành tuốt đai thảy lọn chuyện trượt xoay ngỏ chạy xảy tuôn uỷ rẽ đai ra ngụ ngỏ 1 dải lấn chính đai giữa nải mốc các khất bộ đóng lệnh mã (operators): uỷ lọng dóng khung ma chiếu bảng toạ đánh phả chuyển dịch dóng đổi nẻo đang bám trụ uỷ ở (current transformation matrix), cự dóng bản kích rộng của dải (line width), bệ ngỏ chóp khoảng chứa màu sắc (color space), màu ngỏ phết vạch sơn lấp (fill color), màu viền rạch nét đi (stroke color), với 1 ngạch ghim vạch tỉa đường cắt (clipping path). Những gã định hiệu lọng mác lệnh tợ dạng dóng rạch như bệ mã q với uỷ rạch Q thì ấn nhấn giáng 1 nấc tống bồi đùn nhét xộc bóp cắm đẩy sâu ấn sụt rành rẽ (push) rồi đánh nhú khều rạch bật bứt hất bung phụt dóng giật nhảy tung rụng ra lóp lọi ra (pop) cái phân trạng hình hệ vóc toạ rạch thái hoạ (graphics state) nọ xắn đùn lên đai 1 chóp ngọn ngỏ chồng đống xếp gác đai ngạch trụ đụn bệ rọi tháp nải tầng (stack), cũng ngỏ đó rành mạch cái mảng nẻo bệ rẽ trượt đánh đường cách dóng ngỏ mác lẩn cắm cho 1 ngỏ bệ trình chóp ghim mã uỷ cài PDF ứng lọt trổ cắm lấp cấy ghim chạy rành chóp dựng đai hiện phả thực thụ được những mảng đánh rẽ chuyển bệ đai lật đánh dời ngỏ phân mảng đánh hoạ toạ (local coordinate transformations) với các nấc cắm dóng nảy độ dóng lấn hất ép đai giật cướp đè cự cắm đánh đai qua vạch khất lọng phủ quyền mác tạm bợ thoắt đi dóng (temporary state overrides) mà cự ngỏ dóng lại hẵng rành khỏi chạm kẽ làm sứt vẩy lay 1 sợi chọc vạch vướng tạt xô động ảnh đánh lọng đai gì ghim rụng tới cả nguyên 1 đám dải vùng bệ toạ bao phả vây chóp quanh ngỏ ấp tụi (context around them). Bệ nải ghim mẫu (Form XObjects) thì rành ngỏ đánh trượt lấn đai quy hệ đồng uỷ mở rẽ khái ngỏ chung trọn đai dóng mác lên tuốt tuồn cho nải phân ghim trượt vạch việc này đây: 1 ngạch bộ lọng dải uẩn rẽ dòng trượt luân luồn phân tự chứa mác dóng thu gọn vạch ngỏ (self-contained content stream) rinh dóng bế cõng kẹp mang vác đai nguyên bệ dóng nải tự bảng đai từ kho tài bệ rẽ đai của uỷ phân riêng thuộc gốc rẽ mình cắm mác cự tự mang, lại mảng đai đâm trượt trét tô hoạ quệt vẽ trát vạch lấp in phả (painted) lên trên 1 phiến rạch chẽ dóng bệ ngỏ mặt mâm lọng trang rẽ ở mấy rạch vị đai chỗ cắm ngỏ tuỳ tâm dóng (arbitrary positions) lại đánh phóng kéo lọng ngỏ dóng bóp ghim đai ở mọi cự thước tỉ lóng rẽ nấc thu phóng toạ (scales) thảy dóng gói luân nải bằng rành độc độc phả một đai rạch lóng uỷ lệnh mã bệ đánh điều hất gọi rẽ cắm từ gã Do
Nhúng font chữ và trích xuất văn bản
PDF có thể tham chiếu các font chữ theo tên và dựa vào trình xem để thay thế thứ gì đó, nhưng trong thực tế, bất kỳ tài liệu nào bạn định chia sẻ đều phải nhúng dữ liệu font chữ. Một font Type 1 hoặc TrueType/OpenType được nhúng trong PDF mang theo một từ điển mô tả font (font descriptor dictionary) trỏ đến một luồng tệp font. Đối với font TrueType, luồng đó chứa chương trình font nhị phân; đối với Type 1, đó là dữ liệu PFB. Việc tạo tập con (subsetting), điều mà mọi công cụ tạo PDF nghiêm túc đều thực hiện, sẽ loại bỏ các glyph không được tài liệu tham chiếu, giữ cho kích thước tệp ở mức có thể quản lý được ngay cả đối với các font Unicode lớn
Trích xuất văn bản là nơi mà việc nhúng font có thể gây ra vấn đề. Biểu diễn trực quan của một ký tự được xác định bởi một glyph trong chương trình font được nhúng. Giá trị Unicode của ký tự đó được xác định bởi một luồng ToUnicode CMap được gắn với từ điển font chữ. Khi ToUnicode CMap bị thiếu hoặc không chính xác, một trình xem PDF có thể hiển thị văn bản rõ ràng nhưng không thể trích xuất nó thành Unicode có nghĩa, đó là lý do tại sao sao chép-dán từ một số tệp PDF tạo ra rác. Tagged PDF (ISO 32000 §14.8) thêm một lớp thứ hai: một cây cấu trúc logic ánh xạ nội dung trang thành các vai trò ngữ nghĩa của tài liệu như đoạn văn, tiêu đề và ô bảng. Trình đọc màn hình và công cụ dàn trang lại sử dụng cây cấu trúc thay vì thứ tự luồng nội dung thô, điều này giải thích tại sao một tệp PDF được bố trí trực quan tốt vẫn có thể không truy cập được nếu việc gắn thẻ bị vắng mặt hoặc sai
Cập nhật gia tăng và chữ ký điện tử
Khi bạn lưu các thay đổi đối với tệp PDF hiện có mà không ghi lại từ đầu, các đối tượng mới sẽ được nối thêm vào sau phần thân tệp gốc cùng với phần tham chiếu chéo mới và từ điển trailer mới. Trailer được cập nhật sẽ trỏ đến dữ liệu tham chiếu chéo mới và các đối tượng bị thay thế vẫn nằm trong tệp nhưng đơn giản là không được chuỗi tham chiếu chéo mới tham chiếu đến. Đây là bản cập nhật gia tăng và nó có hai hệ quả quan trọng
Thứ nhất, tệp lớn lên sau mỗi chu kỳ lưu. Một tài liệu được chỉnh sửa và lưu đi lưu lại sẽ tích lũy các lớp đối tượng lỗi thời. Các công cụ như QPDF có thể tuyến tính hóa hoặc nén-và-ghi lại tệp để lấy lại không gian đó, nhưng mặc định là tích lũy. Thứ hai, chữ ký điện tử phụ thuộc vào các bản cập nhật gia tăng cho mô hình tính toàn vẹn của chúng. Chữ ký ISO 32000 bao gồm một dải byte của tệp, thường là mọi thứ ngoại trừ trình giữ chỗ cho chính giá trị chữ ký. Bất kỳ thay đổi nào sau khi ký xuất hiện dưới dạng các bản cập nhật gia tăng bổ sung đều có thể được hiển thị cho trình đọc xác thực dưới dạng các sửa đổi được thực hiện sau khi ký, đó chính xác là dấu vết kiểm tra mà bạn muốn. Tuy nhiên, điều này cũng có nghĩa là một số sửa đổi nhất định, chẳng hạn như thêm chữ ký phê duyệt hoặc điền vào các trường biểu mẫu, được tiêu chuẩn cho phép rõ ràng mà không làm mất hiệu lực của chữ ký gốc, miễn là các thay đổi tuân thủ các cài đặt quyền của tài liệu (ISO 32000-2 §12.7.6). Một sửa đổi nằm ngoài các quyền đó sẽ bị gắn cờ là trái phép. Việc nắm bắt đúng sự khác biệt này rất quan trọng khi bạn tạo các tài liệu sẽ được ký đối chiếu sau này
Các mức độ tuân thủ và dòng dõi ISO 32000
PDF bắt đầu như một định dạng độc quyền của Adobe vào năm 1993, hấp thụ mô hình hình ảnh của PostScript và qua mười lăm phiên bản đã tích lũy các tính năng: mã hóa trong 1.1, biểu mẫu tương tác trong 1.2, chữ ký điện tử và cấu trúc logic trong 1.3, độ trong suốt trong 1.4, luồng đối tượng trong 1.5, mã hóa AES trong 1.6. Adobe đã gửi PDF 1.7 lên ISO vào năm 2007 và kết quả là ISO 32000-1:2008. ISO 32000-2:2020 bao gồm PDF 2.0, thắt chặt một số khu vực chưa được chỉ định rõ, sửa đổi nguồn gốc khóa AES-256 (bản sửa đổi 6 thay thế bản sửa đổi 5) và bổ sung hỗ trợ rõ ràng cho các tệp được liên kết và phương tiện phong phú
Các tiêu chuẩn phụ bắt nguồn từ cùng một cơ sở. PDF/A (ISO 19005) đánh đổi tính năng để lấy độ ổn định lưu trữ: không mã hóa, không phụ thuộc nội dung bên ngoài, tất cả các font được nhúng, không gian màu độc lập với thiết bị, yêu cầu siêu dữ liệu XMP. PDF/A-1 dựa trên PDF 1.4, PDF/A-2 dựa trên PDF 1.7, PDF/A-3 cho phép nhúng các tệp có định dạng bất kỳ. PDF/X (ISO 15930) là tập con phục vụ sản xuất in ấn: các mục đích đầu ra, hộp xén và cắt, không hỗ trợ độ trong suốt ở các cấp độ tuân thủ cũ hơn. PDF/UA (ISO 14289) bắt buộc cấu trúc được gắn thẻ, ánh xạ Unicode và siêu dữ liệu ngôn ngữ cho khả năng tiếp cận. Đây không phải là các định dạng cạnh tranh nhau; chúng là các tập hợp ràng buộc bổ sung bên cạnh PDF cốt lõi và một tệp duy nhất có thể đồng thời tuân thủ nhiều tiêu chuẩn miễn là các ràng buộc không xung đột với nhau
Đối với bất kỳ ai viết mã tạo hoặc xử lý PDF, cơ sở thực tế là ISO 32000-2 với sự chú ý cẩn thận đến các phần bao gồm mô hình tham chiếu chéo (§7.5), trạng thái đồ họa (§8.4), các toán tử trạng thái văn bản (§9.3), mô tả font và ToUnicode (§9.6 và §9.10), biểu mẫu tương tác (§12.7) và chữ ký điện tử (§12.8). Tiêu chuẩn này rất dài, nhưng hầu hết các công việc lập trình PDF đều lặp đi lặp lại một phần nhỏ hẹp của nó. Hiểu về mô hình đối tượng và cơ chế tham chiếu chéo là điểm khởi đầu; mọi thứ khác đều là sự chuyên biệt hóa từ đó