Chƣơng 2 Cấu trúc chuẩn nén PDF
2.1. Tổng quan về PDF
Bao gồm tất cả mọi thứ về cú pháp của PDF vào đối tượng, tập tin, và mức độ tài liệu. Nó đặt kịch bản cho các mục, trong đó mô tả như thế nào về nội dung của một tập tin PDF được hiểu như mô tả trang, hỗ trợ tương tác định hướng và cơ cấu hợp lý ở cấp ứng dụng. Cú pháp PDF được hiểu rõ nhất bằng cách xem xét nó như là bốn phần như hình sau:
Hình 2.1: Hình cấu trúc tệp PDF.
2.1.1. Đối tƣợng
Một tài liệu PDF là một cấu trúc dữ liệu bao gồm từ một tập nhỏ các loại cơ bản của các đối tượng dữ liệu, " mô tả các bộ ký tự được sử dụng để viết các đối tượng và các yếu tố cú pháp khác. "OBJECT", mô tả cú pháp và tính chất thiết yếu của các đối tượng., "đối tượng Stream, " cung cấp đầy đủ chi tiết của các kiểu dữ liệu phức tạp nhất, các đối tượng Stream là một ví dụ.
2.1.1.1. cấu trúc tệp
Cấu trúc tệp (file structure) PDF xác định cách đối tượng được lưu trữ trong một tập tin PDF, làm thế nào chúng được truy cập, và làm thế nào chúng được cập nhật. Cấu trúc này là độc lập với ngữ nghĩa của các đối tượng.
2.1.1.2. cấu trúc tài liệu
Document structure PDF quy định cụ thể như thế nào các loại đối tượng cơ bản được sử dụng để đại diện cho các thành phần của một tài liệu PDF: Trang, font chữ, chú thích, và vv. mô tả cấu trúc tài liệu tổng thể; các phần sau giải ngữ nghĩa chi tiết của các thành phần.
3.1.1.3. Dòng nội dung
Một Content Stream PDF có chứa một chuỗi các hướng dẫn mô tả sự xuất hiện của một trang hoặc đối tượng đồ họa khác. Những hướng dẫn này, đồng thời cũng biểu diễn như là đối tượng, là khái niệm khác biệt với các đối tượng đại diện cho cấu trúc tài liệu và được mô tả một cách riêng biệt "Nội dung của Streams và Tài nguyên, " thảo luận về các Stream nội dung PDF và các tài nguyên liên quan của chúng trong các phần sau.
2.2. Các đối tƣợng Objects
PDF bao gồm tám loại cơ bản của các đối tượng: Giá trị Boolean, Integer và số thực, chuỗi, tên, mảng, Từ điển, Stream, và các đối tượng null. Boolean nhận hai giá trị true và False. Một số nguyên được viết như một hoặc nhiều chữ số thập phân tùy chọn trước bởi một dấu. Giá trị được hiểu như một số nguyên thập phân đã ký và phải được chuyển đổi sang một đối tượng số nguyên.
2.2.1. Đối tƣợng String
Một đối tượng String sẽ chứa đựng một dãy số 0 hoặc nhiều byte, đối tượng String không phải là đối tượng số nguyên, nhưng được chứa trong một định dạng nén.
2.2.2. Đối tƣợng Mảng
Một đối tượng mảng là một tập hợp một chiều của các đối tượng được sắp xếp tuần tự. Không giống như các mảng trong nhiều ngôn ngữ máy tính khác, mảng PDF có thể không đồng nhất, có nghĩa là, các phần tử của một mảng có thể là sự kết hợp của các số, chuỗi, từ điển, hoặc bất kỳ đối tượng khác, bao gồm các mảng khác. Một mảng có thể không có các phần tử. Một mảng được viết như là một chuỗi các đối tượng được đặt trong dấu ngoặc vuông (sử dụng móc vuông trái (5Bh) và móc vuông phải (5DH)). Ví dụ [549 3.14 sai (Ralph) / somename]. PDF trực tiếp chỉ hỗ trợ mảng một chiều. Mảng có kích thước cao hơn có thể được xây dựng bằng cách sử dụng các mảng như các phần tử của mảng, lồng vào nhau để bất kỳ độ sâu nào.
2.2.3. Đối tƣợng từ điển
Một đối tượng từ điển là một bảng kết hợp chứa các cặp của các đối tượng, được gọi là các mục của từ điển. Yếu tố đầu tiên của mỗi mục là chìa khóa và yếu tố thứ hai là giá trị. Chìa khóa sẽ là một tên (không giống như khóa từ điển trong PostScript, có thể là đối tượng bất kỳ cách nào). Giá trị có thể là bất kỳ loại đối tượng, bao gồm cả từ điển khác. Một mục từ điển có giá trị là null ("đối tượng Null") được xem như là nếu mục không tồn tại. (Điều này khác với
PostScript, nơi vô giá trị hoạt động như bất kỳ đối tượng khác là giá trị của một mục từ điển.) Số lượng các mục trong từ điển phải chịu giới hạn thực hiện; Một từ điển có mục không (0);
2.2.4. Đối tƣợng Stream
Một Đối tượng Stream, giống như một đối tượng chuỗi là một chuỗi các byte. Hơn nữa, một dòng có thể có chiều dài không giới hạn, trong khi một chuỗi phải chịu giới hạn thực hiện. Vì lý do này, các đối tượng với số lượng có tiềm năng lớn của dữ liệu, chẳng hạn như hình ảnh và mô tả trang, được biểu diễn như là Stream. Ví dụ Một hình ảnh với 10 hàng và 20 cột, sử dụng một thành phần màu duy nhất và 8 bit cho mỗi thành phần, đòi hỏi chính xác 200 byte dữ liệu hình ảnh. Nếu Stream sử dụng một bộ lọc, có phải đủ byte dữ liệu được mã hóa trong các tập tin PDF để sản xuất những 200 byte. Lỗi xảy ra nếu Chiều dài quá nhỏ, nếu một EOD đánh dấu rõ ràng xảy ra quá sớm, hoặc nếu dữ liệu được giải mã không chứa 200 byte.
2.3. Mô tả chi tiết cấu trúc tệp
Mục này mô tả cách đối tượng được tổ chức trong một tập tin PDF cho truy cập ngẫu nhiên hiệu quả và cập nhật gia tăng. Một tập tin PDF Tuân thủ cơ bản được xây dựng trong bốn yếu tố sau đây :
Một tiêu đề line xác định các phiên bản của đặc tả PDF mà chiếu theo tập tin; Body chứa các đối tượng tạo nên tài liệu chứa trong tập tin;
Một bảng tham chiếu chéo có chứa thông tin về các đối tượng gián tiếp trong các tập tin;
Hình 2.2: Mô tả cấu trúc tệp
Một trailer cho vị trí của bảng tham chiếu chéo và của một số đối tượng đặc biệt trong Body của các tập tin. Cấu trúc ban đầu này có thể được sửa đổi bằng cách cập nhật sau đó, mà thêm các yếu tố bổ sung cho sự kết thúc của tập tin.
2.3.1. Phần đầu
Dòng đầu tiên của một tập tin PDF sẽ là một tiêu đề bao gồm các ký tự 5 ―%‖ PDF, tiếp theo là cách ghi một số phiên bản của 1.N hình thức, trong đó N là một chữ số từ 0 đến 7. Một đầu đọc phù hợp sẽ chấp nhận các tập tin với bất kỳ tiêu đề sau đây:
%PDF–1. 0 %PDF–1. 1 %PDF–1. 2 %PDF–1. 3 %PDF–1. 4 %PDF–1. 5 %PDF–1. 6 %PDF–1. 7
Bắt đầu với PDF 1.4, mục Version trong danh mục từ điển của tài liệu (nằm qua mục gốc trong trailer của tập tin, như mô tả trong "Tệp Trailer"), nếu có, sẽ được sử dụng thay vì phiên bản được quy định trong tiêu đề.
2.3.2. Phần thân tệp
Một tập tin PDF sẽ bao gồm một chuỗi các đối tượng gián tiếp đại diện các nội dung của một tài liệu. Các đối tượng, trong đó có các loại cơ bản được mô tả trong "đối tượng", đại diện cho các thành phần của tài liệu như font chữ, các Page, và hình ảnh mẫu. Bắt đầu với PDF 1.5, Phần thân cũng có thể chứa các đối tượng Stream mỗi trong số đó có chứa một chuỗi các đối tượng gián tiếp, xem "đối tượng Streams".
2.3.3. Bảng tham chiếu chéo
Bảng tham chiếu chéo chứa thông tin cho phép truy cập ngẫu nhiên các đối tượng gián tiếp trong các tập tin để toàn bộ tập tin không cần phải đọc để xác định vị trí bất kỳ đối tượng cụ thể. Bảng phải có một mục line cho từng đối tượng gián tiếp, xác định số byte của đối tượng đó trong Body của tập tin. (Bắt đầu với PDF 1.5, một số hoặc tất cả các thông tin tham chiếu chéo có thể cách khác được chứa trong Stream tham chiếu chéo Xem thêm, "Cross-Reference Streams‖. Bảng tham chiếu chéo là phần duy nhất của một tập tin PDF với một định dạng cố định, cho phép các mục trong bảng để được truy cập ngẫu nhiên;
2.3.4. Cập nhật gia tăng
Các nội dung của một tập tin PDF có thể được cập nhật từng bước mà không cần viết lại toàn bộ tập tin. Khi cập nhật một tập tin PDF từng bước, thay đổi sẽ được nối vào cuối của tập tin, để lại nội dung ban đầu của nó còn nguyên vẹn. Ưu điểm chính để cập nhật một tập tin theo cách này là những thay đổi nhỏ để một tài liệu lớn có thể được lưu một cách nhanh chóng. Có lợi thế bổ sung: Trong hoàn cảnh nhất định, chẳng hạn như khi chỉnh sửa một tài liệu trên một kết nối HTTP hoặc sử dụng OLE nhúng (một công nghệ đặc trưng cho Windows), phù
hợp không thể ghi đè lên nội dung của tập tin gốc. Cập nhật cộng dồn có thể được sử dụng để lưu các thay đổi tài liệu trong bối cảnh này.
Hình 2.3: Cấu trúc tệp có gia tăng Cập nhật.
Ví dụ mỗi trang của tài liệu được đại diện bởi một đối tượng một trang từ điển bao gồm tài liệu tham khảo nội dung của trang và các thuộc tính khác, chẳng hạn như hình ảnh của mình trước ("Hình thu nhỏ hình ảnh") và bất kỳ chú thích ("Annotations" ) liên kết với nó. Các đối tượng trang cá nhân được gắn với nhau trong một cấu trúc được gọi là cây trang (được mô tả trong "Page Tree"), do đó được xác định bởi một tham chiếu gián tiếp trong danh mục tài liệu. Cha mẹ, con, anh chị em và các mối quan hệ các đối tượng trong PDF.
2.3.5. Cây trang
Các trang của một tài liệu được truy cập thông qua một cấu trúc được gọi là cây trang, trong đó xác định thứ tự của các trang trong tài liệu. Bằng cách sử dụng cấu trúc cây, phù hợp với đầu đọc chỉ sử dụng bộ nhớ hạn chế, có thể nhanh chóng mở một tài liệu có chứa hàng ngàn trang. Cây có chứa các nút của hai loại trung cấp các nút, được gọi là các nút cây trang, và các nút lá, được gọi là trang đối tượng-có hình thức được mô tả trong các điểm tiếp theo. Phù hợp với sản phẩm này sẽ được chuẩn bị để xử lý bất kỳ hình thức cấu trúc cây xây dựng các nút như vậy. Chú thích cấu trúc đơn giản nhất có thể bao gồm một nút cây trang duy nhất mà tài liệu tham khảo tất cả các trang của tài liệu đối tượng trực tiếp. Tuy nhiên, để tối ưu hóa hiệu suất ứng dụng, phù hợp với một writer có thể xây dựng cây của một hình thức đặc biệt, được gọi là cây cân bằng. Thông tin thêm về hình thức cây có thể được tìm thấy trong cấu trúc dữ liệu và giải thuật, bởi Aho, Hopcroft và Ullman.
2.3.6. Đối tƣợng trang
Page OBbject Là được phân cấp theo sơ đồ hình cây gọi là: ‖Cây trang‖ là các đối tượng trang, mỗi trong số đó là một từ điển xác định các thuộc tính của một trang duy nhất của tài liệu.
2.3.7. Thừa kế thuộc tính trang
Một số các thuộc tính trang trình bày trong bảng sau được chỉ định là di truyền. Nếu một thuộc tính như vậy được bỏ qua từ một đối tượng trang, giá trị của nó được thừa hưởng từ tổ tiên một nút trong cây trang. Nếu thuộc tính là một trong những yêu cầu, một giá trị được cung cấp bằng một nút tổ tiên. Nếu thuộc tính là tùy chọn và không có giá trị thừa kế được chỉ định, giá trị mặc định sẽ được sử dụng. Một thuộc tính do đó có thể được xác định một lần cho một tập hợp toàn bộ các trang bằng cách xác định nó trong một nút cây trang trung gian và sắp xếp các trang chia sẻ các thuộc tính như con cháu của nút đó. Hình sau minh họa thừa kế các thuộc tính. Trong cây trang hiển thị, trang 1, 2, và 4 được xoay chiều kim đồng hồ 90 độ, trang 3 của 270 độ, trang 6 180 độ, và các trang 5 và 7 quay ở (0 độ).
Hình 2.4: Kế thừa các thuộc tính của trang.
2.3.8. Dòng nội dung và tài nguyên
2.3.8.1. Dòng nội dung
Là phương tiện chính để mô tả sự xuất hiện của các trang và các yếu tố đồ họa khác. Một dòng nội dung phụ thuộc vào thông tin chứa trong một từ điển tài nguyên liên quan; kết hợp, các đối tượng tạo thành một thực thể khép kín. Điều khoản phụ này mô tả các đối tượng này.
2.3.8.2. đối tượng dòng
Là một đối tượng dòng PDF có dữ liệu bao gồm một chuỗi các hướng dẫn mô tả yếu tố đồ họa được vẽ trên một trang. Các hướng dẫn sẽ được biểu diễn dưới dạng các đối tượng PDF, sử dụng cú pháp cùng một đối tượng như trong phần còn lại của các tài liệu PDF. Tuy nhiên, trong khi các tài liệu như một toàn thể là một tĩnh, cấu trúc dữ liệu truy cập ngẫu nhiên, các đối tượng trong dòng nội dung được hiểu và thực thi tuần tự.
2.3.8.3. Từ điển tài nguyên
Như đã nêu ở trên, các toán hạng cung cấp cho các nhà khai thác trong một dòng nội dung thì chỉ được các đối tượng trực tiếp; các đối tượng gián tiếp và tài liệu tham khảo đối tượng không được phép. Trong một số trường hợp, một Operator sẽ đề cập đến một đối tượng PDF được định nghĩa bên ngoài dòng nội dung, chẳng hạn như một từ điển chữ hoặc một dòng chứa dữ liệu hình ảnh. Này được thực hiện bằng cách xác định các đối tượng như các nguồn tài nguyên được đặt tên và đề cập đến tên của họ từ bên trong dòng nội dung. Tài nguyên được đặt tên sẽ chỉ có ý nghĩa trong bối cảnh của một dòng nội dung. Phạm vi của một tên tài nguyên được cho một dòng nội dung cụ thể và sẽ không liên quan đến bên ngoài biết đến định danh cho các đối tượng như font chữ. Tài liệu tham khảo từ một đối tượng bên ngoài của nội dung Stream khác bên ngoài của Stream nội dung được thực hiện bằng cách tham chiếu đối tượng gián tiếp chứ không phải là nguồn tài nguyên được đặt tên.
2.3.9. Đối tƣợng String
PDF hỗ trợ một đối tượng chuỗi cơ bản ("String Object"). Các đối tượng chuỗi sẽ được tiếp tục đủ điều kiện như là một chuỗi văn bản, một chuỗi PDFDocEncoded, chuỗi ký tự ASCII, hoặc byte chuỗi. Trình độ chuyên môn tiếp tục phản ánh mã hóa được sử dụng để đại diện cho các nhân vật hoặc glyphs mô tả bởi chuỗi. Chú thích Loại chuỗi văn bản là một subtype của loại dây và đại diện cho dữ liệu được mã hóa bằng cách sử dụng quy ước cụ thể;
Loại chuỗi văn bản được sử dụng cho các chuỗi ký tự đó sẽ được mã hóa trong một trong hai PDFDocEncoding hoặc các chương trình mã hóa ký tự Unicode UTF-16BE. PDFDocEncoding có thể mã hóa tất cả các tiêu chuẩn ISO Latin 1 ký tự và là tài liệu trong Phụ lục D. UTF-16BE có thể mã hóa tất cả các ký tự Unicode. UTF-16BE và Unicode mã hóa ký tự được mô tả trong tiêu chuẩn Unicode bằng Unicode Consortium;
PDFDocEncoding không hỗ trợ tất cả các ký tự Unicode trong khi UTF-16BE cho chuỗi văn bản được mã hóa trong Unicode, hai byte đầu tiên được 254 tiếp theo 255. Hai byte đại diện cho Unicode để byte đánh dấu, U + FEFF, chỉ ra rằng chuỗi được mã hóa trong UTF- 16BE (về cuối lớn) chương trình mã hóa được quy định trong tiêu chuẩn Unicode.
2.3.10. Đối tƣợng Rectangles
Hình chữ nhật được sử dụng để mô tả các vị trí trên một trang và khung giới hạn cho một loạt các đối tượng. Một hình chữ nhật được ghi như là một mảng của bốn số cho các tọa độ của một cặp góc đối diện. Mặc dù hình chữ nhật thông thường được quy định bởi góc dưới bên trái và bên phải phía trên của chúng, đó là chấp nhận được để xác định bất kỳ hai góc đối diện. Các ứng dụng quá trình PDF cần được chuẩn bị để bình thường hóa hình chữ nhật như vậy trong trường hợp góc cụ thể là bắt buộc.
2.4. Đồ họa
Các toán tử Graphic được sử dụng trong các dòng nội dung PDF mô tả sự xuất hiện của trang đó sẽ được sao chép vào một thiết bị đầu ra raster. Các cơ sở mô tả trong mục này được