PDF

Portable Document Format - Định dạng Tài liệu Di động (PDF), được chuẩn hóa thành ISO 32000, là định dạng file do Adobe phát triển vào năm 1992 để trình bày tài liệu, bao gồm định dạng văn bản và hình ảnh, theo cách độc lập với phần mềm ứng dụng, phần cứng và hệ điều hành. Dựa trên ngôn ngữ PostScript, mỗi file PDF bao gồm mô tả đầy đủ về tài liệu phẳng có bố cục cố định, bao gồm văn bản, phông chữ, đồ họa vector, hình ảnh raster và thông tin khác cần thiết để hiển thị tài liệu đó. PDF có nguồn gốc từ "The Camelot Project" do đồng sáng lập Adobe John Warnock khởi xướng vào năm 1991. PDF được chuẩn hóa thành ISO 32000 vào năm 2008. Phiên bản mới nhất là ISO 32000-2:2020 được xuất bản vào tháng 12 năm 2020.

File PDF có thể chứa nhiều nội dung khác nhau ngoài văn bản phẳng và đồ họa bao gồm các thành phần cấu trúc logic, các thành phần tương tác như chú thích và trường biểu mẫu, lớp, phương tiện phong phú (bao gồm nội dung video), các đối tượng ba chiều sử dụng U3D hoặc PRC và nhiều định dạng dữ liệu khác. Đặc tả PDF cũng cung cấp mã hóa và chữ ký số, file đính kèm và siêu dữ liệu để cho phép các quy trình công việc yêu cầu các tính năng này.

Để đọc được tập tin PDF trên máy vi tính, bạn phải có một phần mềm hỗ trợ định dạng này. Phần mềm phổ biến hiện nay là Adobe Reader hay Foxit Reader.

== Lịch sử ==
Sự phát triển của PDF bắt đầu vào năm 1991 khi John Warnock viết một bài báo cho một dự án khi đó có tên mã là Camelot, trong đó ông đề xuất tạo ra một phiên bản PostScript đơn giản hóa có tên là "Interchange PostScript" (IPS). Không giống như PostScript truyền thống, tập trung chặt chẽ vào việc hiển thị các công việc in ấn cho các thiết bị đầu ra, IPS sẽ được tối ưu hóa để hiển thị các trang trên mọi màn hình và mọi nền tảng.

Adobe Systems đã cung cấp miễn phí thông số kỹ thuật PDF vào năm 1993. Trong những năm đầu, PDF chủ yếu phổ biến trong quy trình xuất bản trên desktop và cạnh tranh với một số định dạng khác, bao gồm DjVu, Envoy, Common Ground Digital Paper, Farallon Replica và thậm chí cả định dạng PostScript của riêng Adobe.

PDF là định dạng độc quyền do Adobe kiểm soát cho đến khi được phát hành dưới dạng tiêu chuẩn mở vào ngày 1 tháng 7 năm 2008 và được Tổ chức Tiêu chuẩn hóa Quốc tế công bố dưới dạng ISO 32000-1:2008, tại thời điểm đó, quyền kiểm soát thông số kỹ thuật được chuyển cho Ủy ban ISO gồm các chuyên gia tình nguyện trong ngành. Năm 2008, Adobe đã công bố Public Patent License cho ISO 32000-1 cấp quyền Royalty-free cho tất cả các bằng sáng chế thuộc sở hữu của Adobe cần thiết để tạo, sử dụng, bán và phân phối các triển khai tuân thủ PDF.

PDF 1.7, phiên bản thứ sáu của đặc tả kỹ thuật PDF đã trở thành ISO 32000-1, bao gồm một số công nghệ độc quyền chỉ do Adobe định nghĩa, chẳng hạn như Adobe XML Forms Architecture (XFA) và tiện ích mở rộng JavaScript cho Acrobat, được ISO 32000-1 tham chiếu là chuẩn mực và không thể thiếu để triển khai đầy đủ thông số kỹ thuật ISO 32000-1. Các công nghệ độc quyền này không được chuẩn hóa và thông số kỹ thuật của chúng chỉ được công bố trên trang web của Adobe. Nhiều công nghệ trong số đó không được hỗ trợ bởi các triển khai PDF phổ biến của bên thứ ba.

ISO đã xuất bản phiên bản 2.0 của PDF, ISO 32000-2 vào năm 2017, có sẵn để mua, thay thế cho thông số kỹ thuật miễn phí do Adobe cung cấp. Tháng 12 năm 2020, phiên bản thứ hai của PDF 2.0, ISO 32000-2:2020, đã được xuất bản, với các giải thích, chỉnh sửa và cập nhật quan trọng cho các tài liệu tham khảo chuẩn mực (ISO 32000-2 không bao gồm bất kỳ công nghệ độc quyền nào làm tài liệu tham khảo chuẩn mực).Vào tháng 4 năm 2023, Hiệp hội PDF đã cung cấp ISO 32000-2 để tải xuống miễn phí.

Định dạng PDF được thay đổi nhiều lần khác nhau và hiện tại vẫn tiếp tục được phát triển. Dưới đây là 9 phiên bản ứng với các phiên bản của Acrobat.
- (1993) – PDF 1.0 / Acrobat 1.0
- (1994) – PDF 1.1 / Acrobat 2.0
- (1996) – PDF 1.2 / Acrobat 3.0
- (1999) – PDF 1.3 / Acrobat 4.0
- (2001) – PDF 1.4 / Acrobat 5.0
- (2003) – PDF 1.5 / Acrobat 6.0
- (2005) – PDF 1.6 / Acrobat 7.0
- (2006) – PDF 1.7 / Acrobat 8.0
- (2008) – PDF 1.7, Adobe Extension Level 3 / Acrobat 9.0

== Chi tiết kỹ thuật ==
File PDF thường là sự kết hợp của đồ họa vector, văn bản và đồ họa bitmap. Các loại nội dung cơ bản trong PDF là:

- Văn bản được sắp chữ được lưu trữ dưới dạng luồng nội dung (tức là không được mã hóa dưới dạng văn bản thuần túy);
- Đồ họa vector cho hình minh họa và thiết kế bao gồm hình dạng và đường thẳng;
- Đồ họa raster cho ảnh chụp và các loại hình ảnh khác; và
- Các đối tượng đa phương tiện khác.

Trong các bản sửa đổi PDF sau này, một tài liệu PDF cũng có thể hỗ trợ các liên kết (bên trong tài liệu hoặc trang web), biểu mẫu, JavaScript (ban đầu có sẵn dưới dạng plugin cho Acrobat 3.0) hoặc bất kỳ loại nội dung nhúng nào khác có thể được xử lý bằng plugin.

PDF kết hợp ba công nghệ:

- Một tập hợp con tương đương của ngôn ngữ lập trình PostScript nhưng ở dạng khai báo, để tạo bố cục và đồ họa.
- Một hệ thống nhúng/thay thế phông chữ để cho phép phông chữ di chuyển cùng với các tài liệu.
- Một hệ thống lưu trữ có cấu trúc để đóng gói các thành phần này và bất kỳ nội dung liên quan nào thành một file duy nhất, với khả năng nén dữ liệu khi cần thiết..

=== Ngôn ngữ PostScript ===
PostScript là ngôn ngữ mô tả trang chạy trong trình thông dịch để tạo hình ảnh. Nó có thể xử lý đồ họa và có các tính năng chuẩn của ngôn ngữ lập trình như phân nhánh và lặp. PDF là một tập hợp con của PostScript, được đơn giản hóa để loại bỏ các tính năng luồng điều khiển như vậy, trong khi các lệnh đồ họa vẫn còn.

PostScript ban đầu được thiết kế cho một trường hợp sử dụng hoàn toàn khác: truyền các tác vụ in tuyến tính một chiều trong đó trình thông dịch PostScript sẽ thu thập một loạt lệnh cho đến khi gặp lệnh codice_1, sau đó thực thi tất cả các lệnh để hiển thị một trang dưới dạng hình ảnh raster cho thiết bị in. PostScriptkhông nhằm mục đích lưu trữ lâu dài và hiển thị tương tác thời gian thực các tài liệu điện tử lên màn hình máy tính, do đó không cần hỗ trợ bất kỳ thứ gì khác ngoài việc hiển thị các trang liên tiếp. Nếu có lỗi trong bản in cuối cùng, người dùng sẽ sửa lỗi ở cấp ứng dụng và gửi một tác vụ in mới dưới dạng tệp PostScript hoàn toàn mới. Do đó, bất kỳ trang nào trong tệp PostScript chỉ có thể được hiển thị chính xác dưới dạng kết quả tích lũy của việc thực hiện tất cả các lệnh trước đó để vẽ tất cả các trang trước đó—bất kỳ lệnh nào trong số đó có thể ảnh hưởng đến các trang tiếp theo—cộng với các lệnh để vẽ trang cụ thể đó và không có cách dễ dàng nào để bỏ qua quy trình đó để chuyển sang các trang khác.

Theo truyền thống, để chuyển từ PostScript sang PDF, một file PostScript nguồn (tức là một chương trình thực thi) được sử dụng làm cơ sở để tạo mã PDF giống PostScript (xem ví dụ: Adobe Distiller). Điều này được thực hiện bằng cách áp dụng các kỹ thuật biên dịch chuẩn như bỏ vòng lặp, nhúng và loại bỏ các nhánh không sử dụng, tạo ra mã hoàn toàn mang tính khai báo và tĩnh. Sau đó, kết quả được đóng gói thành định dạng chứa, cùng với tất cả các phụ thuộc cần thiết để hiển thị chính xác (các file bên ngoài, đồ họa hoặc phông chữ mà tài liệu tham chiếu đến) và được nén. Các ứng dụng hiện đại ghi vào trình điều khiển máy in tạo trực tiếp PDF thay vì phải thông qua PostScript trước.

Là một định dạng tài liệu, PDF có một số ưu điểm so với PostScript: 

- PDF chỉ chứa mã PostScript khai báo tĩnh có thể được xử lý dưới dạng dữ liệu và không yêu cầu các trình biên dịch hoặc trình thông dịch đầy đủ. Điều này tránh được sự phức tạp và rủi ro bảo mật của một công cụ có mức độ phức tạp cao hơn như vậy.
- Giống như Display PostScript, PDF đã hỗ trợ đồ họa trong suốt kể từ phiên bản 1.4, trong khi PostScript chuẩn thì không.
- PDF thực thi quy tắc rằng mã cho bất kỳ trang cụ thể nào không được ảnh hưởng đến bất kỳ trang nào khác. Quy tắc đó cũng được khuyến nghị mạnh mẽ cho mã PostScript, nhưng phải được triển khai rõ ràng (xem ví dụ: Quy ước cấu trúc tài liệu), vì PostScript là ngôn ngữ lập trình đầy đủ cho phép linh hoạt hơn và không giới hạn ở các khái niệm về trang và tài liệu.
- Tất cả dữ liệu cần thiết để hiển thị đều được bao gồm trong chính file, cải thiện khả năng di động.

Nhược điểm của nó là:

- Mất đi tính linh hoạt và giới hạn trong một trường hợp sử dụng duy nhất.
- Kích thước tệp (đôi khi lớn hơn nhiều).

PDF kể từ v1.6 hỗ trợ nhúng tài liệu 3D tương tác: Bản vẽ 3D có thể được nhúng bằng U3D hoặc PRC và nhiều định dạng dữ liệu khác.

== Định dạng file ==
File PDF được tổ chức bằng ký tự ASCII, ngoại trừ một số phần tử nhất định có thể có nội dung nhị phân. File bắt đầu bằng tiêu đề chứa magic number (dưới dạng chuỗi có thể đọc được) và phiên bản định dạng, ví dụ: codice_2. Định dạng này là tập hợp con của định dạng COS ("Carousel" Object Structure). Tệp cây COS chủ yếu bao gồm các đối tượng, trong đó có chín loại:

- Giá trị Boolean, biểu diễn đúng hoặc sai
- Số thực
- Integers
- Strings, được đặt trong dấu ngoặc đơn (codice_3) hoặc được biểu diễn dưới dạng thập lục phân trong dấu ngoặc nhọn đơn (codice_4). Chuỗi có thể chứa các ký tự 8 bit.
- Tên, bắt đầu bằng dấu gạch chéo (codice_5)
- Arrays, tập hợp các đối tượng được sắp xếp nằm trong dấu ngoặc vuông (codice_6)
- , Từ điển, tập hợp các đối tượng được lập chỉ mục theo tên nằm trong dấu ngoặc nhọn kép (codice_7)
- , thường chứa một lượng lớn dữ liệu nhị phân được nén tùy ý, đứng trước một từ điển và nằm giữa các từ codice_8 và codice_9
- Đối tượng null

Có thể chèn chú thích sử dụng ký tự 8 bit có tiền tố là dấu phần trăm (codice_10).

Đối tượng có thể là trực tiếp (được nhúng trong đối tượng khác) hoặc gián tiếp. Đối tượng gián tiếp được đánh số bằng số đối tượng và số thế hệ và được xác định giữa các từ khóa codice_11 và codice_12 nếu nằm trong gốc tài liệu. Bắt đầu từ phiên bản PDF 1.5, các đối tượng gián tiếp (trừ các luồng khác) cũng có thể nằm trong các luồng đặc biệt được gọi là luồng đối tượng (được đánh dấu là codice_13). Kỹ thuật này cho phép các đối tượng không phải luồng có bộ lọc luồng chuẩn được áp dụng cho chúng, giảm kích thước của các tệp có nhiều đối tượng gián tiếp nhỏ và đặc biệt hữu ích cho "Tagged PDF". Luồng đối tượng không hỗ trợ việc chỉ định số thế hệ của đối tượng (khác với 0).

Bảng chỉ mục, còn được gọi là bảng tham chiếu chéo, nằm gần cuối file và cung cấp độ lệch byte của mỗi đối tượng gián tiếp từ đầu file. Thiết kế này cho phép truy cập ngẫu nhiên hiệu quả vào các đối tượng trong file và cũng cho phép thực hiện các thay đổi nhỏ mà không cần ghi lại toàn bộ file (cập nhật gia tăng). Trước phiên bản PDF 1.5, bảng sẽ luôn ở định dạng ASCII đặc biệt, được đánh dấu bằng từ khóa codice_14 và theo sau phần thân chính bao gồm các đối tượng gián tiếp. Phiên bản 1.5 đã giới thiệu các luồng tham chiếu chéo tùy chọn, có dạng đối tượng luồng chuẩn, có thể áp dụng các bộ lọc. Luồng như vậy có thể được sử dụng thay cho bảng tham chiếu chéo ASCII và chứa các độ lệch và thông tin khác ở định dạng nhị phân. Định dạng này linh hoạt ở chỗ nó cho phép chỉ định độ rộng số nguyên (sử dụng mảng codice_15), do đó, ví dụ, một tài liệu có kích thước không quá 64 KiB chỉ có thể dành 2 byte cho độ lệch đối tượng.

Cuối tệp PDF có phần chân trang chứa

- Từ khóa codice_16 theo sau là một offset đến đầu bảng tham chiếu chéo (bắt đầu bằng từ khóa codice_14) hoặc đối tượng luồng tham chiếu chéo, theo sau là
- Đánh dấu hết file codice_18.

Nếu không sử dụng luồng tham chiếu chéo, phần chân trang sẽ được đặt trước bằng từ khóa codice_19 theo sau là một từ điển chứa thông tin mà nếu không thì sẽ được chứa trong từ điển của đối tượng luồng tham chiếu chéo:

- Tham chiếu đến đối tượng gốc của cấu trúc cây, còn được gọi là danh mục (codice_20)
- Số lượng đối tượng gián tiếp trong bảng tham chiếu chéo (codice_21)
- Thông tin tùy chọn khác

Trong mỗi trang, có một hoặc nhiều luồng nội dung mô tả văn bản, vectơ và hình ảnh được vẽ trên trang. Luồng nội dung dựa trên ngăn xếp, tương tự như PostScript.

Có hai bố cục cho các file PDF: không tuyến tính (không được "tối ưu hóa") và tuyến tính ("tối ưu hóa"). Các tệp PDF không tuyến tính có thể nhỏ hơn các tệp tuyến tính tương ứng của chúng, mặc dù chúng chậm hơn khi truy cập vì các phần dữ liệu cần thiết để lắp ráp các trang của tài liệu nằm rải rác trong file PDF. Các file PDF tuyến tính (còn được gọi là file PDF "tối ưu hóa" hoặc "tối ưu hóa web") được xây dựng theo cách cho phép chúng được đọc trong plugin trình duyệt Web mà không cần chờ toàn bộ file tải xuống, vì tất cả các đối tượng cần thiết để hiển thị trang đầu tiên đều được sắp xếp tối ưu khi bắt đầu file. Các tệp PDF có thể được tối ưu hóa bằng phần mềm Adobe Acrobat hoặc QPDF.

Kích thước trang không bị giới hạn bởi chính định dạng. Tuy nhiên, Adobe Acrobat áp đặt giới hạn là 15 triệu x 15 triệu inch, hoặc 225 nghìn tỉ in (145,161 km).

== Xem thêm ==
- ebook
- Web page

== Đọc thêm ==
- ISO Standards

- PDF 2.0
- PDF 2.0

- Adobe open source standards

- PDF 1.7 (ISO 32000-1:2008)
- PDF 1.7 and
- PDF 1.6 () and
- PDF 1.5 and
- PDF 1.4 () and
- PDF 1.3 () and
- PDF 1.2
- PDF 1.0 ()

- Conference papers

== Liên kết ngoài ==
- PDF Association – Hiệp hội PDF là hiệp hội công nghiệp dành cho các nhà phát triển phần mềm tạo hoặc xử lý file PDF.
- PDF Specification Index at the PDF Association
- PDF Cheat Sheets, 2nd edition by the PDF Association (last updated October 29, 2024)
- Sponsored free access to the ISO 32000-2 (PDF 2.0) bundle, including the latest core PDF specification and five ISO standardized extensions to the core specification
- Format description of the PDF family, PDF/A, PDF/X from

- Tech notes from
- – Official introductory comparison of PS, EPS vs. PDF.

- Articles

- Portable Document Format: An Introduction for Programmers (1999) from MacTech – Introduction to PDF vs. PostScript and PDF internals (up to v1.3)
- from Planet PDF that describes the paper in which John Warnock outlined the project that created PDF

- Video

- Video: Everything you wanted to know about PDF but was afraid to ask Recording of a talk by Leonard Rosenthol () at TUG 2007