PDF 2.0 baseline: ข้อกำหนดของ ISO 32000-2 ที่ NextPDF นำมาใช้
โดยสรุป
หัวข้อที่มีชื่อว่า “โดยสรุป”คำชี้แจงขอบเขต NextPDF นำข้อกำหนดที่อ้างถึงมาใช้งาน ส่วนความสอดคล้อง ตาม ISO 32000-2 นั้นไม่ได้รับการยืนยันในฐานะข้อกล่าวอ้างที่ครอบคลุมทั้งหมด
ISO 32000-2:2020 เป็นมาตรฐานพื้นฐานของ PDF 2.0 โดยค่าเริ่มต้น NextPDF Core สร้างผลลัพธ์เป็น PDF 2.0 แบบไม่มีข้อจำกัด (ConformanceMode::Plain) โดยประกอบด้วยส่วนหัว %PDF-2.0 เอกสาร catalog โครงสร้างการอ้างอิงไขว้ และ trailer ที่สอดคล้องตามมาตรฐาน หน้านี้บันทึกข้อกำหนดพื้นฐานที่ NextPDF นำมาใช้งาน พร้อมขอบเขตที่ระบุไว้อย่างชัดเจน ไลบรารีนำข้อกำหนดที่อ้างถึงมาใช้งาน แต่ไม่กล่าวอ้างแบบครอบคลุมทั้งหมดว่า “สอดคล้องกับ ISO 32000-2 อย่างสมบูรณ์” ไฟล์ที่สอดคล้องตามมาตรฐานคือไฟล์ที่โปรแกรมอ่านซึ่งสอดคล้องตามมาตรฐานสามารถประมวลผลได้ภายใต้มาตรฐานนั้น การตัดสินนี้เป็นหน้าที่ของเครื่องมือตรวจสอบ ไม่ใช่แฟล็กของไลบรารี
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”composer require nextpdf/core:^3Core สร้างผลลัพธ์ PDF 2.0 baseline เป็นค่าเริ่มต้น จึงไม่จำเป็นต้องเรียกใช้โปรไฟล์ใดเพิ่มเติม เพราะ ConformanceMode::Plain เป็นตัวจำแนกค่าเริ่มต้น โปรไฟล์ PDF/A-4, PDF/UA-2, PDF/X และ ZUGFeRD เป็นชุดย่อยที่มีข้อจำกัดซึ่งวางซ้อนอยู่บน baseline นี้
ภาพรวมเชิงแนวคิด
หัวข้อที่มีชื่อว่า “ภาพรวมเชิงแนวคิด”เอกสาร NextPDF ทุกฉบับเริ่มต้นเป็นไฟล์ PDF 2.0 ก่อนมีการใช้โปรไฟล์ใดๆ ตัวเขียนเป็นไปตามข้อกำหนดเชิงโครงสร้างที่ ISO 32000-2 กำหนดไว้สำหรับไฟล์ที่สอดคล้องตามมาตรฐาน:
- เอกสาร catalog — §7.7.2: ออบเจ็กต์รากที่
/Rootของ trailer อ้างถึง และมีอยู่ในผลลัพธ์ทุกฉบับ - โครงสร้างการอ้างอิงไขว้ — §7.5.8: ตารางหรือสตรีมการอ้างอิงไขว้ที่ระบุตำแหน่งของออบเจ็กต์ทุกตัว
- Trailer — §7.5.5: ดิกชันนารี trailer ที่ไฟล์ซึ่งสอดคล้องตามมาตรฐานต้องมี รวมถึงตัวระบุ
/IDของไฟล์/IDมีค่าไม่ซ้ำกันต่อไฟล์ และจะถูกตัดออกในขั้นตอนการนอร์มอลไลซ์เพื่อใช้เปรียบเทียบ ด้วยเหตุนี้ผลลัพธ์ส่วนใหญ่ที่มีหลายออบเจ็กต์จึงใช้reproducibility_profile: structuralไม่ใช่แบบ bitwise - โครงสร้างเชิงตรรกะ — §14.7.2: เมื่อเปิดใช้งานโหมด tagged จะมี baseline ของ
StructTreeRootที่รองรับโปรไฟล์ PDF/UA-2 - ส่วนขยายเวอร์ชัน — §7.12: เมื่อมีการประกาศส่วนขยายของนักพัฒนา จะใช้กลไกดิกชันนารี Extensions / คำนำหน้าของนักพัฒนา
NextPDF นำข้อกำหนดเหล่านี้มาใช้งาน แต่ไม่ได้ดำเนินการประเมินความสอดคล้องตาม ISO 32000-2 อย่างครบถ้วน ให้ใช้เครื่องมือตรวจสอบความถูกต้องภายนอก เช่น Arlington grammar checker หรือ veraPDF เพื่อการตัดสินดังกล่าว NextPDF\Compliance มีการตรวจสอบไขว้ระดับ byte-stream (ArlingtonValidator) ที่ช่วยเผยให้เห็นความไม่สอดคล้องเชิงโครงสร้าง เครื่องมือเหล่านี้ช่วยในการตรวจพิสูจน์ แต่ไม่ใช่ใบรับรอง
ส่วนต่อประสาน API
หัวข้อที่มีชื่อว่า “ส่วนต่อประสาน API”| สัญลักษณ์ | ผลที่เกิดขึ้น |
|---|---|
ConformanceMode::Plain | ค่าเริ่มต้น — ผลลัพธ์ PDF 2.0 แบบไม่มีข้อจำกัด |
ConformanceMode::requiresPdf17(): bool | False สำหรับโหมด PDF 2.0 โดยตัวเขียนจะสร้าง %PDF-2.0 เป็นส่วนหัว |
NextPDF\Compliance\Validator\ArlingtonValidator | การตรวจสอบไขว้เชิงไวยากรณ์เทียบกับ Arlington PDF model (ช่วยในการตรวจพิสูจน์) |
ตัวอย่างโค้ด — เริ่มต้นใช้งานอย่างรวดเร็ว
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — เริ่มต้นใช้งานอย่างรวดเร็ว”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/baseline.pdf';
$doc = Document::createStandalone(); // ConformanceMode::Plain — PDF 2.0$doc->setTitle('PDF 2.0 baseline');$doc->writeHtml('<h1>Hello PDF 2.0</h1><p>Unconstrained baseline output.</p>');$doc->save($out);
echo "Wrote {$out} (%PDF-2.0). Validate structure with an external checker.\n";ตัวอย่างโค้ด — การใช้งานจริง
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — การใช้งานจริง”สำหรับการใช้งานจริง ให้รันเครื่องมือตรวจสอบความถูกต้องเชิงโครงสร้างภายนอก (Arlington / veraPDF) ในกระบวนการ continuous integration (CI) กับผลลัพธ์ที่เป็นตัวแทน และใช้รายงานของเครื่องมือเป็นเกณฑ์การผ่าน ไลบรารีสร้างโครงสร้าง ส่วนเครื่องมือตรวจสอบเป็นผู้ตัดสินว่าโครงสร้างนั้นสอดคล้องตามมาตรฐานหรือไม่ ไลบรารีไม่กล่าวอ้างความสอดคล้องแบบครอบคลุมทั้งหมด
กรณีขอบและข้อควรระวัง
หัวข้อที่มีชื่อว่า “กรณีขอบและข้อควรระวัง”/IDมีค่าไม่ซ้ำกันต่อไฟล์ ผลลัพธ์ baseline ที่มี/ID,/CreationDateใน trailer หรือคำนำหน้าของชุดย่อยฟอนต์ จะไม่เสถียรที่ระดับ byte ให้เปรียบเทียบด้วยโปรไฟล์เชิงโครงสร้าง (qpdf-normalize) ไม่ใช่ sha256 แบบดิบ- Plain ≠ การจัดเก็บถาวร
ConformanceMode::Plainไม่ใช่ PDF/A หากไม่มี OutputIntent หรือเครื่องหมายpdfaidอย่าถือว่าเป็นรูปแบบสำหรับการจัดเก็บถาวร - การนำมาใช้งาน ≠ สอดคล้องอย่างสมบูรณ์ หน้านี้แสดงรายการข้อกำหนดที่ NextPDF นำมาใช้งาน แต่ไม่ได้ระบุว่าทุกข้อกำหนดของ ISO 32000-2 ได้รับการปฏิบัติตามครบถ้วนสำหรับเอกสารทุกฉบับ นั่นเป็นคำวินิจฉัยของเครื่องมือตรวจสอบที่พิจารณาเป็นรายเอกสาร
- ส่วนขยายมีการกำหนด namespace ส่วนขยายของนักพัฒนาใช้ดิกชันนารี Extensions ตาม §7.12 พร้อมคำนำหน้าที่ลงทะเบียนไว้ คีย์ส่วนตัวที่ไม่มีคำนำหน้าถือเป็นการเบี่ยงเบนจาก baseline
ประสิทธิภาพ
หัวข้อที่มีชื่อว่า “ประสิทธิภาพ”การสร้างผลลัพธ์ baseline เป็นเส้นทางหลักของเอนจิน งบประมาณคือเวลา wall ≤ 1500 ms และหน่วยความจำสูงสุด ≤ 64 MB สำหรับเอกสารทั่วไป ตัวเขียน baseline รองรับ backport matrix (PHP 8.1–8.4)
หมายเหตุด้านความปลอดภัย
หัวข้อที่มีชื่อว่า “หมายเหตุด้านความปลอดภัย”ผลลัพธ์ PDF 2.0 baseline ไม่มีการเข้ารหัสลับหรือลายเซ็น เว้นแต่จะเพิ่มเข้าไปอย่างชัดเจน การเข้ารหัสลับช่วยรักษาความลับของข้อมูลและมีคู่มือแยกต่างหาก บิตสิทธิ์ตาม ISO ทำงานโดยอาศัยความร่วมมือของโปรแกรมอ่าน ไม่ใช่การควบคุมการเข้าถึง baseline ไม่รับประกันด้านความปลอดภัย
ความสอดคล้องตามมาตรฐาน
หัวข้อที่มีชื่อว่า “ความสอดคล้องตามมาตรฐาน”| ข้อกล่าวอ้าง | มาตรฐาน | ข้อกำหนด | ตัวระบุอ้างอิง (reference_id) |
|---|---|---|---|
| ไฟล์ PDF 2.0 ที่สอดคล้องตามมาตรฐานต้องมี trailer / โครงสร้างไฟล์ที่สอดคล้องตามมาตรฐาน | ISO 32000-2 | §7.5.5 | |
| ออบเจ็กต์ทุกตัวสามารถระบุตำแหน่งได้ผ่านตารางหรือสตรีมการอ้างอิงไขว้ | ISO 32000-2 | §7.5.8 | |
| ไฟล์มีเอกสาร catalog เป็นออบเจ็กต์ราก | ISO 32000-2 | §7.7.2 | |
| มีการอธิบายความสอดคล้องตามมาตรฐานในแง่ของตัวเขียนและโปรแกรมอ่านที่สอดคล้องตามมาตรฐาน | ISO 32000-2 | §7.2 | |
| ส่วนขยายเวอร์ชันใช้ดิกชันนารี Extensions / คำนำหน้าของนักพัฒนา | ISO 32000-2 | §7.12 | |
| ผลลัพธ์แบบ tagged สร้างต่อยอดจาก baseline โครงสร้างเชิงตรรกะของ ISO 32000-2 | ISO 32000-2 | §14.7.2 |
การอ้างอิงเป็นตัวชี้แบบ clause-id + reference_id ไปยัง verification corpus ไม่มีการคัดลอกเนื้อหาของมาตรฐานมาแสดงซ้ำ NextPDF สรุปข้อกำหนดด้วยถ้อยคำของตนเอง