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

ข้อมูลอ้างอิง API สำหรับความเข้ากันได้ของ TCPDF

แพ็กเกจ nextpdf/compat-legacy เปิดเผยคลาสหลักหนึ่งคลาสคือ NextPDF\Compat\Tcpdf\TCPDF ซึ่งทำตาม application programming interface (API) สาธารณะของ TCPDF 6.x แต่เรนเดอร์ด้วยเอนจิน NextPDF สมัยใหม่ นอกจากนี้ยังมี API surface สนับสนุนขนาดเล็ก ได้แก่ LegacyBootstrap สำหรับ alias คลาสระดับโกลบอล พื้นผิวการกำหนดค่า AdaptationConfig/LegacyDefaults คลาส bridge ภายในสำหรับ output การสร้างออบเจกต์ สี หน่วย และรูปแบบหน้า รวมถึง exception ด้านความเข้ากันได้ ใช้แพ็กเกจนี้เป็นเครื่องมือช่วยย้ายระบบ ไม่ใช่ dependency ถาวร ตารางความครอบคลุมของเมท็อดคือแหล่งข้อมูลสถานะเมท็อด legacy ฉบับครบถ้วน หน้านี้บันทึกเฉพาะ surface ที่โค้ดแอปพลิเคชันควรพึ่งพาโดยตั้งใจเท่านั้น

เริ่มที่นี่: หากเพิ่งเริ่มใช้แพ็กเกจนี้ ให้สร้าง NextPDF\Compat\Tcpdf\TCPDF เรียกคำสั่ง TCPDF ตามปกติ (AddPage(), SetFont(), Cell()) แล้วปิดท้ายด้วย Output($name, $dest) คลาสนี้เป็นจุดเริ่มต้นของเกือบทุกอย่างในส่วนต่อไปนี้ สำหรับตัวอย่างเริ่มต้นที่รันได้ โปรดดู งานทั่วไป

งานเหล่านี้คือส่วนของแพ็กเกจที่ใช้งานบ่อยที่สุด แต่ละบล็อกผ่านการตรวจสอบกับซอร์สของ adapter แล้ว และรันได้ตามที่แสดง

สร้างไฟล์ Portable Document Format (PDF) ด้วยคำสั่ง TCPDF ที่คุ้นเคย แล้วเก็บผลลัพธ์เป็นสตริงสำหรับคิว การตอบสนอง HTTP หรือพื้นที่จัดเก็บ:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF('P', 'mm', 'A4');
$pdf->SetTitle('Invoice 1234');
$pdf->SetFont('helvetica', '', 12);
$pdf->AddPage();
$pdf->Cell(0, 10, 'Hello from the NextPDF engine', 1, 1, 'C');
$bytes = $pdf->Output('invoice.pdf', 'S');

สิ่งที่ทำ: สร้างเอกสาร PDF 2.0 ผ่าน adapter ที่มีรูปทรงแบบ TCPDF และคืนค่าไบต์ดิบ (%PDF...) เนื่องจากปลายทาง 'S' ส่งผ่าน OutputBridge ไปยัง Document::getPdfData() แทนการ echo จึงใช้ภายใน worker หรือ controller ได้อย่างปลอดภัย

ลงทะเบียน alias ระดับโกลบอลหนึ่งครั้งในช่วง boot เพื่อให้โค้ด new \TCPDF(...) ที่มีอยู่เดิมรันได้โดยไม่ต้องแก้ซอร์ส:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\LegacyBootstrap;
LegacyBootstrap::enableAliases();
$pdf = new \TCPDF('P', 'mm', 'A4'); // resolves to the adapter
$pdf->AddPage();
$pdf->Cell(0, 10, 'Legacy call site, modern engine');
$pdf->Output(__DIR__ . '/legacy.pdf', 'F');

สิ่งที่ทำ: enableAliases() ลงทะเบียน \TCPDF (รวมถึงเฮลเปอร์ \TCPDF_STATIC/\TCPDF_FONTS/\TCPDF_COLORS/\TCPDF_IMAGES) แบบ idempotent เฉพาะเมื่อชื่อเหล่านั้นยังไม่ได้ถูกกำหนดไว้ก่อนเท่านั้น จากนั้นโค้ด legacy เดิมจะรันบน adapter ได้โดยไม่ต้องเปลี่ยนแปลง

ตรวจสอบการย้ายระบบโดยแสดงพารามิเตอร์ทั้งหมดของ TCPDF ที่ตามปกติ adapter จะละเว้นอย่างเงียบ ๆ:

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\Exception\TcpdfNotImplementedException;
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();
$pdf->setStrictMode(true);
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 12);
try {
$pdf->Image('photo.jpg', 10, 10, 50, 0, '', '', '', true, 300);
} catch (TcpdfNotImplementedException $e) {
fwrite(STDERR, $e->getMessage() . "\n"); // names every ignored parameter
}

สิ่งที่ทำ: เมื่อใช้ setStrictMode(true) การเรียกที่ไม่สามารถจำลองพฤติกรรมของ TCPDF ได้จะโยน TcpdfNotImplementedException และระบุชื่อทุกพารามิเตอร์ที่ถูกละเว้น วิธีนี้เปลี่ยนการลดทอนแบบเงียบ ๆ ให้เป็นรายการงานสำหรับการย้ายระบบ ให้รันเฉพาะในรอบการตรวจสอบเท่านั้น ห้ามรันในระบบจริงโดยเด็ดขาด

ตารางนี้คือ surface มาตรฐานของ adapter ใช้ค้นหาคลาสที่สร้างอินสแตนซ์ (TCPDF) เมท็อด strict-mode และ escape hatch ของคลาส รวมถึง contract ที่คลาสนี้ implement

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนหรือล้มเหลวด้วยหมายเหตุ
NextPDF\Compat\Tcpdf\TCPDFพารามิเตอร์ constructor เป็นไปตามรูปทรง TCPDF แบบ legacy ผ่าน ConstructorBridgeสร้าง adapter ที่รองรับโดยมีเอกสาร NextPDF อยู่เบื้องหลังTCPDFexception จากการตรวจสอบ constructor หรือคุณสมบัติที่ไม่รองรับใช้ระหว่างการย้ายระบบ ไม่ใช่สำหรับโค้ด NextPDF แบบเนทีฟใหม่
TCPDF::getDocument()ไม่มีคืนค่าเอกสาร NextPDF ที่อยู่เบื้องหลังNextPDF\Core\Documentไม่คาดว่าจะมีใช้เป็น escape hatch สำหรับโค้ดย้ายระบบที่ต้องผสมการเรียกแบบ legacy กับแบบเนทีฟเข้าด้วยกัน
TCPDF::getUnitConverter()ไม่มีคืนค่าตัวแปลงที่สร้างจากหน่วยแบบ legacyUnitConverterไม่คาดว่าจะมีใช้สำหรับการวินิจฉัยการย้ายระบบ ไม่ใช่โค้ดแอปพลิเคชันตามปกติ
TCPDF::setStrictMode(bool $enabled)แฟล็ก strict-modeเปิดหรือปิดการล้มเหลวอย่างชัดเจนสำหรับพฤติกรรมความเข้ากันได้ที่ไม่รองรับstaticไม่คาดว่าจะมีให้เปิดไว้ระหว่างการตรวจสอบการย้ายระบบ
TCPDF::isStrictMode()ไม่มีคืนค่าแฟล็ก strict-mode ปัจจุบันboolไม่คาดว่าจะมีมีประโยชน์ในการยืนยันผลของการทดสอบ
TCPDF เมท็อดแบบ legacyแตกต่างกันไปตามเมท็อดเมท็อดที่รองรับจะแมปไปยังการเรียกของเอกสารหลัก ส่วนเมท็อดที่ไม่รองรับจะล้มเหลวอย่างชัดเจนแตกต่างกันไปตามเมท็อดTcpdfNotImplementedException หรือ UnsupportedFeatureExceptionตรวจสอบ ความครอบคลุมของเมท็อด ก่อนพึ่งพาเมท็อดใด
CompatAdapterInterface::getDocument()ไม่มีเมท็อด contract ที่ TCPDF implementDocumentไม่คาดว่าจะมีให้เครื่องมือเข้าถึงเอกสารเนทีฟได้
CompatAdapterInterface::Output(string $name = '', string $dest = '')ชื่อไฟล์และปลายทางแบบ legacyมอบหมายให้ output bridgestringข้อผิดพลาดในการเขียนของแกนหลักหรือข้อผิดพลาดปลายทางที่ไม่รองรับสะท้อน output แบบ legacy ของ TCPDF โดย TCPDF::Output ที่เป็นรูปธรรมจะจัดหาค่าเริ่มต้น 'doc.pdf'/'I'

ตารางนี้แมปกลุ่มเมท็อดของ TCPDF ที่ adapter ครอบคลุม ใช้สแกนหาการเรียกแบบ legacy ก่อนตรวจสอบสถานะที่แน่นอนในตารางความครอบคลุมของเมท็อด

กลุ่มสัญลักษณ์ที่เป็นตัวแทนพฤติกรรมเริ่มต้นหมายเหตุ
วงจรชีวิตและ outputOpen(), Close(), Output(), getPDFData()รักษาวงจรชีวิตของเอกสารในรูปทรงแบบ TCPDF บนเอกสารเนทีฟควรใช้ API output แบบเนทีฟหลังจากย้ายระบบแล้ว
เมทาดาทาSetTitle(), SetAuthor(), SetSubject(), SetKeywords(), SetCreator()แมปตัวตั้งค่าเมทาดาทาไปยังเอกสารเบื้องหลังให้คงการ normalize เมทาดาทาไว้ในโค้ดแอปพลิเคชัน
หน้าและการกำหนดตำแหน่งAddPage(), setPage(), lastPage(), GetX(), SetXY()แปลงหน่วยและพิกัดแบบ legacy เป็นการดำเนินการกับหน้าแบบเนทีฟตรวจสอบการกำหนดตำแหน่งแบบสัมบูรณ์ด้วยสายตาหลังการย้ายระบบ
ระยะขอบและเค้าโครงSetMargins(), SetAutoPageBreak(), setCellPaddings(), getMargins()เก็บสถานะความเข้ากันได้และแมปค่าที่รองรับพฤติกรรมการขึ้นหน้าใหม่ที่ซับซ้อนของ TCPDF อาจต้องตรวจสอบด้วยตนเอง
ฟอนต์และข้อความSetFont(), AddFont(), Cell(), MultiCell(), Write(), Text()ส่งการดำเนินการกับข้อความทั่วไปไปยัง API ฟอนต์และข้อความแบบเนทีฟตรวจสอบพฤติกรรม CJK และการเข้ารหัสด้วยฟอนต์ที่ใช้งานจริง
HTMLwriteHTML(), writeHTMLCell(), fixHTMLCode()ส่ง HTML ที่รองรับไปยังไปป์ไลน์ HTML แบบเนทีฟตัวเรนเดอร์เนทีฟไม่ใช่โคลน HTML ของ TCPDF ที่สมบูรณ์
รูปภาพและการวาดImage(), Line(), Rect(), Circle(), SetDrawColor()แมปการดำเนินการกราฟิกที่รองรับผ่าน concern ของ adapterรูปแบบเวกเตอร์หรือรูปแบบพิเศษที่ไม่รองรับจะล้มเหลวอย่างชัดเจน
การนำทางและคำอธิบายประกอบBookmark(), AddLink(), SetLink(), Annotation()รักษาการเรียกด้านการนำทางทั่วไปไว้เมื่อมีการแมปตรวจสอบความถูกต้องของ outline และลิงก์ที่สร้างขึ้น
ความปลอดภัยและลายเซ็นSetProtection(), setSignature(), setTimeStamp(), setUserRights()เชื่อมการเรียกความปลอดภัยแบบ legacy ที่รองรับไปยังคุณสมบัติเนทีฟให้ถือว่า output ด้านวิทยาการเข้ารหัสลับเป็นเกตการตรวจสอบยืนยันแยกต่างหาก
ฟอร์ม เทมเพลต และการแปลงTextField(), startTemplate(), StartTransform(), Rotate(), Scale()implement ส่วนย่อยที่รองรับ และล้มเหลวอย่างชัดเจนสำหรับพฤติกรรมที่ไม่รองรับตรวจสอบการเรียกแต่ละครั้งเทียบกับความครอบคลุมของเมท็อดก่อนนำไปใช้งานจริง

ใช้ตารางนี้เมื่อเชื่อมต่อ adapter เข้ากับเส้นทาง boot ของแอปพลิเคชัน ลงทะเบียน alias ระดับโกลบอล หรือเลือกระหว่างค่าคงที่แบบ legacy กับ AdaptationConfig สมัยใหม่

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนหรือล้มเหลวด้วยหมายเหตุ
LegacyBootstrap::enableAliases()ไม่มีลงทะเบียน alias ด้านความเข้ากันได้หนึ่งครั้งvoidข้อผิดพลาดของ autoload หรือสภาพแวดล้อมใช้เฉพาะเมื่อโค้ด legacy คาดว่าชื่อ TCPDF จะมีอยู่ในระดับโกลบอล
LegacyBootstrap::isRegistered()ไม่มีรายงานว่ามีการลงทะเบียน alias แล้วหรือไม่boolไม่คาดว่าจะมีมีประโยชน์ในการทดสอบ bootstrap
LegacyBootstrap::resetForTesting()ไม่มีล้างสถานะการลงทะเบียนเพื่อการทดสอบvoidไม่คาดว่าจะมีเฮลเปอร์สำหรับการทดสอบเท่านั้น
AdaptationConfigแฟล็กของ adapter และตัวควบคุมการย้ายระบบใช้ค่าเริ่มต้นของแพ็กเกจเมื่อไม่ได้ระบุAdaptationConfigค่าตัวเลือกที่ไม่ถูกต้องให้ระบุการกำหนดค่าอย่างชัดเจนระหว่างการตรวจสอบการย้ายระบบ
AdaptationConfig::fromLegacyConstants()ไม่มีอ่านค่าคงที่แบบ legacy ที่รู้จักและสร้างออบเจกต์การกำหนดค่าAdaptationConfigค่าคงที่แบบ legacy ที่ไม่ถูกต้องเฮลเปอร์ช่วงเปลี่ยนผ่านสำหรับแอปพลิเคชัน legacy ขนาดใหญ่
LegacyDefaultsไม่มีให้ค่าเริ่มต้นแบบ legacyค่าเริ่มต้นไม่คาดว่าจะมีจุดศูนย์กลางสำหรับค่าเริ่มต้นด้านความเข้ากันได้

คลาสการแปลงภายในเหล่านี้ขับเคลื่อน adapter ใช้ตารางนี้เมื่อมีส่วนร่วมในการเพิ่มความครอบคลุมของ adapter หรือเมื่อวินิจฉัยว่าอาร์กิวเมนต์แบบ legacy ถูกแปลอย่างไร สำหรับโค้ดแอปพลิเคชันประจำวัน ควรใช้ surface สาธารณะของ adapter

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนหรือล้มเหลวด้วยหมายเหตุ
ConstructorBridgeรายการอาร์กิวเมนต์ของ constructor แบบ legacynormalize ตัวเลือกแบบ legacy เป็นการกำหนดค่าของ NextPDFข้อมูล constructorค่าอาร์กิวเมนต์แบบ legacy ที่ไม่ถูกต้องadapter ใช้งานภายใน
CellParameterAdapterพารามิเตอร์เซลล์ของ TCPDFแมปอาร์กิวเมนต์แบบระบุตำแหน่งของ legacy เป็นตัวเลือกการจัดวางข้อความของแกนหลักพารามิเตอร์ที่ปรับแล้วมิติหรือการจัดแนวที่ไม่ถูกต้องควรใช้เมท็อดของแกนหลักแบบเนทีฟในโค้ดใหม่
OutputBridge::dispatch(Document $document, string $filename, string $dest)เอกสารเนทีฟ ชื่อไฟล์ และปลายทางแบบ legacyแมปพฤติกรรม inline/download/save ไปยัง API output ของ NextPDFstringข้อผิดพลาดในการเขียนของแกนหลัก ปลายทางที่ไม่รองรับตรวจสอบความถูกต้องของชื่อไฟล์และ root ของพื้นที่จัดเก็บก่อน output
OutputBridge::resolveDestination(string $dest)รหัสปลายทางแบบ legacyแปลงปลายทางเป็นปลายทาง output แบบเนทีฟOutputDestinationข้อผิดพลาดปลายทางที่ไม่รองรับรวมศูนย์การแมปปลายทางไว้ที่เดียว
ColorTranslatorอาร์กิวเมนต์สีของ TCPDFnormalize รูปแบบสีแบบ legacyค่าสีของแกนหลักค่าสีที่ไม่ถูกต้องใช้โดย concern ของสีและการวาด
PageFormatResolverอินพุตรูปแบบหน้าแบบ legacyแมปชื่อที่รู้จักไปยังขนาดหน้าของแกนหลักค่ารูปแบบหน้ารูปแบบที่ไม่รู้จักใช้ขนาดหน้าแบบเนทีฟที่ระบุชัดเจนหลังการย้ายระบบ
UnitConverterค่าการวัดและหน่วยแบบ legacyแปลงเป็นหน่วยของแกนหลักค่าตัวเลขหน่วยที่ไม่ถูกต้องช่วยรักษาพฤติกรรมเค้าโครงแบบ legacy

ใช้ตารางนี้เมื่อการเรียกเพื่อย้ายระบบล้มเหลวอย่างชัดเจน ตารางนี้แยก “not implemented” ออกจากความล้มเหลวแบบ “known but unsupported” และแสดงเส้นทางการกู้คืน

สัญลักษณ์ความหมายการกู้คืน
TcpdfNotImplementedExceptionadapter จงใจไม่ implement เมท็อด legacy ที่ร้องขอแทนที่การเรียกด้วย API NextPDF แบบเนทีฟ หรือนำ dependency ออก
TcpdfNotImplementedException::forSilentIgnore()การเรียกแบบ legacy ที่เดิมจะถูกละเว้น แต่ถูกเปิดเผยเพื่อความชัดเจนระหว่างการย้ายระบบตัดสินใจว่าพฤติกรรม no-op ที่ชัดเจนยอมรับได้หรือไม่
TcpdfNotImplementedException::forUnimplemented()การเรียกแบบ legacy ไม่มีเส้นทาง adapter ที่ implement ไว้แทนที่การเรียก หรือแยกการเรียกไว้หลังโค้ดการย้ายระบบ
UnsupportedFeatureExceptionคุณสมบัติแบบ legacy เป็นที่รู้จัก แต่ไม่รองรับภายในขอบเขตของ adapterตรวจสอบคำแนะนำการย้ายระบบ และแยกคุณสมบัติไว้หลัง adapter ของแอปพลิเคชัน
UnsupportedFeatureException::forMethod()สร้างข้อผิดพลาดคุณสมบัติที่ไม่รองรับเฉพาะเมท็อดใช้เมื่อมีส่วนร่วมด้านความเข้ากันได้เพื่อรักษาข้อความแสดงความล้มเหลวให้สอดคล้องกัน
  • ให้ถือว่า adapter เป็นเครื่องมือสำหรับการย้ายระบบ โค้ดใหม่ควรมุ่งไปที่ API แกนหลักของ NextPDF โดยตรง
  • พฤติกรรมที่ไม่รองรับควรล้มเหลวอย่างชัดเจน อย่าดักจับ exception ด้านความเข้ากันได้แล้วดำเนินการต่อด้วยเอกสารที่ไม่สมบูรณ์ เว้นแต่แอปพลิเคชันจะยอมรับความเสี่ยงนั้นอย่างชัดเจน
  • ให้การเปลี่ยนแปลงสำหรับการย้ายระบบมีขนาดเล็ก และตรวจสอบเมท็อด legacy แต่ละตัวเทียบกับตารางความครอบคลุม