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

ภาพรวมการผสาน NextPDF กับ Symfony

nextpdf/symfony คือ bundle อย่างเป็นทางการของเอนจิน NextPDF สำหรับ Symfony 7 bundle นี้เชื่อมเอนจินเข้ากับคอนเทนเนอร์ของ Symfony และมอบ document factory ที่สามารถฉีด (inject) เข้าไปในเซอร์วิสของคุณได้ นอกจากนี้ยังมีตัวช่วยสร้างการตอบสนอง Hypertext Transfer Protocol (HTTP) และเส้นทางสำหรับสร้างไฟล์ Portable Document Format (PDF) แบบอะซิงโครนัส เพื่อให้งานทำงานอยู่เบื้องหลังได้

NextPDF Symfony เชื่อมเอนจิน nextpdf/core เข้ากับแอปพลิเคชัน Symfony ในรูปแบบ bundle มาตรฐาน bundle นี้เพิ่มองค์ประกอบพื้นฐานต่อไปนี้ โดยแต่ละรายการได้รับการตรวจสอบกับซอร์สของ bundle ใน src/Symfony/:

  • จุดเริ่มต้นของ bundleNextPDF\Symfony\NextPdfBundle ขยายคลาสฐาน Bundle ของ Symfony และลงทะเบียน compiler pass หนึ่งตัว
  • ส่วนขยาย dependency-injectionNextPDF\Symfony\DependencyInjection\NextPdfExtension โหลดนิยามเซอร์วิส แปลงโครงสร้างการกำหนดค่าให้เป็นพารามิเตอร์ของคอนเทนเนอร์ และเปิดเผยนามแฝงการกำหนดค่า nextpdf
  • โครงสร้างการกำหนดค่าแบบมีไทป์NextPDF\Symfony\DependencyInjection\Configuration กำหนดสคีมาการกำหนดค่า nextpdf โครงสร้างนี้ตรวจสอบความถูกต้องของค่า enum กำหนดค่าเริ่มต้น และใช้ตัวยึดตำแหน่งพารามิเตอร์ %kernel.*%
  • document factory ที่ฉีดได้NextPDF\Symfony\Service\PdfFactory สร้างอินสแตนซ์ใหม่ของ NextPDF\Core\Document ที่กำหนดค่าไว้ล่วงหน้า สิ่งนี้เทียบเท่ากับ static facade ในรูปแบบของ Symfony
  • ตัวช่วยสร้างการตอบสนอง HTTPNextPDF\Symfony\Http\PdfResponse สร้างการตอบสนองแบบ inline แบบดาวน์โหลด และแบบสตรีม พร้อมชุดส่วนหัวความปลอดภัยที่ตายตัวซึ่งสอดคล้องกับ Open Worldwide Application Security Project (OWASP)
  • เส้นทางการสร้างแบบอะซิงโครนัสNextPDF\Symfony\Message\GeneratePdfMessage, NextPDF\Symfony\Message\GeneratePdfHandler และ NextPDF\Symfony\Message\PdfBuilderInterface ผสานการทำงานกับ Symfony Messenger เพื่อให้การเรนเดอร์ PDF สามารถทำงานบน worker ได้
  • ตัวตรวจหาส่วนขยายในเวลาคอมไพล์NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass ตรวจหาส่วนขยายที่เป็นทางเลือกของ NextPDF และลงทะเบียนเซอร์วิสของส่วนขยายเหล่านั้นเฉพาะเมื่อมีส่วนขยายดังกล่าวอยู่เท่านั้น

bundle นี้ลงทะเบียนเซอร์วิสคอนเทนเนอร์สาธารณะชุดเล็กที่เสถียร เซอร์วิสเอกสาร nextpdf.document (มีนามแฝงเป็น NextPDF\Contracts\PdfDocumentInterface และ NextPDF\Core\Document) เป็นแบบ ไม่ใช้ร่วมกัน: การ resolve แต่ละครั้งจะคืนเอกสารคนละอินสแตนซ์ที่นำไปใช้แล้วทิ้งได้ สิ่งนี้สอดคล้องกับสัญญาของคอนเทนเนอร์ตาม PHP Standard Recommendation 11 (PSR-11): การเรียก get() สองครั้งติดต่อกันด้วยตัวระบุเดียวกันอาจคืนค่าที่ต่างกันได้ ขึ้นอยู่กับการกำหนดค่าของคอนเทนเนอร์ — ดู PSR-11 §1.1.2 การ binding แบบไม่ใช้ร่วมกันนี้กำหนดไว้โดยตั้งใจ เอกสารจะสะสมสถานะของแต่ละการเรนเดอร์ ดังนั้นการมีอินสแตนซ์ใหม่ต่อหนึ่งคำขอจึงป้องกันไม่ให้สถานะรั่วไหลข้ามคำขอใน worker ที่ทำงานต่อเนื่องเป็นเวลานาน

ในทางกลับกัน font registry (NextPDF\Contracts\FontRegistryInterface) เป็น singleton ที่ใช้ร่วมกัน ส่วน image registry มีแท็ก kernel.reset ดังนั้นแคชที่มีขอบเขตจำกัดของ registry นี้จึงถูกล้างระหว่างคำขอภายใต้ FrankenPHP และ Messenger worker หน้าการกำหนดค่าระบุรายละเอียดตารางเซอร์วิสและนามแฝงทั้งหมด

font registry และ image registry สามารถรับ logger ตาม PHP Standard Recommendation 3 (PSR-3) แบบทางเลือกได้ bundle จะ binding Psr\Log\LoggerInterface เฉพาะเมื่อแอปพลิเคชันจัดเตรียม logger ไว้เท่านั้น (nullOnInvalid()) ดังนั้นการบันทึกล็อกจึงเป็น collaborator แบบทางเลือก ไม่ใช่ dependency ที่บังคับ สิ่งนี้สอดคล้องกับสัญญาของ logger ตาม PSR-3 ซึ่งกำหนดให้ logger เป็น collaborator ที่ถูกฉีดเข้ามาและสามารถสับเปลี่ยนได้ (PSR-3)

ตัว bundle เองเป็นซอฟต์แวร์ core ภายใต้ Apache-2.0 ความสามารถบางอย่างจะปรากฏก็ต่อเมื่อคุณติดตั้งแพ็กเกจที่เป็นทางเลือกควบคู่ไปกับ bundle เท่านั้น:

ความสามารถต้องการการตรวจหา
การสร้าง PDF, PdfFactory, PdfResponsecore เท่านั้นพร้อมใช้งานเสมอ
การสร้างแบบอะซิงโครนัสsymfony/messengerhandler จะเปิดใช้งานเมื่อมีการติดตั้ง Messenger
การเรนเดอร์ HTML ด้วย Chrome DevTools Protocol (CDP)nextpdf/artisanการตรวจสอบ class_exists ในเวลาคอมไพล์
การจัดเก็บถาวรแบบ PDF/A, ลายเซ็นดิจิทัลnextpdf/premium (ติดตั้ง Pro)การตรวจสอบ class_exists ในเวลาคอมไพล์

หลังจากติดตั้ง nextpdf/premium แล้ว bundle จะสามารถใช้การกำหนดค่าลายเซ็นพื้นฐาน PDF Advanced Electronic Signatures (PAdES) B-B ได้ โปรไฟล์ลายเซ็นระดับสูงกว่านี้อยู่นอกขอบเขตของเอกสารประกอบของ bundle นี้ สำหรับตารางเปรียบเทียบรุ่น โปรดดูเอกสารประกอบของ NextPDF Premium

ใช้ nextpdf/symfony เมื่อคุณสร้าง PDF ภายในแอปพลิเคชัน HTTP หรือ worker ของ Symfony 7 bundle นี้มอบเซอร์วิสที่จัดการโดยคอนเทนเนอร์ registry ที่ปลอดภัยสำหรับ worker และการตอบสนองดาวน์โหลดที่ปลอดภัย คุณจึงไม่ต้องเชื่อมต่อเอนจินด้วยตนเอง หากคุณต้องการเพียงการสร้างแบบครั้งเดียวในสคริปต์ แพ็กเกจ core nextpdf/core เพียงอย่างเดียวก็เพียงพอแล้ว

แต่ละแถวเป็นข้อกล่าวอ้างเชิงบรรทัดฐานที่ระบุไว้บนหน้านี้ และถูกผูกกับ reference_id แบบเลขฐานสิบหก 64 หลักเต็มจาก corpus ขององค์กรพัฒนามาตรฐาน (SDO) ที่มีการควบคุมการเข้าถึง ข้อมูลที่มา (manifest ของ corpus, transport สำหรับการดึงข้อมูล) อยู่ใน _sidecars/rag-citations.yaml

ข้อกำหนดข้อตัวระบุอ้างอิง (reference_id)ข้อกล่าวอ้าง
PSR-11psr_11_container#1.1.2.p3.bสัญญาค่าที่คืนกลับของ get() ในคอนเทนเนอร์
PSR-3psr_3_logger#x3.p17LoggerInterface เป็น dependency ที่เป็นทางเลือก

ลายเซ็นดิจิทัลและการจัดเก็บถาวรแบบ PDF/A จะพร้อมใช้งานเมื่อมีการติดตั้ง nextpdf/premium (Pro) ควบคู่ไปกับ bundle ความสามารถ Pro ที่เป็นทางเลือกนี้ไม่ต้องมีการเปลี่ยนแปลงโค้ดใน Core bundle ที่ระบุไว้ในที่นี้ ดู </get-license/?intent=symfony-pro>

  • /integrations/symfony/install/ — ติดตั้งและลงทะเบียน bundle
  • /integrations/symfony/configuration/ — โครงสร้างการกำหนดค่า nextpdf และตารางเซอร์วิสทั้งหมด
  • /integrations/symfony/quickstart/ — controller ที่รันได้และตัวอย่างแบบอะซิงโครนัส
  • /integrations/symfony/boot-and-discovery/ — วิธีที่ Symfony ค้นพบและบูต bundle
  • /integrations/symfony/production-usage/ — ความปลอดภัยของ worker การสตรีม และรูปแบบการทำงานแบบอะซิงโครนัส