ข้อผิดพลาด core และทั่วไป
รายการเหล่านี้ครอบคลุม exception หมวด core และทั่วไปที่ NextPDF ยกขึ้น
ส่วนใหญ่สืบทอดจากฐาน NextPdfException ซึ่งตัวมันเองสืบทอดจาก
\RuntimeException และนำ ContextAwareExceptionInterface ไปใช้ อินเทอร์เฟซ
นั้นเปิดเผยเมธอดเดียวคือ getContext(): array ที่คืนแมป snake_case แบบแบนของค่า
พื้นฐานที่ปลอดภัยต่อการ serialize ลงในล็อกหรือ payload ของ APM
จับตระกูล NextPdfException ด้วย catch (NextPdfException $e) เดียว
เพิ่ม catch (\RuntimeException $e) ด้วยเพื่อครอบคลุมข้อผิดพลาดระดับล่างไม่กี่ตัวใน
ชุดนี้ที่สืบทอดจาก \RuntimeException โดยตรง (ระบุไว้ด้านล่าง) ฐาน
NextPdfException::getContext() คืนอาร์เรย์ว่าง ซับคลาสเขียนทับมัน
เพื่อเพิ่มฟิลด์เฉพาะโดเมน เมื่อคลาสไม่เขียนทับ getContext() มันจะ
สืบทอดอาร์เรย์ว่างและรายละเอียดการวินิจฉัยจะอยู่ในข้อความและ
getter แบบมีชนิดแทน
ชนิดสี่ตัวในชุดนี้ ไม่ สืบทอดจาก NextPdfException:
BlackPointCompensationUnsupportedException และ
UnsupportedSourceDocumentException สืบทอดจาก \RuntimeException โดยตรง
(จับเป็น \RuntimeException) ส่วน ComplianceViolation และ
RuleViolation เป็น value object ไม่ใช่ exception แต่ถูกบันทึกไว้ที่นี่
เพราะมันจำลองข้อมูลข้อผิดพลาดและการละเมิดที่เอนจินคืนมา
ข้อยกเว้นฐาน
หัวข้อที่มีชื่อว่า “ข้อยกเว้นฐาน”NextPdfException
หัวข้อที่มีชื่อว่า “NextPdfException”- มันคืออะไร ฐาน
abstractสำหรับทุก exception ที่ NextPDF core และแพ็กเกจส่วนขยายยกขึ้น มันสืบทอดจาก\RuntimeExceptionและนำContextAwareExceptionInterfaceไปใช้ การจับชนิดเดียวนี้จะดักจับข้อผิดพลาด ใดๆ ของไลบรารี - Context ฐาน
getContext()คืนอาร์เรย์ว่าง ซับคลาส เขียนทับมันเพื่อคืนฟิลด์เฉพาะโดเมน - Recovery ไม่ถูกยกโดยตรง ใช้มันเป็นชนิด catch-all แล้วแยกกิ่งตาม ซับคลาสที่เป็นรูปธรรมสำหรับการจัดการเฉพาะ
การกำหนดค่าและการควบคุมฟีเจอร์
หัวข้อที่มีชื่อว่า “การกำหนดค่าและการควบคุมฟีเจอร์”InvalidConfigException
หัวข้อที่มีชื่อว่า “InvalidConfigException”- ถูกยกเมื่อใด เมื่อค่า
Configหรือชุดค่าผสมไม่ถูกต้อง — การตั้งค่าที่ จำเป็นแต่ขาดหายไป ตัวเลือกที่เป็น mutually exclusive หรือค่าที่ อยู่นอกช่วงที่ยอมรับ นี่สื่อถึงข้อผิดพลาดของนักพัฒนา: โค้ดที่เรียก ป้อนการกำหนดค่าที่ต้องแก้ไขก่อนลองใหม่ ข้อความ รายงานคีย์ ชนิดหรือช่วงที่คาดหวัง และชนิด debug จริงของ ค่าที่ป้อน - Context
getContext()คืนconfig_key,given_value, และexpected_typegetter แบบมีชนิด:getConfigKey(),getGivenValue(),getExpectedType() - Recovery การกระทำของนักพัฒนา: แก้คีย์การกำหนดค่าที่ระบุชื่อให้เป็นค่า ที่อยู่ในชนิดหรือช่วงที่คาดหวังก่อนเรียก NextPDF อีกครั้ง
NotImplementedException
หัวข้อที่มีชื่อว่า “NotImplementedException”- ถูกยกเมื่อใด เมื่อมีการมาถึงจุดเข้า public API แต่
การนำไปใช้ของมันถูกละไว้โดยเจตนาในรีลีสปัจจุบัน ใช้สำหรับ
shim ที่เลิกใช้แล้วซึ่งมีอยู่เพื่อให้ผู้เรียกก่อน bisect ได้รับความล้มเหลวที่
ดังและทำตามได้แทน no-op เงียบๆ ข้อความรวม
ป้าย
featureที่ grep ด้วยเครื่องได้และการอ้างอิงfollowUp(รหัสข้อบกพร่อง จุดติดตาม หรือ ชื่อ sprint) - Context ไม่เขียนทับ
getContext()จึงคืนอาร์เรย์ว่าง ค่า$featureและ$followUpเป็นพร็อพเพอร์ตี public readonly และ ฝังอยู่ในข้อความ - Recovery การกระทำของผู้เรียกไลบรารี: ลบการเรียกออก หรือ pin ไปยังรีลีส ในอนาคตที่มี follow-up ที่ระบุชื่อนั้น
IncompatibleFeatureFlagsException
หัวข้อที่มีชื่อว่า “IncompatibleFeatureFlagsException”- ถูกยกเมื่อใด ที่เวลาสร้าง
Config(Config::validate()) เมื่อชุดCssFeatureFlagsไม่สอดคล้องกันภายใน — flag หนึ่ง สันนิษฐานอีก flag หนึ่งที่ถูกปิดอยู่ ชุดค่าผสมที่ต้องห้ามเพียงชุดเดียวในวันนี้คือlayoutSubgrid = trueกับlayoutGrid = false: แกนแบบ subgrid จะ อนุมานเส้นกริดของมันจาก grid container แม่ (CSS Grid Layout Module Level 2 §1) ดังนั้น subgrid โดยไม่มี grid จึงอธิบายกริดที่ไม่อาจมีอยู่ได้ การตรวจ ทำงานกับ flag ที่ resolve แล้ว ดังนั้นCssRenderingMode::Safe(ซึ่งบังคับให้ทุก คุณสมบัติ Phase 4+ ปิด) จะ mask ชุดค่าผสมแทนการทำให้สะดุด สืบทอดจากStrictModeViolation - Context
getContext()ผสานฟิลด์ strict-mode ของแม่ (cssDeviation,excId,chunkSha256,location) เข้ากับ booleanlayoutGridและlayoutSubgridค่าlocationคือConfig::validate()และcssDeviationเข้ารหัสคู่ flag - Recovery การกระทำของผู้เรียกไลบรารี: เปิด
layoutGridควบคู่กับlayoutSubgridหรือปิดlayoutSubgrid
IncompatibleRenderingModeException
หัวข้อที่มีชื่อว่า “IncompatibleRenderingModeException”- ถูกยกเมื่อใด ที่เวลาสร้าง
Configเมื่อการจับคู่CssRenderingModeและCssLayoutModeตกอยู่นอกเซลล์ที่เข้ากันได้ของเมทริกซ์โหมด การจับคู่ที่ต้องห้ามเพียงคู่เดียวในวันนี้คือCssRenderingMode::Safe+CssLayoutMode::Retained— Safe บังคับให้ทุกคุณสมบัติ Phase 4+ ปิด ทำให้ formatting context แบบ retained-mode (Grid, Subgrid,@container) ไม่มี ผู้บริโภค ชุดค่าผสมนี้จึงถูกปฏิเสธแทนที่จะปล่อยให้ลดทอนลง อย่างเงียบๆ สืบทอดจากStrictModeViolation - Context
getContext()ผสานฟิลด์ strict-mode ของแม่เข้ากับmode1(ค่า rendering-mode) และmode2(ค่า layout-mode) ค่าcssDeviationเข้ารหัสคู่โหมดlocationคือConfig::validate() - Recovery การกระทำของผู้เรียกไลบรารี: เลือก
Safe+Streamingสำหรับการ rollback หรือ rendering mode ที่ไม่ใช่ Safe (Normal/Strict/Audit) กับRetainedสำหรับ Grid / Subgrid / Container Queries
StrictModeViolation
หัวข้อที่มีชื่อว่า “StrictModeViolation”- ถูกยกเมื่อใด ฐาน
abstractสำหรับ exception การเบี่ยงเบนจากสเปกใดๆ ที่ถูกยก ภายใต้CssRenderingMode::Strictในโหมด strict การเบี่ยงเบน CSS ใดๆ ที่ตรวจพบ ซึ่งไม่ผูกกับรายการ exceptionEXC-NNNที่ลงทะเบียนไว้จะยกอินสแตนซ์ของ คลาสนี้ (หรือซับคลาส) ที่จุดตรวจจับ ไม่ถูกยกโดยตรง ดูIncompatibleFeatureFlagsExceptionและIncompatibleRenderingModeException - Context
getContext()คืนสี่ฟิลด์ของ ADR-023:cssDeviation(ป้ายสั้นสำหรับ construct ที่เบี่ยงเบน)excId(ตัวระบุ registry เมื่อ ลงทะเบียน มิฉะนั้นnull)chunkSha256(แฮชของ chunk การอ้างอิงสเปกเมื่อทราบ มิฉะนั้นnull) และlocation(ต้นทางที่ผู้เรียกอ่านได้ มิฉะนั้นnull) - Recovery การกระทำของผู้เรียกไลบรารี: ลงทะเบียนการเบี่ยงเบนเป็นรายการ
EXC-NNNที่ลงนามใหม่ หรือแก้ไขตัวเรนเดอร์เพื่อกำจัดการเบี่ยงเบน
อินพุต HTML และ CSS
หัวข้อที่มีชื่อว่า “อินพุต HTML และ CSS”HtmlParsingException
หัวข้อที่มีชื่อว่า “HtmlParsingException”- ถูกยกเมื่อใด เมื่อการแยกวิเคราะห์ HTML input หรือการสร้าง DOM ล้มเหลว:
การประกาศ charset ที่ไม่ถูกต้อง การละเมิดขีดจำกัดขนาด input ความลึกของ nesting ที่
มากเกินไป การล้นของจำนวนเอลิเมนต์ และข้อผิดพลาดโครงสร้างตาราง เช่น จำนวน
แถวสูงสุด การหมดทรัพยากรเฉพาะ CSS จะถูกรายงานโดย
CssParserLimitExceededExceptionและCssResolutionBudgetExceededExceptionแทน - Context
getContext()คืนhtml_snippet(ส่วนตัดทอนสั้นๆ ของ HTML ที่เป็นปัญหา)position(ออฟเซ็ตเป็นไบต์ หรือ-1หากไม่ทราบ) และrule(ข้อจำกัด parser ที่ถูกละเมิด) getter แบบมีชนิด:getHtmlSnippet(),getPosition(),getRule() - Recovery การกระทำของนักพัฒนา: ทำให้ HTML input ง่ายขึ้นหรือปรับขีดจำกัด ของ parser
CssParserLimitExceededException
หัวข้อที่มีชื่อว่า “CssParserLimitExceededException”- ถูกยกเมื่อใด เมื่อ CSS input เกินขีดจำกัดความปลอดภัยของ parser
ที่กำหนดค่าไว้ มีสองหมวดหมู่ที่ครอบคลุมผ่าน constructor ที่ระบุชื่อ:
forByteLimit()(สไตล์ชีตใหญ่เกินไปสำหรับการประมวลผล regex อย่างปลอดภัย) และforNestingDepth()(การ recursion ของ CSS nesting ลึกเกินไป) ทั้งสองข้อความระบุชื่อ ค่าจริงและขีดจำกัด - Context
getContext()คืนlimit_type(byteหรือnesting_depth),actual, และlimit - Recovery การกระทำของนักพัฒนา: แบ่งสไตล์ชีตเป็นชีตเล็กลง หรือ ลดความลึกของ nesting หรือเพิ่มขีดจำกัดที่กำหนดค่าไว้
CssResolutionBudgetExceededException
หัวข้อที่มีชื่อว่า “CssResolutionBudgetExceededException”- ถูกยกเมื่อใด เมื่อการ resolve CSS
:has()เกินงบประมาณการ traverse ของมัน ตัว resolver:has()แบบสองรอบบังคับใช้งบประมาณการเยี่ยม node อย่างเข้มงวด เพื่อป้องกันไม่ให้ selector ที่ผิดปกติทำให้เกิดการเดินเอกสารแบบกำลังสอง เมื่อ จำนวนการเยี่ยมรวมเกินขีดจำกัด สไตล์ชีตจะถูกปฏิเสธเพราะซับซ้อน เกินไป ข้อความระบุชื่อจำนวนการเยี่ยมและงบประมาณ - Context
getContext()คืนvisitsและbudgetgetter แบบมีชนิด:getVisits(),getBudget() - Recovery การกระทำของนักพัฒนา: ลดความซับซ้อนของ selector หรือเพิ่ม งบประมาณที่กำหนดค่าไว้
ฟอนต์และรูปภาพ
หัวข้อที่มีชื่อว่า “ฟอนต์และรูปภาพ”FontNotFoundException
หัวข้อที่มีชื่อว่า “FontNotFoundException”- ถูกยกเมื่อใด เมื่อไฟล์ฟอนต์ไม่อาจระบุตำแหน่งหรืออ่านได้ที่ระดับ ระบบไฟล์: family หรือ path ที่ร้องขอไม่มีอยู่ ไม่อาจ อ่านได้ หรือไดเรกทอรีฟอนต์ที่กำหนดค่าไว้เข้าถึงไม่ได้ ข้อมูลฟอนต์อาจ ถูกต้อง — นี่สื่อเพียงว่าไม่อาจเข้าถึงมันได้ ข้อความแสดงรายการ path ที่ค้นหา
- Context
getContext()คืนfont_name,search_paths(รายการ) และfallback_attempted(bool) getter แบบมีชนิด:getFontName(),getSearchPaths(),wasFallbackAttempted() - Recovery การกระทำของนักพัฒนา: ตรวจสอบ path ของฟอนต์ การกระทำด้านโครงสร้างพื้นฐาน: แก้สิทธิ์ของไฟล์บนไฟล์ฟอนต์หรือไดเรกทอรี
FontParsingException
หัวข้อที่มีชื่อว่า “FontParsingException”- ถูกยกเมื่อใด เมื่อพบไฟล์ฟอนต์แต่เนื้อหาไม่
ใช้งานได้: มันเสียหาย อยู่ในรูปแบบที่ไม่รองรับ หรือขาดตารางที่จำเป็น
ครอบคลุมความล้มเหลวของการตรวจสอบยืนยันโครงสร้างระหว่างการแยกวิเคราะห์ TrueType, Type 1, CFF, และ
OpenType — header ที่ถูกตัดทอน table directory ที่ไม่ถูกต้อง ตาราง
บังคับที่ขาดหายไป (
head,hhea,OS/2) ข้อผิดพลาดการ unpack และการละเมิด ขนาด ข้อความระบุชื่อไฟล์และข้อผิดพลาดการแยกวิเคราะห์ - Context
getContext()คืนfont_fileและparse_errorgetter แบบมีชนิด:getFontFile(),getParseError() - Recovery การกระทำของนักพัฒนา: แทนที่ไฟล์ฟอนต์ด้วยไฟล์ที่ถูกต้อง
ImageProcessingException
หัวข้อที่มีชื่อว่า “ImageProcessingException”- ถูกยกเมื่อใด เมื่อรูปภาพไม่อาจถอดรหัสได้ อยู่ในรูปแบบที่ ไม่รองรับ หรือล้มเหลวในการประมวลผล GD/Imagick: magic byte ที่ไม่รู้จัก JPEG ที่ เสียหาย ชนิด MIME ที่ไม่รองรับ การละเมิดขีดจำกัดขนาดไฟล์ และความล้มเหลว ในการจัดสรรทรัพยากร GD รูปภาพเข้าถึงได้แต่ข้อมูลพิกเซลของมันไม่อาจ ดึงมาฝังได้
- Context
getContext()คืนimage_path(ว่างสำหรับข้อมูล inline),format(ที่ตรวจพบหรือคาดหวัง เช่นjpeg,png,unknown) และoperation(เช่นdecode,resize,embed) getter แบบมีชนิด:getImagePath(),getFormat(),getOperation() - Recovery การกระทำของนักพัฒนา: จัดหาไฟล์รูปภาพที่ถูกต้องและรองรับ
เอาต์พุต เลย์เอาต์ และการซีเรียลไลซ์
หัวข้อที่มีชื่อว่า “เอาต์พุต เลย์เอาต์ และการซีเรียลไลซ์”CompressionException
หัวข้อที่มีชื่อว่า “CompressionException”- ถูกยกเมื่อใด เมื่อการบีบอัดหรือคลายการบีบอัด FlateDecode (zlib)
ล้มเหลว — ความล้มเหลว
gzcompress/gzuncompressบน content stream ข้อมูลฟอนต์ เนื้อหาหน้า ข้อมูลไฟล์แนบ และ cross-reference stream โดยทั่วไปคือ input stream ที่เสียหาย หน่วยความจำไม่เพียงพอ หรือส่วนขยาย zlib ที่ขาดหายไป - Context
getContext()คืนalgorithm(ชื่อ filter เช่นFlateDecode,LZWDecode) และstream_length(ความยาวเป็นไบต์ หรือ-1หาก ไม่ทราบ) getter แบบมีชนิด:getAlgorithm(),getStreamLength() - Recovery การกระทำด้านโครงสร้างพื้นฐาน: ตรวจสอบว่า
ext-zlibถูกโหลดและหน่วยความจำ เพียงพอ
WriterException
หัวข้อที่มีชื่อว่า “WriterException”- ถูกยกเมื่อใด เมื่อการ serialize PDF การ linearize หรือเอาต์พุต I/O
ล้มเหลว: ข้อผิดพลาดการเขียน stream ของ
PdfWriterการเสียหายของตาราง cross-reference ความล้มเหลวการสร้าง header/trailer ความล้มเหลวการ resolve การอ้างอิงอ็อบเจ็กต์ ข้อผิดพลาดการเขียน ไฟล์ และการล้นของบัฟเฟอร์เอาต์พุต เอกสารในหน่วยความจำที่ถูกต้องไม่อาจ ถูก serialize เป็น byte stream ที่ถูกต้องได้ ข้อความระบุชื่อขั้นตอน - Context
getContext()คืนoutput_path(ว่างสำหรับเอาต์พุตแบบ string) และwriter_state(ขั้นตอน เช่นheader,body,xref,trailer) getter แบบมีชนิด:getOutputPath(),getWriterState() - Recovery การกระทำด้านโครงสร้างพื้นฐาน: ตรวจสอบพื้นที่ดิสก์ สิทธิ์ของไฟล์ และ output stream
PageLayoutException
หัวข้อที่มีชื่อว่า “PageLayoutException”- ถูกยกเมื่อใด เมื่อข้อจำกัดการจัดวางหน้าไม่อาจสนองได้: การละเมิด column-layout (ความกว้างไม่เพียงพอ จำนวน column ที่ไม่ถูกต้อง) เนื้อหา ที่ล้นเกินขอบเขตหน้า และความขัดแย้งของ margin การจัดวางที่ร้องขอเป็นไป ไม่ได้เชิงเรขาคณิตสำหรับมิติหน้าและเนื้อหาที่กำหนด ข้อความระบุชื่อหมายเลขหน้าเมื่อทราบและข้อจำกัดที่ถูกละเมิด
- Context
getContext()คืนpage_number(เริ่มจากหนึ่ง หรือ0หาก ไม่ทราบ) และconstraintgetter แบบมีชนิด:getPageNumber(),getConstraint() - Recovery การกระทำของนักพัฒนา: ปรับขนาดหน้า margin การตั้งค่า column หรือ เนื้อหา
TemplateException
หัวข้อที่มีชื่อว่า “TemplateException”- ถูกยกเมื่อใด เมื่อการนำเข้าหรือใช้ซ้ำ template ของ PDF ล้มเหลวใน
TemplateManager: การเปลี่ยนสถานะ template ที่ไม่ถูกต้อง (การเริ่มหรือสิ้นสุด template นอกลำดับ) การอ้างอิง template ที่ไม่มีอยู่ และความล้มเหลว การบีบอัด stream ระหว่างการ serialize template ข้อความระบุชื่อ operation และ template id เมื่อกำหนดแล้ว - Context
getContext()คืนtemplate_id(ว่างหากยังไม่กำหนด) และoperation(เช่นbegin,end,use,serialize) getter แบบมีชนิด:getTemplateId(),getOperation() - Recovery การกระทำของนักพัฒนา: แก้ลำดับการใช้ template หรือ source PDF
invariant ของสตรีมเนื้อหา
หัวข้อที่มีชื่อว่า “invariant ของสตรีมเนื้อหา”ContentStreamBalanceException
หัวข้อที่มีชื่อว่า “ContentStreamBalanceException”- ถูกยกเมื่อใด เมื่อ
ContentStreamBuilderตรวจพบคู่ operator ที่ไม่สมดุล ตอนปิด stream (หรือกลาง stream เมื่อ invariant ถูกยืนยันแบบ eager) มันจับตัวนับความลึกที่ล้มเหลว invariant ความสมดุลเพื่อให้ การล็อกระบุได้ว่า emitter ตัวใดทำq,BT, หรือBMCรั่วโดยไม่มีQ,ET, หรือEMCที่จับคู่ ตาม ISO 32000-2:2020 §8.4.2 (graphics-state stack), §9.4.1 (text objects), และ §14.6 (marked content) - Context
getContext()คืนgraphics_depth,text_block_depth,marked_content_depth, และoffending_operatorgetter แบบมีชนิด:getGraphicsDepth(),getTextBlockDepth(),getMarkedContentDepth(),getOffendingOperator() - Recovery การกระทำของนักพัฒนา: ค้นหา emitter ที่เปิด construct โดยไม่ปิดมัน
GraphicsStateBalanceException
หัวข้อที่มีชื่อว่า “GraphicsStateBalanceException”- ถูกยกเมื่อใด เมื่อ content stream ของ PDF ปิดด้วย operator
q/Qที่ ไม่สมดุล ISO 32000-2:2020 §8.4.2 กำหนดให้การบันทึก graphics-state (q) แต่ละครั้ง ต้องจับคู่กับการ restore (Q) หนึ่งครั้งพอดีก่อน stream สิ้นสุด ความไม่สมดุล ทำให้ transform, clipping path, สี และ rendering intent รั่วเข้าสู่หน้า ถัดไปหรือ Form XObject ถูกยกเฉพาะเมื่อเปิดการตรวจ graphics-state แบบ strict (NEXTPDF_GFXSTATE_STRICT=1) ในโหมด relaxed จะมีคำเตือนถูกปล่อยผ่านtrigger_error()แทน - Context
getContext()คืนsave_depth(เป็นบวกเมื่อ save มากเกินไป เป็นลบเมื่อ restore มากเกินไป) getter แบบมีชนิด:getSaveDepth() - Recovery การกระทำของนักพัฒนา: ค้นหาคู่
save()/restore()ที่ไม่จับคู่กัน
MissingShadingResourceException
หัวข้อที่มีชื่อว่า “MissingShadingResourceException”- ถูกยกเมื่อใด เมื่อ
ConicGradientRenderer::render()ถูกเรียกใช้ โดยไม่มีบริบท registry ของ Shading-resource การเปลี่ยนแปลงแบบ breaking ใน v10.0.0 ลบเส้นทาง surrogate แบบ implicit-marker-map เดิมออก: ผู้เรียกต้องสร้าง ตัวเรนเดอร์ด้วยShadingResourceRegistryInterfaceเพื่อให้อ็อบเจ็กต์ indirect/ShadingType 4ถูกลงทะเบียนกับ Shading-resource subdictionary ของหน้า (ISO 32000-2 §8.7.4.2 / §8.7.4.3) ข้อความระบุชื่อบริบทของผู้เรียก และชี้ไปยังหมายเหตุการ migration v9.x→v10.0 - Context
getContext()คืนcontext(ป้ายบริบทของผู้เรียกสั้นๆ เช่นConicGradientRenderer::render) - Recovery การกระทำของผู้เรียกไลบรารี: เชื่อมต่ออินสแตนซ์ registry ของ Shading-resource
เข้ากับ constructor ของตัวเรนเดอร์ก่อนเรียก
render()
Linearization (Fast Web View)
หัวข้อที่มีชื่อว่า “Linearization (Fast Web View)”LinearizationInvariantException
หัวข้อที่มีชื่อว่า “LinearizationInvariantException”- ถูกยกเมื่อใด เมื่อ
Linearizerแบบสามรอบ v2 ตรวจพบว่า การยืนยัน MEASURE → PLACE → FILL ของมันถูกละเมิด: จำนวนไบต์ใน Pass 3 ไม่ ตรงกับความยาวไฟล์ที่ Pass 1 ทำนายไว้ (offset drift) ตัวยึดตำแหน่ง dictionary ของ linearization เล็กเกินไปสำหรับความกว้างที่ serialize หรือ offset ของ hint-stream/H [offset length]ไม่ตรงกับเอาต์พุตสุดท้าย การปรากฏสิ่งนี้ แทนการปล่อย PDF ที่เสียหายเป็นการรับประกันความปลอดภัยที่ระบุไว้ - Context
getContext()คืนinvariant(ชื่อ invariant ที่ถูกละเมิด),expected,actual, และdelta(ผลต่างแบบมีเครื่องหมาย) getter แบบมีชนิด:getInvariant(),getExpectedValue(),getActualValue() - Recovery การกระทำของผู้ดูแล: ยื่นรายงานข้อบกพร่อง — invariant เหล่านี้ควร เป็นจริงสำหรับ input ที่ดีทุกตัว จับ exception ก่อนหน้าที่เชื่อมโยงกันไว้
LinearizationUnimplementedException
หัวข้อที่มีชื่อว่า “LinearizationUnimplementedException”- ถูกยกเมื่อใด เมื่อ feature flag ของ linearizer ถูกตั้งเป็น backend
ที่ถูกปิดโดยเจตนา ปัจจุบันถูกยกเฉพาะสำหรับ
linearizerVersion === 'v1-noop'ซึ่งเป็นการตั้งค่า downgrade ฉุกเฉินที่ปฏิเสธ ความพยายาม linearization ทั้งหมดขณะรันไทม์โดยไม่ต้องเปลี่ยนโค้ดหรือ redeploy — มีประโยชน์สำหรับ kill-switch Fast Web View ในการใช้งานจริง - Context
getContext()คืนreason(คำอธิบายสั้นๆ ที่มนุษย์ อ่านได้) getter แบบมีชนิด:getReason() - Recovery การกระทำของผู้ปฏิบัติงาน / release-engineering: ปรับการกำหนดค่า หรืออัปเกรดเป็น backend เวอร์ชันที่แก้ไขแล้ว
ความสอดคล้องและ invariant ของโปรไฟล์
หัวข้อที่มีชื่อว่า “ความสอดคล้องและ invariant ของโปรไฟล์”ConformanceViolationException
หัวข้อที่มีชื่อว่า “ConformanceViolationException”- ถูกยกเมื่อใด เมื่อคุณสมบัติที่ร้องขอไม่อาจปล่อยออกได้โดยไม่
ทำลายสัญญาความสอดคล้อง ISO ที่เอกสารประกาศไว้ และเอนจิน
ล้มเหลวแบบปิดแทนการเขียนอ็อบเจ็กต์ที่ไม่สอดคล้อง ตัวกระตุ้นหลักคือ
multimedia
Screenannotation หรือRenditionaction (ISO 32000-2:2020 §12.5.6.18 / §13.2) ภายใต้ archival profile แบบ PDF/A ซึ่ง PDF/A ทุกส่วน ห้าม (ISO 19005 series) — ไฟล์จะล้มเหลวการตรวจสอบ veraPDF เอนจินจึงปฏิเสธ ตั้งแต่ต้น - Context
getContext()คืนconformance_mode(โหมดที่ประกาศ เช่นpdfa4) และfeature(คุณสมบัติที่ถูกปฏิเสธ เช่นScreen annotation) ทั้งสองเป็นพร็อพเพอร์ตี public readonly เหตุผลคือข้อความ exception - Recovery การกระทำของนักพัฒนา: ลบการเรียก multimedia สำหรับเอาต์พุต archival
หรือมุ่งไปยัง conformance profile ที่ไม่ใช่ archival (ค่าเริ่มต้น
ConformanceMode::Plain)
PdfRViolationException
หัวข้อที่มีชื่อว่า “PdfRViolationException”- ถูกยกเมื่อใด เมื่อ invariant ความสอดคล้อง PDF/R-1 (ISO 23504-1:2020)
ถูกละเมิด ไม่ว่าจะที่การสร้าง value object (profile
PdfRStrip,PdfRPage,PdfRDocument) หรือที่เวลา validator (PdfRValidator) มันจับ ข้อกำหนด normative ที่เป็นปัญหาและคำอธิบายการละเมิดหนึ่งบรรทัดเพื่อให้ผู้บริโภค audit สามารถส่งข้อค้นพบไปยัง sub-clause §6 ที่ถูกต้องโดยไม่ต้องแยกวิเคราะห์ข้อความ อิสระ - Context
getContext()คืนstandard(เป็นISO 23504-1:2020เสมอ),clause(เส้นทาง clause เช่น6.6.1) และviolationgetter แบบมีชนิด:getClause(),getViolation() - Recovery การกระทำของนักพัฒนา: แก้ input ที่ถูกปฏิเสธหรือสร้างเอกสารใหม่ ให้สอดคล้องกับ clause ที่อ้างถึง
การสร้างบาร์โค้ด
หัวข้อที่มีชื่อว่า “การสร้างบาร์โค้ด”BarcodeException
หัวข้อที่มีชื่อว่า “BarcodeException”- ถูกยกเมื่อใด เมื่อการสร้างบาร์โค้ดล้มเหลวเนื่องจากข้อมูลที่ไม่ถูกต้องหรือ
ข้อผิดพลาดการ encode ในทุก symbology ที่รองรับ (Code 39/128, UPC-A/E,
EAN-8/13, Interleaved/Standard 2-of-5, POSTNET, PLANET, MSI, ISBN, ISSN, QR
Code, PDF417, DataMatrix, JabCode) และความล้มเหลวการเรนเดอร์ GD ระหว่างการสร้าง
รูปภาพ ค่าบาร์โค้ดถูกจำกัดด้วยส่วนตัดทอนที่ 128 ไบต์ในข้อความและ
context — payload ที่ยาวเกินหรือเป็นไบนารีจะถูกเก็บแบบตัดทอนพร้อม
ตัวระบุ
... (<N> bytes, truncated)เพื่อไม่ให้คัดลอกทั้งหมดลงในล็อกได้ - Context
getContext()คืนbarcode_type(symbology เช่นQRCODE,EAN13,CODE128) และvalue(ค่าที่ตัดทอน) getter แบบมีชนิด:getBarcodeType(),getValue() - Recovery การกระทำของนักพัฒนา: แก้ข้อมูลบาร์โค้ดหรือการเลือก symbology
BarcodeEncoderNotFoundException
หัวข้อที่มีชื่อว่า “BarcodeEncoderNotFoundException”- ถูกยกเมื่อใด จาก
BarcodeEncoderRegistryเมื่อชนิด encoder ที่ร้องขอ ไม่รู้จักหรือ capability gate ของมันปิดอยู่ มันยังนำ PSR-11Psr\Container\NotFoundExceptionInterfaceไปใช้ด้วย registry จึงเป็น คอนเทนเนอร์ที่สอดคล้องกับมาตรฐาน ข้อความระบุชื่อ symbology และ เหตุผล - Context ไม่เขียนทับ
getContext()จึงคืนอาร์เรย์ว่างtypeและreasonเข้าถึงได้ผ่าน gettergetType()และgetReason()และในข้อความ - Recovery การกระทำของนักพัฒนา: ลงทะเบียน encoder หรือติดตั้งแพ็กเกจ
ที่จัดหามัน (ตัวอย่างเช่น
nextpdf/proสำหรับ Micro QR / DotCode / HanXin / JabCode)
การเข้ารหัสลับ การเข้ารหัส และลายเซ็น
หัวข้อที่มีชื่อว่า “การเข้ารหัสลับ การเข้ารหัส และลายเซ็น”EncryptionException
หัวข้อที่มีชื่อว่า “EncryptionException”- ถูกยกเมื่อใด เมื่อการเข้ารหัสลับหรือถอดรหัส PDF ล้มเหลว: ความล้มเหลว encrypt/decrypt ของ AES-256-CBC ข้อผิดพลาด OpenSSL ขนาด IV ที่ไม่ถูกต้อง ความล้มเหลว การคำนวณแฮช และข้อผิดพลาดการคำนวณค่า UE/OE โดยทั่วไปคือส่วนขยาย OpenSSL ที่ ขาดหายไปหรือกำหนดค่าผิด วัสดุคีย์ที่ไม่ถูกต้อง หรือข้อมูลที่เข้ารหัสลับเสียหาย ข้อความระบุชื่อ operation และอัลกอริทึม
- Context
getContext()คืนalgorithm(เช่นAES-256-CBC) และoperation(เช่นencrypt,decrypt,key_derivation) getter แบบมีชนิด:getAlgorithm(),getOperation() - Recovery การกระทำด้านโครงสร้างพื้นฐาน: ตรวจสอบให้แน่ใจว่า OpenSSL พร้อมใช้งานและกำหนดค่า อย่างถูกต้อง ดูการเข้ารหัสลับและสิทธิ์
UnsupportedAlgorithmException
หัวข้อที่มีชื่อว่า “UnsupportedAlgorithmException”- ถูกยกเมื่อใด เมื่ออัลกอริทึมการเข้ารหัสลับไม่อาจรันได้ใน
รันไทม์ปัจจุบัน: ส่วนขยาย PHP ที่จำเป็นไม่พร้อมใช้งาน ไลบรารีพื้นฐาน
ขาด primitive ส่วนขยาย
hashที่มาด้วยไม่อาจสังเคราะห์ตัวแปร SHAKE/XOF หรืออัลกอริทึมไม่ได้ลงทะเบียนในSignatureAlgorithmRegistryเอนจินต้องไม่ลดทอนลงเป็น primitive ที่อ่อนกว่า อย่างเงียบๆ จึงปรากฏสิ่งนี้แทน static factorynonFipsHostUnderFipsProfile()ยกมันขึ้น (พร้อมตัวระบุอัลกอริทึมregulatory-profile:fips) เมื่อเลือกRegulatoryProfile::FIPSแต่ไม่อาจ ยืนยัน provider OpenSSL ที่ผ่านการตรวจ FIPS ได้ (ทั้งFIPS_ABSENTและINDETERMINATEล้มเหลวแบบปิด) - Context
getContext()คืนalgorithm(ชื่อหรือ OID เช่นshake256,Ed25519,AES-256-GCM) และreason(ที่ผู้ปฏิบัติงานทำตามได้) getter แบบมีชนิด:getAlgorithm(),getReason() - Recovery การกระทำของผู้ปฏิบัติงาน: ติดตั้งส่วนขยายที่ขาดหายไปหรืออัปเกรด
รันไทม์ สำหรับ FIPS gate ให้ติดตั้งบิลด์ OpenSSL ที่ผ่านการตรวจ FIPS หรือตั้ง
NEXTPDF_FIPS_MODEอย่างชัดเจน การกระทำของนักพัฒนา: ลงทะเบียน descriptor อัลกอริทึมแบบกำหนดเองผ่านSignatureAlgorithmRegistry::register()
SignatureException
หัวข้อที่มีชื่อว่า “SignatureException”- ถูกยกเมื่อใด เมื่อ operation ลายเซ็นดิจิทัลล้มเหลว: การจัดการใบรับรอง
และคีย์ส่วนตัว (การแยกวิเคราะห์ PKCS#12 การถอดรหัส PEM/DER การตรวจสอบ X.509),
การสร้าง PKCS#7/CMS รูปแบบลายเซ็น ECDSA การละเมิดขนาดคอนเทนเนอร์ การ encode
DER และการ orchestrate PAdES ข้อผิดพลาดเฉพาะ TSA จะถูกรายงานโดย
TsaExceptionที่เฉพาะเจาะจงกว่าแทน ให้เลือก factory ที่ระบุชื่อแบบมีชนิด มากกว่า constructor แบบเรียงลำดับ แต่ละตัวผูกสาเหตุรากเข้ากับ ส่วนท้ายของข้อความ ตัวอย่าง:ltvCapabilityMissing()(B-LT/B-LTA ต้องใช้nextpdf/enterprise),tsaRequired()/tsaUrlEmpty()/tsaEmptyToken(),httpClientMissing(),hsmSignerMissing()/hsmSignatureEmpty(),signatureContentsNotFound()/signatureContentsPaddingCorrupt(),unexpectedKeyType(),pemDecodingFailed()ตระกูล Ed25519 (ed25519SignatureMalformed(),ed25519RoundTripVerifyFailed(),ed25519KeyParseFailed(),ed25519SeedInvalid(),ed25519SecretKeyMalformed(),ed25519PublicKeyInvalid()),documentTimestampNotEmitted(),algorithmPolicyRejected(),digestOnlyAlgorithmRefused(),encryptedLtvUnsupported(),incrementalUpdateWriterMissing(), และคู่สถานะ OCSPnonSuccessfulOcspResponseStatus()/reservedOcspResponseStatus()(RFC 6960 §4.2.1) factory เหล่านี้ล้มเหลวแบบปิดแทนการปล่อยลายเซ็นที่ถูกลดระดับ อย่างเงียบๆ - Context
getContext()คืนcert_info(subject DN หรือ thumbprint หรือ ว่าง),signature_level(ระดับ PAdES ที่พยายาม เช่นB-B,B-T,B-LT,B-LTA) และdetail(การวินิจฉัยที่ทำตามได้ ว่างสำหรับ constructor แบบเรียงลำดับเดิม) getter แบบมีชนิด:getCertInfo(),getSignatureLevel(),getDetail() - Recovery การกระทำของนักพัฒนา: แก้การกำหนดค่าใบรับรอง/คีย์ สำหรับ factory ที่ขาดความสามารถ ให้ติดตั้งแพ็กเกจที่ระบุชื่อ ดู Signature and timestamp failures สำหรับรายการอาการและการแก้ไขแยกตาม factory
BlackPointCompensationUnsupportedException
หัวข้อที่มีชื่อว่า “BlackPointCompensationUnsupportedException”- ถูกยกเมื่อใด จาก
NullBlackPointCompensationTransform::transform()เมื่อผู้เรียกขอให้ null adapter ใช้ transform black-point compensation ของ ISO 18619 ที่ไม่ใช่Defaultnull adapter เป็น fallback ที่ปลอดภัยสำหรับ สภาพแวดล้อมที่ไม่มี backend จัดการสี การสร้างตัวอย่างที่ transform แล้วโดยไม่มีโมดูลจัดการสีจริงจะรายงานการแปลงผิด อย่างเงียบๆ ไม่เหมือนรายการส่วนใหญ่ที่นี่ ตัวนี้สืบทอดจาก\RuntimeExceptionโดยตรง ไม่ใช่NextPdfExceptionเส้นทางcatch (\RuntimeException)ที่มีอยู่ จึงยังทำงานต่อไป - Context ไม่มี
getContext()มันเป็น\RuntimeExceptionธรรมดา รายละเอียด อยู่ในข้อความ - Recovery การกระทำของนักพัฒนา: ลงทะเบียน
BlackPointCompensationTransformจริง (LittleCMS, Argyll, pure-PHP) หรือจำกัด/UseBlackPtCompไว้ที่BlackPointCompensation::Default
การประกอบเอกสารและการเข้าถึง
หัวข้อที่มีชื่อว่า “การประกอบเอกสารและการเข้าถึง”UnsupportedSourceDocumentException
หัวข้อที่มีชื่อว่า “UnsupportedSourceDocumentException”- ถูกยกเมื่อใด เมื่อเอกสารต้นทางไม่อาจคัดลอกอย่างปลอดภัยเข้าสู่
เอาต์พุต merge/split และ operation ล้มเหลวแบบปิดแทนการปล่อยผลลัพธ์ที่
เสียหายหรือถูกบุกรุกด้านความปลอดภัย ใช้ factory ที่ระบุชื่อ:
encrypted()(ISO 32000-2 §7.6 — เนื้อหาไม่อาจคัดลอกได้โดยไม่มีคีย์)signed()(§12.8 — การคัดลอกหน้าจะทำให้ลายเซ็น byte range เป็นโมฆะ),unsupportedStreamFilter()(filter ที่ตัวอ่าน object-graph ไม่อาจ round-trip ได้),multipleInteractiveForms()(ข้อจำกัดที่บันทึกไว้: ต้นทาง มากกว่าหนึ่งพกพา/AcroFormที่ไม่ว่าง §12.7) และsplitWithInteractiveForm()(ข้อจำกัดที่บันทึกไว้: การ subset หน้าจาก ต้นทางที่มี form จะทิ้ง widget ให้ไร้ที่พึ่ง) สืบทอดจาก\RuntimeExceptionโดยตรง ไม่ใช่NextPdfException - Context ไม่มี
getContext()มันเป็น\RuntimeExceptionธรรมดา สาเหตุ และหมายเลขอ็อบเจ็กต์ที่ได้รับผลกระทบถูกระบุชื่อในข้อความ - Recovery การกระทำของนักพัฒนา: ถอดรหัสต้นทางก่อนหรือจัดหาคีย์ สำหรับต้นทางที่เซ็นแล้ว ให้เซ็นหลังการรวมแทน สำหรับการรวมหลาย form ให้ flatten หรือลบฟิลด์ form ของทุกต้นทางยกเว้นหนึ่ง สำหรับการ split ที่มี form ให้ flatten form ก่อนการ split
InvalidBcp47TagException
หัวข้อที่มีชื่อว่า “InvalidBcp47TagException”- ถูกยกเมื่อใด จาก
Bcp47Validator::validate()เมื่อ candidate language tag มีรูปแบบไม่ถูกต้องตาม RFC 5646 §2.1 ABNF หรือล้มเหลวการค้นหา ใน registry ที่คัดเลือกไว้ เฉพาะเจาะจงกับโดเมน BCP-47 / ISO 14289-2:2024 §8.4.4 แยกจากInvalidConfigExceptionเพื่อให้ผู้เรียกที่อยู่ปลายน้ำของ seam การช่วยการเข้าถึง จับชนิดที่แคบได้ คู่ predicateBcp47Validator::isWellFormed()/isValid()ยังคงเป็นพื้นผิวค่าคืนแบบ backward-compatible สำหรับผู้เรียกที่ชอบการแยกกิ่งมากกว่า exception - Context
getContext()คืนtag(candidate ตามที่ป้อนมาทุกประการ) และreason(รหัสการปฏิเสธที่เครื่องอ่านได้และเสถียร เช่นempty-string,well-formed-shape,unregistered-primary,duplicate-variant) getter แบบมีชนิด:getTag(),getReason() - Recovery การกระทำของนักพัฒนา: แก้ language tag ให้เป็น BCP-47 tag ที่มีรูปแบบ ถูกต้องและลงทะเบียนแล้ว ดู Fonts and tagging
FormFieldAccessibilityException
หัวข้อที่มีชื่อว่า “FormFieldAccessibilityException”- ถูกยกเมื่อใด เมื่อฟิลด์ form แบบโต้ตอบต้องพึ่งพาชื่อที่
เข้าถึงได้แบบสังเคราะห์ (ไม่ได้มาจากผู้เขียน) ขณะสร้างเอกสาร PDF/UA ที่
เปิดการบังคับใช้ชื่อฟิลด์ที่เข้าถึงได้แบบ strict เอาต์พุต PDF/UA เริ่มต้นปล่อย
ชื่อ fallback แบบสังเคราะห์ลงใน widget
/Contentsเพื่อให้ฟิลด์ไม่เคย ไม่มีชื่อ ส่วนโหมด strict กำหนดให้ผู้เขียนจัดหาชื่อที่มีความหมาย (tooltip หรือคำบรรยายสำหรับ push button ที่ไม่มี action) เพื่อให้ผู้ใช้ screen-reader ได้รับคำอธิบายจริง (ISO 14289-2:2024 §8.10.2) - Context ไม่เขียนทับ
getContext()จึงคืนอาร์เรย์ว่าง$fieldIdเป็นพร็อพเพอร์ตี public readonly เหตุผลคือข้อความ - Recovery การกระทำของนักพัฒนา: จัดหา tooltip / ชื่อที่เข้าถึงได้สำหรับ ฟิลด์ที่ระบุชื่อก่อนสร้างเอกสาร PDF/UA แบบ strict หรือปิดโหมด strict ดู PDF/A and PDF/UA validation
VendorExtensionRegistryConflictException
หัวข้อที่มีชื่อว่า “VendorExtensionRegistryConflictException”- ถูกยกเมื่อใด จาก
VendorExtensionRegistry::register()เมื่อผู้เรียก ลงทะเบียน prefix ของ vendor developer-extension PDF ที่รู้จัก (ISO 32000-2:2020 §7.12.1) ซ้ำด้วยคำอธิบายที่ขัดแย้งกับ ข้อมูลเมตาที่ลงทะเบียนไว้แล้ว descriptor เป็นแบบ append-only และตรวจจับความขัดแย้ง exception แบบมีชนิดแทนที่\RuntimeExceptionทั่วไปเพื่อให้ผู้เรียกจับ คลาสที่เฉพาะเจาะจงนี้ได้ - Context
getContext()คืนprefix,existing_description, และattempted_descriptiongetter แบบมีชนิด:getPrefix(),getExistingDescription(),getAttemptedDescription() - Recovery การกระทำของนักพัฒนา: ลงทะเบียน prefix ด้วยคำอธิบายที่ มีอยู่ หรือใช้ prefix ที่แตกต่าง อย่าเขียนทับข้อมูลเมตาที่ลงทะเบียนไว้
การส่งออกข้อมูลการตรวจสอบ
หัวข้อที่มีชื่อว่า “การส่งออกข้อมูลการตรวจสอบ”AuditExportException
หัวข้อที่มีชื่อว่า “AuditExportException”- ถูกยกเมื่อใด เมื่อการประกอบ bundle audit-export การสร้าง
traceability-matrix หรือการ project schema ล้มเหลวขณะรันไทม์ ครอบคลุม I/O กับ
claims.json/manifest.jsonการ encode/decode JSON ของ bundle ตามแบบ และความไม่ตรงกันของ schema-version บนเส้นทาง backward-compatAuditExporter::projectToV1()ข้อความระบุชื่อขั้นตอน artefact เมื่อทราบ และ รายละเอียด - Context
getContext()คืนstage(เช่นread_claims,encode_bundle,project_v1),detail, และartefact(path หรือ schema_version ที่ทำให้เกิดความล้มเหลว) getter แบบมีชนิด:getStage(),getDetail(),getArtefact() - Recovery การกระทำด้าน compliance / DevOps: ตรวจสอบ path ของ input artefact
สร้าง
claims.jsonใหม่จากการรันที่สะอาด หรือสร้าง manifest ใหม่ก่อน ลองทำการ export อีกครั้ง
value object ของการละเมิด
หัวข้อที่มีชื่อว่า “value object ของการละเมิด”สิ่งเหล่านี้ไม่ใช่ exception เป็น value object แบบ immutable ที่เอนจินคืนมาเพื่อ
อธิบายการละเมิดแต่ละรายการ มันไม่พกพา getContext()
ComplianceViolation
หัวข้อที่มีชื่อว่า “ComplianceViolation”- มันคืออะไร value object แบบ
final readonlyที่แทนความล้มเหลวของกฎหนึ่งข้อ ที่รายงานโดย validator ภายนอก (veraPDF หรือเทียบเท่า) รวมถึงการอ้างอิง ISO clause และตำแหน่งภายในโครงสร้าง PDF - Fields พร็อพเพอร์ตี public readonly:
ruleId(ตัวระบุกฎของ validator เช่น6.1.2-1),clause(การอ้างอิง ISO clause เช่นISO 19005-1:2005, 6.1.2),severity(เช่นerror,warning),location(เส้นทางอ็อบเจ็กต์ภายในโครงสร้าง PDF) และmessage(คำอธิบายที่มนุษย์อ่านได้) - Use ตรวจสอบคอลเลกชันที่ compliance validator คืนมา ส่งหรือ
แสดงแต่ละรายการตาม
severityและclauseดู PDF/A and PDF/UA validation
RuleViolation
หัวข้อที่มีชื่อว่า “RuleViolation”- มันคืออะไร value object แบบ
final readonlyที่แทนการละเมิด business-rule Schematron / EN 16931 หนึ่งข้อ คืนโดยSchematronRunnerInterface::runRules()และรวมไว้ในValidationResult::$ruleViolationsความเสถียรเป็นแบบ experimental - Fields พร็อพเพอร์ตี public readonly:
ruleId(ตัวระบุ EN 16931 เช่นBR-{n},BR-CO-{n},BR-CL-{n},BR-DEC-{n}หรือ pack เฉพาะ tier),severity(enumRuleSeverity),message(ข้อความกฎ en-GB),xpath(XPath เข้าสู่ XML ที่ฝังไว้nullสำหรับกฎทั้งเอกสาร) และsemanticPath(เส้นทาง BG/BT แบบ dot-notation เช่นBG-22.BT-106nullสำหรับ การละเมิดเชิงโครงสร้าง) - Use ตรวจสอบคอลเลกชันบนผลการตรวจสอบ ส่งหรือแสดงแต่ละ
รายการตาม
severity,ruleId, และตัวระบุตำแหน่ง