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

เอกสารอ้างอิงอีนัม

เมธอด authoring หลายตัวของ NextPDF รับ enum แบบมีชนิด แทนสตริงหรือจำนวนเต็มเปล่า อีนัมคือสัญญา: มันจำกัดอาร์กิวเมนต์ให้อยู่ในชุดที่แน่นอนและถูกต้อง และ IDE กับ PHPStan จะปฏิเสธค่าใดที่อยู่นอกชุดนั้น หน้านี้คือที่ค้นหาค่าที่อนุญาตสำหรับอีนัมที่คุณตั้ง (หรือรับ) ผ่าน API สาธารณะของ Document และ Config — บวกกับอีนัมสีระดับเอนจินหนึ่งตัว (RenderingIntent) ที่รวมไว้เพราะเคสของมันเป็นส่วนหนึ่งของสัญญาสีสาธารณะ และถูกระบุว่าเป็นระดับเอนจินตรงที่มันปรากฏ

นี่คือคู่หูของเอกสารอ้างอิงการกำหนดค่า ขณะที่อ็อบเจกต์ Config บอกคุณว่า ปุ่มใด ที่ต้องหมุน หน้านี้บอกคุณว่า ปุ่มนั้นรับค่าใดบ้าง แต่ละรายการระบุชื่อคลาสแบบเต็ม (FQCN) ของอีนัม ชนิดเบื้องหลัง รายการเคสที่แน่นอนซึ่งคัดลอกมาจากซอร์ส และเมธอดสาธารณะที่รับค่านั้น

อีนัมระดับลึกภายในเอนจิน (HTML/CSS layout, abstract syntax tree, CLI, ภายในของ shaper) ถูกตัดออกโดยเจตนา — คุณไม่เคยตั้งค่าเหล่านั้น เกือบทุกอย่างด้านล่างคือค่าที่คุณส่งเข้าผ่าน API สาธารณะ ข้อยกเว้นหนึ่งเดียวคือ RenderingIntent ซึ่งเป็นอีนัมสีระดับเอนจินที่ไม่มี setter สาธารณะ ระบุไว้เพื่อความครบถ้วนและกำกับไว้เช่นนั้นตรงที่มันปรากฏ

อีนัมของ PHP มีสองรูปแบบ และรูปแบบเปลี่ยนวิธีที่คุณเขียนค่า:

  • อีนัมแบบ backed (enum X: string หรือ enum X: int) มี value แบบ scalar สำหรับทุกเคส จึงไป-กลับผ่าน X::from('...') / $case->value ได้ อีนัมส่วนใหญ่ในที่นี้เป็นแบบ backed
  • อีนัมแบบ pure (enum X ที่ไม่มีชนิดเบื้องหลัง) มีเคสแต่ไม่มีค่า scalar คุณอ้างถึงมันด้วยเคสเสมอ (X::SomeCase) มีเพียง UnderlineStyle เท่านั้นที่เป็นแบบ pure

ในทั้งสองรูปแบบ คุณส่งตัวเคสเอง — ตัวอย่างเช่น $pdf->addPage(orientation: Orientation::Landscape) ชนิดเบื้องหลังสำคัญเฉพาะเมื่อคุณต้อง serialize ตัวเลือกนั้นหรืออ่านกลับจากการกำหนดค่า

เรขาคณิตหน้าแบบ portrait หรือ landscape ส่งเข้าตอนเพิ่มหน้า เอนจินจะสลับความกว้างและความสูงให้ตรงกัน

PropertyValue
FQCNNextPDF\Contracts\Orientation
Backingstring
Set viaDocument::addPage(?PageSize $size = null, Orientation $orientation = Orientation::Portrait)
CaseBacking value
Portrait'P'
Landscape'L'
use NextPDF\Contracts\Orientation;
use NextPDF\ValueObjects\PageSize;
$pdf->addPage(PageSize::a4(), Orientation::Landscape);

วิธีที่ open path ที่ถูก stroke สิ้นสุดลง ISO 32000-2:2020 §8.4.3.3

PropertyValue
FQCNNextPDF\Graphics\LineCap
Backingint
Set viaอ็อบเจกต์กำหนดค่า LineStyle (new LineStyle(cap: ...)) นำไปใช้ด้วย Document::setLineStyle(LineStyle $style)
CaseBacking valueMeaning
Butt0ปลายฉากที่จุดสิ้นสุด ไม่มีการยื่นออก
Round1ส่วนโค้งครึ่งวงกลมที่จุดสิ้นสุด
Square2การยื่นแบบฉากออกไปครึ่งหนึ่งของความกว้างเส้นเลยจุดสิ้นสุด

วิธีที่ส่วนเส้นที่ถูก stroke สองส่วนมาบรรจบกันที่มุม ISO 32000-2:2020 §8.4.3.4

PropertyValue
FQCNNextPDF\Graphics\LineJoin
Backingint
Set viaอ็อบเจกต์กำหนดค่า LineStyle (new LineStyle(join: ...)) นำไปใช้ด้วย Document::setLineStyle(LineStyle $style)
CaseBacking valueMeaning
Miter0มุมแหลมที่ยืดออกไปจนถึง miter limit
Round1ส่วนโค้งวงกลมที่เชื่อมขอบนอก
Bevel2เส้นทแยงที่เชื่อมขอบนอก

LineCap และ LineJoin ไม่ได้ถูกส่งเข้าเมธอดของ Document โดยตรง — มันเป็นฟิลด์ของอ็อบเจกต์ค่าที่เปลี่ยนแปลงไม่ได้ NextPDF\Graphics\LineStyle ซึ่งคุณส่งต่อให้ setLineStyle():

use NextPDF\Graphics\{LineStyle, LineCap, LineJoin};
$style = new LineStyle(width: 1.5, cap: LineCap::Round, join: LineJoin::Bevel);
$pdf->setLineStyle($style);
$pdf->line(20, 20, 120, 20);

ฟังก์ชัน blend แบบโปร่งใสที่นำไปใช้กับการวาดถัดไป สิบสองเคสแรกเป็นแบบ separable ส่วนสี่เคสสุดท้ายเป็นโหมด HSL แบบ non-separable ISO 32000-2:2020 §11.3.5

PropertyValue
FQCNNextPDF\Graphics\BlendMode
Backingstring
Set viaDocument::setAlpha(float $alpha, BlendMode $mode = BlendMode::Normal)
CaseBacking valueCaseBacking value
Normal'Normal'HardLight'HardLight'
Multiply'Multiply'SoftLight'SoftLight'
Screen'Screen'Difference'Difference'
Overlay'Overlay'Exclusion'Exclusion'
Darken'Darken'Hue'Hue'
Lighten'Lighten'Saturation'Saturation'
ColorDodge'ColorDodge'Color'Color'
ColorBurn'ColorBurn'Luminosity'Luminosity'
use NextPDF\Graphics\BlendMode;
$pdf->setAlpha(0.6, BlendMode::Multiply);
$pdf->rect(20, 20, 80, 40, 'F');

วิธีที่สีนอก gamut ถูกแมปใหม่ระหว่างการแปลงสี ปล่อยออกมาเป็นตัวดำเนินการ ri ISO 32000-2:2020 §8.6.5.8 (Table 71)

ต่างจากอีนัมอื่นในหน้านี้ RenderingIntent ไม่มี setter สาธารณะของ Document หรือ Config — มันเป็นอีนัม ระดับเอนจิน มันถูกนำไปใช้โดยตรงบนเอนจินการวาดภายใน (DrawingEngine::setRenderingIntent()) ซึ่งปล่อยตัวดำเนินการ ri เข้าไปใน content stream ปัจจุบัน เราระบุไว้ที่นี่เพื่อความครบถ้วนเพราะเคสของมันเป็นส่วนหนึ่งของสัญญาสีสาธารณะ แต่มันไม่ใช่ส่วนหนึ่งของ authoring API ที่นักพัฒนาใช้งานซึ่งหน้าที่เหลือนี้บันทึกไว้ ให้ถือว่าเอนจินการวาดเป็นคลาสภายใน ไม่ใช่จุดเข้าใช้งานที่คุณเขียนโปรแกรมต่อ

PropertyValue
FQCNNextPDF\Graphics\RenderingIntent
Backingstring
Set viaระดับเอนจินเท่านั้น — นำไปใช้บนเอนจินการวาดภายใน ไม่มี setter สาธารณะของ Document/Config
CaseBacking valueMeaning
RelativeColorimetric'RelativeColorimetric'คงสีใน gamut clip สีนอก gamut
AbsoluteColorimetric'AbsoluteColorimetric'คงค่า colorimetric ไว้อย่างแม่นยำ รวมถึงสีขาวของกระดาษ
Saturation'Saturation'คงความอิ่มตัวที่สดใสโดยแลกกับ hue/luminance
Perceptual'Perceptual'คงความสัมพันธ์ทางสายตา การบีบอัด gamut แบบลื่นไหล

โปรไฟล์สีของพื้นที่ทำงานที่ประกาศบน /OutputIntent ของเอกสาร ค่าเริ่มต้น DeviceRGB คงพฤติกรรม “ไม่มี OutputIntent เพิ่ม” แบบเดิม การเลือกเคสอื่นใดทำให้ตัวเขียนปล่อย /GTS_PDFX OutputIntent พร้อมโปรไฟล์ ICC ที่มากับชุด (ISO 32000-2:2020 §14.11.5) นี่เป็นค่า Config ไม่ใช่เมธอดต่อการเรียก — ตั้งบนอ็อบเจกต์การกำหนดค่าที่คุณส่งเข้า Document

PropertyValue
FQCNNextPDF\Core\OutputColorProfile
Backingstring
Set viaConfig::withOutputColorProfile(OutputColorProfile $profile) (พารามิเตอร์ $outputColorProfile ของคอนสตรักเตอร์ Config)
CaseBacking valueNotes
DeviceRGB'device-rgb'ค่าเริ่มต้น ไม่มีการปล่อย OutputIntent เพิ่ม
Srgb'srgb'sRGB OutputIntent แบบชัดเจน (IEC 61966-2-1) ไม่ใช่ wide gamut
DisplayP3'display-p3'Display-P3 wide gamut (D65)
Rec2020'rec2020'ITU-R BT.2020 / Rec.2020 wide gamut
A98RGB'a98-rgb'Adobe RGB 1998
ProphotoRGB'prophoto-rgb'ProPhoto RGB / ROMM RGB (D50)
use NextPDF\Core\{Config, OutputColorProfile};
$config = (new Config())->withOutputColorProfile(OutputColorProfile::DisplayP3);

กลีฟถูกเติม stroke clip หรือเรนเดอร์แบบมองไม่เห็น (โหมดมองไม่เห็นเป็นพื้นฐานของชั้น OCR ที่ค้นหาได้) ISO 32000-2:2020 §9.3.6, Table 104

PropertyValue
FQCNNextPDF\Content\TextRenderingMode
Backingint
Set viaDocument::setTextRenderingMode(TextRenderingMode $mode)
CaseBacking valueMeaning
Fill0เติมกลีฟ
Stroke1stroke เส้นขอบกลีฟ
FillStroke2เติมแล้วจึง stroke
Invisible3เรนเดอร์แบบมองไม่เห็น (ชั้น OCR ที่ค้นหาได้)
FillClip4เติมและเพิ่มเข้า clipping path
StrokeClip5stroke และเพิ่มเข้า clipping path
FillStrokeClip6เติม stroke และ clip
Clip7เพิ่มเข้า clipping path เท่านั้น (ไม่มีการเรนเดอร์ที่มองเห็น)

วิธีที่ตกแต่งขีดเส้นใต้ถูกวาด นี่คืออีนัม pure เพียงตัวเดียวในที่นี้ คุณจึงอ้างถึงมันด้วยเคสเสมอ

PropertyValue
FQCNNextPDF\Contracts\UnderlineStyle
Backingpure (no backing value)
Set viaDocument::setUnderlineStyle(UnderlineStyle $style)
CaseMeaning
RectFillสี่เหลี่ยมที่เติมสีใต้เส้นฐาน (ค่าเริ่มต้นที่เข้ากันได้กับ TCPDF)
StrokeLineเส้นที่ stroke ใต้เส้นฐาน (การวาดเส้นเชิงความหมาย)
use NextPDF\Content\TextRenderingMode;
use NextPDF\Contracts\UnderlineStyle;
$pdf->setTextRenderingMode(TextRenderingMode::Invisible); // OCR text layer
$pdf->setUnderlineStyle(UnderlineStyle::StrokeLine);

สัญญาความสอดคล้องระดับเอกสาร: ส่วน ISO ใดที่ตัวเขียนต้องเคารพ และจำเป็นต้องมีการ tag เชิงโครงสร้างหรือไม่ ค่าเริ่มต้น Plain คือผลลัพธ์ PDF 2.0 แบบไม่ถูกจำกัด ISO 14289-2:2024 (PDF/UA-2) และส่วน PDF/A ของ ISO 19005

PropertyValue
FQCNNextPDF\Conformance\ConformanceMode
Backingstring
Set viaDocument::setConformanceMode(ConformanceMode $mode) (escape hatch ระดับล่าง ให้เลือกใช้ enableTaggedPdf() สำหรับ PDF/UA-2 ใน Core หรือ enablePdfA() — Premium เท่านั้น — สำหรับ PDF/A)
CaseBacking valueContract
Plain'plain'PDF 2.0 ไม่ถูกจำกัด (ค่าเริ่มต้น)
PdfUa1'pdfua1'ISO 14289-1 (Tagged PDF/UA-1)
PdfUa2'pdfua2'ISO 14289-2:2024 (Tagged PDF/UA-2)
PdfA2'pdfa2'ISO 19005-2 (PDF/A-2)
PdfA3'pdfa3'ISO 19005-3 (PDF/A-3 profile discriminator)
PdfA3b'pdfa3b'ISO 19005-3 PDF/A-3b (Basic)
PdfA3u'pdfa3u'ISO 19005-3 PDF/A-3u (Unicode-extractable)
PdfA4'pdfa4'ISO 19005-4:2020 (PDF/A-4 profile discriminator)
PdfA4e'pdfa4e'ISO 19005-4:2020 PDF/A-4e (Engineering)
PdfA4f'pdfa4f'ISO 19005-4:2020 PDF/A-4f (File attachments)

อีนัมพก predicate helper มาด้วย — isTagged(), isAccessibility(), isArchival() และ pdfaPart() — เพื่อให้ gate ฝั่งตัวเขียนแตกแขนงตามโหมด แทนการ derive ใหม่

เคสใดที่ build แบบ Core-only ใช้ได้จริง ชนิด enum ระบุทุกเคส แต่การระบุเคสไม่เท่ากับการ สร้าง ความสอดคล้องนั้นจาก Core ได้:

  • Core (ไม่มีแพ็กเกจเพิ่ม): Plain, PdfUa1 และ PdfUa2 เส้นทาง Tagged PDF / PDF/UA ถูกสร้างไว้ใน Core — enableTaggedPdf() เลือกเส้นทาง authoring PDF/UA (PdfUa2 โดยค่าเริ่มต้น) และเดินสาย structure tree โดยไม่มีการตรวจสอบสิทธิ์ใช้งาน
  • Premium เท่านั้น: ทุกเคส PDF/A (PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f) ผลลัพธ์ PDF/A จริงถูกสร้างโดย enablePdfA() ซึ่งเป็นฟีเจอร์ระดับ Premium (ADR-011): มันต้องใช้แพ็กเกจ nextpdf/pro และล้มเหลวแบบ fail closed ด้วย InvalidConfigException (“install the nextpdf/pro package”) เมื่อไม่มีแพ็กเกจนั้น

setConformanceMode() เป็น escape hatch ระดับล่างที่เขียนเฉพาะฟิลด์ discriminator เท่านั้น — มัน ไม่ ติดตั้งกลไก PDF/A การตั้งเคส PdfA* ผ่านมันใน build แบบ Core-only จึงเป็นการ label เอกสารโดยไม่ให้การรับประกันการเก็บถาวรที่ enablePdfA() มอบให้ ดังนั้นโหมด Premium เท่านั้นจึง ต้องไม่ ถูกพึ่งพาใน build แบบ Core-only ให้ใช้ enableTaggedPdf() / enablePdfA() สำหรับเส้นทางความสอดคล้องจริง และหันไปใช้แพ็กเกจ Premium ทุกครั้งที่ต้องการส่งมอบ PDF/A

use NextPDF\Conformance\ConformanceMode;
$pdf->setConformanceMode(ConformanceMode::PdfUa2);

ค่า /AFRelationship สำหรับไฟล์ associated ที่ฝัง ค่าที่ไม่สอดคล้องจะทำให้การตรวจสอบ PDF/A-3 และ PDF/A-4 ล้มเหลว อีนัมจึงเป็นวิธีที่ปลอดภัยในการตั้งค่านี้ ISO 32000-2:2020 §14.13.5 (Table 401)

PropertyValue
FQCNNextPDF\Navigation\AFRelationship
Backingstring
Set viaDocument::embedFile(string $path, string $description = '', AFRelationship|string $afRelationship = AFRelationship::Unspecified)
CaseBacking valueUse
Source'Source'เอกสารต้นทางที่ใช้สร้าง PDF
Data'Data'ข้อมูลดิบที่ PDF ได้มาจาก (เช่น Factur-X / ZUGFeRD XML)
Alternative'Alternative'การนำเสนอแบบทางเลือก (braille, captions, SVG)
Supplement'Supplement'สื่อประกอบเพิ่มเติม
EncryptedPayload'EncryptedPayload'blob ที่เข้ารหัสแบบทึบซึ่ง PDF ห่อหุ้มไว้
FormData'FormData'ข้อมูลฟอร์ม (XFDF, FDF, XML)
Schema'Schema'schema ที่อธิบายไฟล์ Data (XSD, JSON Schema) PDF 2.0
Unspecified'Unspecified'ไม่ระบุความสัมพันธ์ (ค่าเริ่มต้น)

embedFile() รับได้ทั้งเคสอีนัมหรือสตริงลิเทอรัลของมัน (มีหรือไม่มี slash นำหน้า) ดังนั้น AFRelationship::Data และ '/Data' จึงเทียบเท่ากัน การส่งเคสคือตัวเลือกที่ปลอดภัยทางชนิด

use NextPDF\Navigation\AFRelationship;
// e-invoice payload: declare the XML as the source data
$pdf->embedFile('invoice.xml', 'Factur-X invoice data', AFRelationship::Data);