ข้ามไปยังเนื้อหา

PDF 2.0: สิ่งที่เปลี่ยนไป

Evidence: Standard-backed

PDF 2.0 คือ ISO 32000-2 ข้อกำหนด PDF ฉบับนี้เป็นฉบับแรกที่อยู่ภายใต้การดูแลของ ISO ทั้งหมด แทนที่จะเป็น Adobe โดยส่วนใหญ่แล้วเป็น การรวบรวมและจัดระเบียบ 1.7 มากกว่าการคิดค้นใหม่ทั้งหมด หน้านี้ครอบคลุมสิ่งที่เปลี่ยนไปจริง การเปลี่ยนแปลงใดส่งผลในทางปฏิบัติ และ NextPDF ตั้งเป้าเส้นฐาน 2.0 เป็นค่าเริ่มต้นอย่างไร พร้อมกับยังเขียนโครงสร้างไฟล์รุ่นเก่าได้เมื่อโปรไฟล์เรียกร้อง

“PDF 2.0” ฟังเหมือนควรเป็นรูปแบบที่แตกต่างออกไป แต่ไม่ใช่ ไฟล์ 2.0 ใช้โมเดลออบเจกต์ xref และเทรลเลอร์เดียวกันกับ 1.7 จึงทำให้การเปลี่ยนแปลงที่แท้จริงถูกมองข้ามได้ง่าย การเปลี่ยนแปลงที่มักก่อให้เกิดปัญหาไม่ใช่คุณสมบัติเด่นที่ถูกพูดถึง แต่คือ การกำหนดให้เข้มงวดขึ้น: กฎที่เคยเป็นตัวเลือกใน 1.7 แต่ตอนนี้กลายเป็นสิ่งที่คาดหวัง และคุณสมบัติที่ถูก นำออก ไปอย่างเงียบๆ เอกสารที่เคยเป็นไฟล์ 1.7 ที่ถูกต้องสมบูรณ์อาจกลายเป็นไฟล์ 2.0 ที่ไม่เป็นไปตามข้อกำหนดได้โดยไม่มีความแตกต่างที่มองเห็นได้แม้แต่จุดเดียว

อีกเหตุผลหนึ่งคือทิศทางของ NextPDF เป็นเอนจิน PDF 2.0 เมื่อทราบว่า 2.0 คาดหวังอะไร และจุดที่ 2.0 จงใจแตกต่างจาก 1.7 ก็จะอธิบายได้ว่าเหตุใดเอนจินจึงปฏิเสธบางรายการ ฝังฟอนต์อย่างเข้มงวดขึ้น และเลือกใช้สตรีมการอ้างอิงไขว้เป็นค่าเริ่มต้นแทนตาราง

  • PDF 2.0 = ISO 32000-2 อยู่ภายใต้ ISO ต่อยอดจาก (ไม่ได้แทนที่) 1.7
  • ส่วนหัวจะกลายเป็น %PDF-2.0 ตัวเขียนไฟล์ที่เป็นไปตามข้อกำหนดจะระบุเวอร์ชันเป็น 2.0 ในส่วนหัว หรือ ในแคตาล็อก /Version ของเอกสาร
  • โครงสร้างไฟล์ส่วนใหญ่ ไม่เปลี่ยนแปลง — ออบเจกต์ทางอ้อมแบบเดียวกัน เทรลเลอร์แบบเดียวกัน วินัยของ startxref/%%EOF แบบเดียวกัน
  • การอ้างอิงไขว้แบบ สตรีม คือค่าเริ่มต้นโดยธรรมชาติของ 2.0 ส่วนตารางขนาด 20 ไบต์แบบดั้งเดิมยังคงถูกต้องตามกฎและยังคงจำเป็นสำหรับบางโปรไฟล์ PDF/A
  • 2.0 เพิ่ม สิ่งต่างๆ (ตัวอย่างเช่น โครงสร้างไฟล์ที่เกี่ยวข้องและส่วนต่างๆของเอกสารที่สมบูรณ์ยิ่งขึ้น การเข้ารหัสลับที่แข็งแกร่งขึ้นผ่านส่วนขยาย AES-256-GCM) และ นำออก สิ่งต่างๆ (แท็กโครงสร้างบางส่วน การคาดหวังการฝังฟอนต์ที่เข้มงวดขึ้น คอลเลกชันอักขระ CJK ที่เลิกใช้แล้ว)
  • NextPDF มุ่งเป้าไปที่ 2.0 เป็นค่าเริ่มต้น และสามารถซีเรียลไลซ์โครงสร้าง 1.7/1.4 ได้เมื่อโปรไฟล์ความสอดคล้องเรียกร้อง

เวอร์ชันคือ การตัดสินใจ ที่แสดงออกในจุดเดียว นั่นคือกลยุทธ์การซีเรียลไลซ์

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) เขียนส่วนหัว %PDF-2.0 ระบุ /2.0 เป็นเวอร์ชันของแคตาล็อก และส่งออก สตรีม การอ้างอิงไขว้แบบบีบอัด นอกจากนี้ยังนำข้อกำหนดด้านฟอนต์ที่เข้มงวดขึ้นของ 2.0 มาใช้โดยตรง เมื่ออยู่ภายใต้โปรไฟล์ 2.0 กลยุทธ์นี้สามารถ บังคับใช้ กฎกับฟอนต์ Type 1 มาตรฐานที่ไม่ได้ฝัง แทนที่จะเพียงเตือนเท่านั้น เพราะข้อกำหนดตอนนี้คาดหวังให้มีการฝังฟอนต์เหล่านั้น กลยุทธ์ตารางทั้งสอง (Pdf17TableStrategy, Pdf14TableStrategy) มีอยู่เพราะบางโปรไฟล์ต้องการรูปแบบเดิม PDF/A-2/-3 กำหนดให้ใช้ตารางการอ้างอิงไขว้แบบดั้งเดิม และ PDF/A-1 ยังห้ามใช้สตรีมออบเจกต์และสตรีมการอ้างอิงไขว้เพิ่มเติมด้วย กลยุทธ์ทั้งสามนำอินเทอร์เฟซ PdfSerializationStrategy เดียวกันไปใช้งาน ดังนั้นตัวเขียนชั้นบนจึงเหมือนเดิม มีเพียงรูปแบบของ trailer/xref เท่านั้นที่เปลี่ยนแปลง

การเข้ารหัสลับที่แข็งแกร่งขึ้นถูกผูกเข้ากับระบบด้วยแนวทางเดียวกันอย่างตั้งใจ PdfXrefWriter (src/Writer/PdfXrefWriter.php) ส่งต่อการเลือกใช้ AES-256-GCM (ส่วนขยาย ISO/TS 32003 สำหรับ 2.0) เข้าไปในพจนานุกรมการเข้ารหัสลับ เพื่อให้รายการเวอร์ชันของตัวจัดการและโหมดของรหัสที่ส่งออกตรงกับไบต์ที่สร้างขึ้นจริง เอนจินจะไม่ประกาศรหัสหนึ่งแล้วเขียนอีกรหัสหนึ่ง

การออกแบบโดยรวมเป็นดังนี้ 2.0 เป็นค่าเริ่มต้น โครงสร้างรุ่นเก่าเข้าถึงได้โดยตั้งใจ ไม่ใช่โดยบังเอิญ และในจุดที่ 2.0 กำหนดกฎให้เข้มงวดขึ้น NextPDF สามารถยึดแนวทางที่เข้มงวดนั้นไว้ แทนที่จะผ่อนปรนลงอย่างเงียบๆ

  1. Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
  2. Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
  3. Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
สายตระกูลเวอร์ชัน PDF ที่ NextPDF ใช้พิจารณา: PDF 1.7 กลายเป็นฐานของ ISO ISO 32000-2 คือ PDF 2.0 และ ISO/TS 32003 ขยาย 2.0 ด้วยการเข้ารหัสลับ AES-256-GCM

ข้อความระบุเวอร์ชันเป็นข้อกำหนดเชิงบรรทัดฐาน Spec: ISO 32000-2, §7.5.2 ระบุว่าตัวประมวลผลที่เขียนไฟล์ที่เป็นไปตามข้อกำหนด จะต้อง ระบุเวอร์ชัน — ไม่ว่าจะในส่วนหัวหรือเป็นรายการ /Version ในแคตาล็อก — เป็น 2.0 และส่วนหัวคือ %PDF-1.n หรือ %PDF-2.n ตามด้วยเครื่องหมายสิ้นสุดบรรทัดเพียงตัวเดียว Spec: ISO 32000-2, §7.7.2 เพิ่มเติมว่าแคตาล็อก /Version มีผลแทนเวอร์ชันในส่วนหัวที่ระบุก่อนหน้า ซึ่งเป็นสิ่งที่ทำให้ การยกระดับเวอร์ชันแบบเพิ่มทีละขั้นเป็นไปได้ Evidence: Standard-backed

การที่ 2.0 เป็นการรวม ไม่ใช่การเขียนใหม่ เห็นได้จากสิ่งที่ 2.0 คงไว้: สตรีมการอ้างอิงไขว้ (/Type /XRef) เป็นกลไกเดียวกันกับที่นำมาใช้ใน PDF 1.5 และสืบทอดต่อมาเป็นค่าเริ่มต้นของ 2.0 ( Spec: ISO 32000-2, §7.5.8 ) โครงสร้างของออบเจกต์ทางอ้อม เทรลเลอร์ และ startxref ไม่เปลี่ยนแปลงไปจากคำอธิบายในหน้าก่อนหน้า

การเปลี่ยนแปลงที่สำคัญคือการนำออกและการกำหนดให้เข้มงวดขึ้น ข้อกำหนดบันทึกไว้ว่าองค์ประกอบโครงสร้างมาตรฐานหกรายการที่มีอยู่ในเนมสเปซโครงสร้างมาตรฐานของ PDF 1.7 ไม่ เป็นส่วนหนึ่งของเนมสเปซ PDF 2.0 — Art, BlockQuote, TOC, Reference, BibEntry และ Code ( Spec: ISO 32000-2, Annex L.3 โดยมีความแตกต่างของเนมสเปซที่นิยามไว้ตาม Spec: ISO 32000-2, §14.8.6 ) นอกจากนี้ยังเข้มงวดขึ้นกับฟอนต์ Type 1 มาตรฐานสิบสี่ตัว: ในจุดที่ 1.0–1.7 อนุญาตให้พจนานุกรมของฟอนต์ละเว้นรายการ metrics ได้ 2.0 ปิดการอนุญาตนั้น ( Spec: ISO 32000-2, §9.6.2.1 ) และยังปรับปรุงคอลเลกชันอักขระ CJK ที่กำหนดไว้ล่วงหน้าด้วย ตัวอย่างเช่น Adobe-Korea1 ถูกเลิกใช้ใน 2.0 Adobe-KR ถูกเพิ่มเข้ามา ไม่มีสิ่งใดเหล่านี้เปลี่ยนลักษณะที่ปรากฏของหน้าเดิม แต่ทั้งหมดสามารถเปลี่ยนได้ว่าหน้านั้นเป็นไปตามข้อกำหนดหรือไม่

หมวดหมู่ตัวอย่าง (2.0 เทียบกับ 1.7)เปลี่ยนลักษณะที่ปรากฏหรือไม่เหตุใดจึงสำคัญ
ไม่เปลี่ยนแปลงออบเจกต์ทางอ้อม เทรลเลอร์ startxref/%%EOF สตรีม xref2.0 ใช้โมเดลออบเจกต์เดียวกัน เครื่องมือส่วนใหญ่ใช้งานต่อได้
เพิ่มโครงสร้างไฟล์ที่เกี่ยวข้อง / ส่วนของเอกสารที่สมบูรณ์ยิ่งขึ้น การเข้ารหัสลับ AES-256-GCM (ISO/TS 32003)ไม่ความสามารถใหม่ที่เลือกใช้ได้ ตัวอ่านรุ่นเก่าจะข้ามไปอย่างปลอดภัย
กำหนดเข้มงวดขึ้นคาดหวังให้ฝังฟอนต์ Standard-14 ไม่สามารถละเว้น metrics ได้อีกต่อไปไม่ไฟล์ 1.7 ที่ถูกต้องอาจเป็นไฟล์ 2.0 ที่ไม่เป็นไปตามข้อกำหนด
นำออกองค์ประกอบโครงสร้างเนมสเปซ 1.7 หกรายการ (Art, BlockQuote, TOC, Reference, BibEntry, Code) คอลเลกชัน CJK ที่เลิกใช้ (ตัวอย่างเช่น Adobe-Korea1)ไม่เงียบ: ไม่มีสิ่งใดที่มองเห็นได้บ่งบอกถึงความสอดคล้องที่สูญเสียไป

การเปลี่ยนแปลงสำคัญส่วนใหญ่ของ PDF 2.0 มองไม่เห็น: สิ่งที่เพิ่มเข้ามาซึ่งเลือกใช้ได้ และการกำหนดให้เข้มงวดขึ้น/การนำออกที่เปลี่ยนความสอดคล้องโดยไม่เปลี่ยน พิกเซลที่เรนเดอร์ออกมาแม้แต่จุดเดียว

ความแตกต่างที่ มองเห็นได้ ระหว่างไฟล์ 2.0 กับไฟล์ 1.7 มักมีเพียงสองบรรทัด — ส่วนหัวและเวอร์ชันของแคตาล็อก — แม้ว่ากฎความสอดคล้องที่อยู่เบื้องหลังจะแตกต่างกันอย่างมาก

%PDF-2.0 % was %PDF-1.7
...
1 0 obj
<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later
/Pages 2 0 R >>
endobj
...
% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)
99 0 obj
<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>
stream
<binary xref entries>
endstream
endobj
startxref
12345
%%EOF

ตัวอ่านเห็น %PDF-2.0 และ /Version /2.0 สิ่งที่ตัวอ่าน ไม่ เห็น — และสิ่งที่ตัวตรวจสอบความสอดคล้องเห็น — คือขณะนี้ไฟล์นี้ถูกคาดหวังให้ฝังฟอนต์มาตรฐานและต้องไม่ใช้แท็กโครงสร้างที่ 2.0 นำออกไปแล้ว ไบต์ที่แตกต่างกันมีเพียงไม่กี่ไบต์ แต่กฎที่แตกต่างกันนั้นไม่ใช่เรื่องเล็ก

กับดักคือ “เราส่งออก PDF 2.0 ดังนั้นเราจึงเป็นไปตามข้อกำหนดมากขึ้น” การเขียน %PDF-2.0 เป็น การกล่าวอ้าง ไม่ใช่การรับประกัน ไฟล์สามารถมีส่วนหัว 2.0 และยังคงละเมิด 2.0 ได้ — ด้วยการอ้างอิงถึงฟอนต์มาตรฐานที่ไม่ได้ฝัง หรือด้วยการใช้คุณสมบัติที่ 2.0 นำออกไปแล้ว — ในรูปแบบที่อาจยอมรับได้ภายใต้ 1.7 เครื่องหมายระบุเวอร์ชันยกระดับมาตรฐานที่ใช้วัดไฟล์นั้นให้สูงขึ้น แต่ไม่ได้ทำให้ไฟล์ผ่านมาตรฐานนั้นโดยอัตโนมัติ ข้อผิดพลาดอีกด้านหนึ่งคือการสมมติว่าไฟล์ 1.7 กลายเป็น 2.0 ได้ด้วยการเปลี่ยนส่วนหัว: โดยทั่วไปแล้วจะเรนเดอร์ออกมาเหมือนกันแต่ ไม่ผ่านความสอดคล้อง เพราะกฎที่เข้มงวดขึ้นยังมีผล แม้จะมองไม่เห็นในผลลัพธ์ก็ตาม

การมุ่งเป้าไปที่เส้นฐาน 2.0 หมายความว่า NextPDF ใช้โครงสร้างไฟล์ 2.0 เป็นค่าเริ่มต้นและสามารถยึดกฎที่เข้มงวดขึ้นของ 2.0 ไว้ได้ สิ่งนี้ ไม่ได้ หมายความว่าทุกคุณสมบัติทางเลือกของ 2.0 ถูกนำมาใช้แล้ว และไม่ได้หมายความว่าการส่งออกส่วนหัว 2.0 จะรับรองว่าเอกสารผ่าน PDF/A, PDF/UA หรือโปรไฟล์อื่นใด สิ่งเหล่านั้นเป็นเป้าหมายความสอดคล้องที่แยกต่างหากและเข้มงวดกว่า ซึ่งซ้อนทับอยู่บนข้อกำหนดพื้นฐาน โดยแต่ละเป้าหมายมีการตรวจสอบความถูกต้องของตนเอง

หน้านี้เป็นแนวทางในทางปฏิบัติเกี่ยวกับความแตกต่างของเวอร์ชัน ไม่ใช่รายการเปลี่ยนแปลงทั้งหมดของ ISO 32000-2 เทียบกับ 32000-1 ในจุดที่คุณสมบัติเฉพาะของ 2.0 หรือการเลิกใช้กำกับพฤติกรรมของเอนจิน พฤติกรรมนั้นจะอ้างอิงข้อกำหนดเฉพาะของเรื่องนั้น หน้านี้ให้ภาพรวมของบริบท มากกว่าการระบุความแตกต่างในระดับข้อกำหนดทุกรายการ

PDF 2.0 เข้ากันย้อนหลังกับตัวอ่าน 1.7 หรือไม่ ส่วนใหญ่เข้ากันได้ สำหรับโครงสร้างที่ไม่เปลี่ยนแปลง คุณสมบัติใหม่ของ 2.0 โดยทั่วไปได้รับการออกแบบมาเพื่อให้ตัวอ่านรุ่นเก่าสามารถข้ามสิ่งที่ไม่เข้าใจได้ แต่ตัวอ่าน 1.7 จะไม่รองรับคุณสมบัติที่มีเฉพาะใน 2.0

ส่วนหัวหรือ /Version ในแคตาล็อกมีผลเหนือกว่า /Version ในแคตาล็อกมีผลเหนือกว่าเมื่อระบุเวอร์ชันที่ ใหม่กว่า ส่วนหัว นี่คือสิ่งที่ทำให้การอัปเดตแบบเพิ่มทีละขั้นยกระดับเวอร์ชันของไฟล์ได้โดยไม่ต้องเขียนส่วนหัวใหม่

เหตุใด NextPDF จึงใช้สตรีมการอ้างอิงไขว้เป็นค่าเริ่มต้น ไม่ใช่ตาราง สตรีมการอ้างอิงไขว้เป็นกลไกหลักของ PDF 2.0 — กะทัดรัดและสามารถจัดทำดัชนีออบเจกต์ที่บีบอัดได้ ตารางขนาด 20 ไบต์ยังคงถูกเขียนเมื่อโปรไฟล์ (โดยเฉพาะ PDF/A บางระดับ) เรียกร้อง

  • PDF คืออะไรกันแน่ — โมเดลออบเจกต์และ xref ที่ PDF 2.0 คงไว้จาก 1.7
  • ภูมิทัศน์ของมาตรฐาน — ตำแหน่งของ ISO 32000-2 ท่ามกลางมาตรฐานที่ NextPDF ติดตาม และข้อกำหนดกลายเป็นพฤติกรรมได้อย่างไร
  • ฟอนต์: ส่วนที่ยาก — ข้อกำหนดการฝังฟอนต์ที่เข้มงวดขึ้นเป็นหนึ่งในการเปลี่ยนแปลงของ 2.0 ที่สัมผัสได้จริง
  • PDF 2.0 — ข้อกำหนด PDF ที่กำหนดเป็นมาตรฐานในชื่อ ISO 32000-2 ฉบับแรกที่ ISO เป็นเจ้าของแทนที่จะเป็น Adobe
  • ISO 32000-1 — การกำหนดมาตรฐานโดย ISO ของ PDF 1.7 ของ Adobe ซึ่งเป็นฐานที่ PDF 2.0 ต่อยอดมา
  • ISO/TS 32003 — ข้อกำหนดทางเทคนิคที่ขยาย PDF 2.0 ด้วยการเข้ารหัสลับ AES-256-GCM (AESV4)
  • /Version ในแคตาล็อก — รายการในแคตาล็อกของเอกสารที่ระบุเวอร์ชัน PDF และมีผลแทนส่วนหัวเมื่อระบุเวอร์ชันที่ใหม่กว่า
  • สตรีมการอ้างอิงไขว้ — กลไกการอ้างอิงไขว้ของ PDF 1.5+ / 2.0 (/Type /XRef) เป็นค่าเริ่มต้นของ NextPDF โดยตารางแบบดั้งเดิมยังคงใช้ได้สำหรับโปรไฟล์รุ่นเก่า
  • การกำหนดให้เข้มงวดขึ้น — กฎที่เคยเป็นตัวเลือกหรือได้รับอนุญาตใน 1.7 และเป็นสิ่งที่คาดหวังหรือจำเป็นใน 2.0 ซึ่งเปลี่ยนแปลงความสอดคล้องโดยไม่เปลี่ยนแปลงลักษณะที่ปรากฏ