คอมโพเนนต์หลัก
- TPdf - คอมโพเนนต์หลักสำหรับจัดการเอกสาร PDF เพื่อเปิด นำทาง ดึงข้อความ และแก้ไขเอกสาร PDF
- TPdfView - คอมโพเนนต์เชิงภาพสำหรับแสดงผลและโต้ตอบกับหน้า PDF
- TPdfReadingSession - คอมโพเนนต์จัดการการอ่านออกเสียงสำหรับเอนจิน TTS ของโฮสต์และการติดตามคำของ TPdfView
- TPdfThumbnailView - แผงภาพย่อแบบเลื่อนสำหรับการนำทางหน้า
การทำงานกับเอกสาร
- การโหลดเอกสาร - โหลดไฟล์ PDF จากดิสก์ สตรีมหน่วยความจำ อาร์เรย์ไบต์ หรืออะแดปเตอร์ TStream ตามต้องการผ่าน
LoadCustomDocumentโดย PDFium จะอ่านบล็อกตามต้องการ จึงไม่จำเป็นต้องคัดลอกเอกสารขนาดหลาย GB หรือแหล่งข้อมูลระยะไกลที่ผูกกับฐานข้อมูลเข้า memory ล่วงหน้า- การป้องกันด้วยรหัสผ่าน - เปิดเอกสาร PDF ที่มีรหัสผ่าน และรายงาน
UserPermissionsที่มีผลจริงสำหรับเซสชันที่ผ่านการตรวจสอบสิทธิ์แล้ว- การสร้างเอกสาร - สร้างเอกสาร PDF ใหม่จากศูนย์ด้วย
CreateDocument,AddPage,AddText,AddImage,AddPicture,AddJpegImage, และCreatePath- การบันทึกเอกสาร - บันทึกเอกสารที่แก้ไขแล้วด้วยตัวเลือกต่าง ๆ เช่น incremental และ remove security พร้อมกำหนดเวอร์ชันเป้าหมายของ PDF ได้ตั้งแต่ PDF 1.0 ถึง PDF 1.7
- ผลลัพธ์ PDF/A-1b -
SaveAsPdfA/SaveAsPdfAToStreamจะ post-process การบันทึกพื้นฐานด้วย incremental update ที่แทรก XMP metadata stream, sRGB ICC OutputIntent, และ document catalog ที่ปรับปรุงแล้ว เพื่อให้ผลลัพธ์สอดคล้องกับ PDF/A-1b โดยรองรับ ICC profile แบบกำหนดเองผ่านTPdfASaveOptions.IccProfileData- การตรวจสอบ PDF/A -
ValidatePdfAและพร็อพเพอร์ตีแบบอ่านอย่างเดียวPdfAConformanceจะสแกนเอกสารที่เปิดอยู่เพื่อหาเครื่องหมาย XMPpdfaid, OutputIntent ที่ฝัง ICC, การมีอยู่ของการเข้ารหัส และรายงานระดับความสอดคล้อง (pac1a,pac1b,pac2b,pac3b,pacNone, หรือpacUnknown) พร้อมรายการTPdfAValidationIssueที่อธิบายแต่ละปัญหาที่พบ- ตัวตรวจสอบความสอดคล้องของเวอร์ชัน PDF - เมื่อ SaveAs ตั้งเป้าหมายเป็น PDF 1.0 ถึง PDF 1.7 ตัวเขียนจะปฏิเสธ entry ของ dictionary, filter, annotation subtype, action type, font, color space, หรือพารามิเตอร์การเข้ารหัสใด ๆ ที่ถูกเพิ่มเข้ามาหลังเวอร์ชันเป้าหมายที่เลือก เช่น JBIG2Decode, MarkInfo, OutputIntents, AES / AES-256, Polygon / Caret / Watermark / Redact annotations, และ JavaScript / Trans / SetState actions
- การบีบอัดสตรีม - การบีบอัด FlateDecode แบบอัตโนมัติช่วยให้ทุก PDF stream ถูกบีบอัดอย่างเหมาะสมเมื่อบันทึก โดยตั้ง
Compressed := Falseเพื่อปิดสำหรับ debug pipeline- การรวมเอกสาร - นำเข้าหน้าจากเอกสาร PDF อื่น
- การนำเข้าชุดย่อยของหน้า -
ImportPagesByIndexคัดลอกอาร์เรย์ดัชนีแบบ zero-based ที่ระบุชัดเจนจากเอกสารต้นทาง โดยใช้ InsertAt = 0 เพื่อแทรกก่อนหน้า 1 หรือ InsertAt = PageCount เพื่อ append และถ้าส่งอาร์เรย์ดัชนีว่างจะเป็นการนำเข้าทุกหน้าของต้นทาง- การจัดวางแบบ N-up -
ImportNPagesToOneส่งคืนTPdfใหม่เอี่ยม ซึ่งแต่ละหน้าคือ composite แบบ NumX×NumY ของหน้าจากเอกสารต้นทาง โดยขนาดอยู่ในหน่วยผู้ใช้ของ PDF (1 unit = 1/72 in)- การจัดเรียงหน้าใหม่ -
MovePagesจัดเรียงหน้าใหม่แบบ in place โดยใช้อาร์เรย์ดัชนีแบบ zero-based และระบุดัชนีปลายทางของหน้าที่ถูกย้ายหน้าแรก- การใช้ Form XObject ซ้ำ -
CreateXObjectFromPageสร้าง handleTPdfXObjectที่นำกลับมาใช้ซ้ำได้จากหน้าใดก็ได้ของเอกสารอื่น;InsertFormObjectFromXObjectแทรกสำเนา ONE ชุดของหน้าที่ห่อไว้ลงในหน้าปัจจุบัน เหมาะสำหรับ watermark, template overlay, และ workflow แบบ "stamp หนึ่งหน้าลงหลายหน้า" โดยสามารถจัดตำแหน่ง ย่อขยาย และหมุน page object ปลายทางผ่านFPDFPageObj_SetMatrixและ helper ของTPdfMatrix- การจัดการหน้า - เพิ่ม ลบ และจัดการหน้าแต่ละหน้า โดย
AddPage(0, ...)จะแทรกหน้าแรกและเปิดใช้งานทันที- กรอบหน้า - อ่านและเขียน MediaBox, CropBox, BleedBox, TrimBox และ ArtBox บนหน้าปัจจุบัน
- ภาษาใน Catalog - อ่านและเขียนภาษาของเอกสารที่เก็บอยู่ใน entry /Lang ของ catalog
- Trailer File IDs - อ่าน entry /ID ของ trailer ทั้งแบบถาวรและแบบเปลี่ยนค่าได้เป็นไบต์ดิบ
- การกระทำ JavaScript ระดับเอกสาร - แจกแจงชื่อและสคริปต์ของ action ใน JavaScript name tree ระดับเอกสาร
- Tagged PDF Structure Tree - ตรวจสอบองค์ประกอบโครงสร้างเชิงตรรกะ ข้อความเพื่อการเข้าถึง ภาษา ID ของ marked-content และลำดับชั้นสำหรับหน้า PDF ที่มีแท็ก
- การตั้งค่าของ viewer - อ่าน
PrintCopies,PrintPageRanges,PrintScaling, และPrintPaperHandlingจาก viewer-preference dictionary ของเอกสาร โดย PDF ที่บันทึกจะเปิดหน้าแรกด้วย Fit Height เป็นค่าเริ่มต้น
การทำงานกับข้อความ
- การดึงข้อความ - ดึงข้อความจากหน้า PDF ด้วยความแม่นยำระดับตัวอักษรผ่านพร็อพเพอร์ตี
Text,TextInRectangle,Character,CharacterRectangle, และCharacterOriginแบบ indexed- หน่วยการอ่านระดับประโยค -
TPdf.ReadingUnits,TPdf.DocumentReadingUnits,TPdfView.ReadingUnitsและBuildReadingUnitsเปิดเผย recordTPdfReadingUnitขนาดระดับประโยคสำหรับการอ่านออกเสียงด้วย TTS แบบซิงโครไนซ์- การเน้นการอ่านระดับคำ -
TPdf.PageWordBoxes,TPdfView.PageWordBoxes,BuildWordBoxes,WordBoxIndexAtCharIndex,TPdfView.SelectWordBox,TPdfView.SelectWordSpan,TPdfView.TrackReadingWordAt,TPdfView.SetReadingWord,TPdfView.ClearReadingWord,ReadingWordColor,ReadingWordFollowจะแมป offset ของตัวอักษรบนหน้าไปยัง TPdfWordBox ที่ครอบอยู่ ไฮไลต์คำนั้น และส่งคืนดัชนีคำ; ไฮไลต์ TPdfWordBox หนึ่งรายการเป็นคำที่กำลังอ่านอยู่บน TPdfView; ล้างเลเยอร์ตัวชี้การอ่านระดับคำปัจจุบันบน TPdfView; ควบคุมสีของเลเยอร์ที่ใช้กับตัวชี้การอ่านระดับคำปัจจุบัน; ควบคุมว่า TPdfView จะเลื่อนคำที่กำลังอ่านอยู่เข้าไปในมุมมองระหว่างติดตามการอ่านหรือไม่- การจัดการเซสชันอ่านออกเสียง -
TPdfReadingSession,TPdfSpokenText,SpokenTextAppend,BuildSpokenTextFromWords,SpokenToPageChar, และEstimateSpokenWordIndexประสานงานเอนจิน TTS ของโฮสต์ ช่วงข้อความที่อ่านออกเสียง callback ตำแหน่งคำ จังหวะที่ประเมินไว้ การหยุด/ทำต่อ และการอัปเดตตัวชี้คำของ TPdfView- การค้นหาข้อความ - ค้นหาข้อความด้วยตัวเลือกแบบแยกตัวพิมพ์เล็กใหญ่ แบบทั้งคำ และแบบต่อเนื่องโดยใช้
FindFirst,FindNext,FindPrevious- เลเยอร์ไฮไลต์การค้นหา -
TPdfView.HighlightSearchTextจะสแกนหน้าปัจจุบันในมุมมองและวาดเลเยอร์HighlightColorแบบ alpha-blended จริงทับทุก match ในทุกครั้งที่ redraw พร้อมส่งคืนจำนวน match ที่พบClearHighlightจะลบเลเยอร์นี้; การนำทางไปหน้าอื่นจะล้างโดยอัตโนมัติเพราะ match ผูกกับหน้าHighlightColorมีค่าเริ่มต้นเป็นclYellowและถูกประกาศให้แอปพลิเคชันปรับธีมได้- คุณสมบัติตัวอักษร - เข้าถึงขนาดฟอนต์ น้ำหนัก มุม และตำแหน่งของตัวอักษรแต่ละตัวด้วยพร็อพเพอร์ตี indexed
CharacterAngle,CharacterFontSize,CharacterFontWeight,CharacterGenerated,CharacterIsHyphen, และCharacterMapError- รองรับอักขระยุโรป -
AddTextจะโหลดและแคชฟอนต์ TrueType ของระบบที่ตรงกันโดยอัตโนมัติก่อนสร้าง text object ดังนั้นอักขระมีวรรณยุกต์ในภาษาเช็ก ฝรั่งเศส เยอรมัน สเปน โปรตุเกส โปแลนด์ และตุรกี ซึ่งฟอนต์มาตรฐานที่มากับ PDFium แสดงไม่ได้ จึงแสดงผลได้ถูกต้องโดยไม่ต้องเปลี่ยนโค้ด- การเพิ่มข้อความ - เพิ่มข้อความใหม่ลงในหน้า PDF ด้วยฟอนต์ สี ความโปร่งใส และการหมุนที่กำหนดเอง
- การกำหนดตำแหน่ง text object - ตั้งค่าตำแหน่งของแต่ละตัวอักษรสำหรับ text object ที่มีอยู่ผ่าน
SetTextPositionsและTPdfSingleArray- ข้อมูลฟอนต์ - ดึงคุณสมบัติฟอนต์รวมถึงชื่อ family สถานะการฝัง มุมตัวเอียง ascent / descent และข้อมูลฟอนต์ดิบในระดับ page object
การรองรับ annotation
- ชนิดของ annotation - รองรับ annotation แบบข้อความ ลิงก์ ไฮไลต์ ขีดเส้นใต้ ขีดฆ่า และชนิดอื่น ๆ อีกมากมาย
- การสร้าง annotation - สร้าง annotation ใหม่ด้วยโปรแกรม
- การแก้ไข annotation - ปรับคุณสมบัติของ annotation ที่มีอยู่ เช่น สี ความโปร่งใส และเนื้อหา
- annotation ลิงก์ - จัดการลิงก์ภายในและภายนอกพร้อมรองรับ action
การรองรับฟอร์ม
- ตัวเข้าถึงการกรอกฟอร์มด้วยเสียง -
FocusedFormFieldValue,FocusedFormFieldNameและFocusedFormFieldDetailsบน TPdf และ TPdfView เปิดเผยค่าฟอร์มเชิงตรรกะ ชื่อ และTPdfFormFieldInfoปัจจุบันสำหรับการกรอกฟอร์มด้วยคีย์บอร์ดหรือเสียง- ชนิดของฟอร์ม - รองรับฟอร์ม AcroForm และ XFA
- การกรอกฟอร์ม - กรอกฟอร์มแบบโต้ตอบพร้อมรองรับ JavaScript
- การเลือกใช้ V8 DLL - ตั้ง
EnableV8Engineก่อนโหลดเพื่อใช้pdfium.v8.dllจากโฟลเดอร์DLLs\Win32หรือDLLs\Win64ที่ตรงกัน และสอบถามความพร้อมของ helper สำหรับ V8/XFA ผ่านV8FeaturesAvailable,XfaBStrHelpersAvailable, และGetRecommendedV8Flags- การเข้าถึงฟิลด์ - อ่านและเขียนค่าฟิลด์ฟอร์มได้ตามดัชนีหรือตำแหน่ง
- ข้อมูลฟิลด์ - เข้าถึงชนิดฟิลด์ ธง ชื่อ และพร็อพเพอร์ตีอื่น ๆ
- ธงของฟิลด์ - อัปเดตธงของฟิลด์ AcroForm ตามดัชนีหรือตำแหน่งผ่าน
SetFormFieldFlags/SetFormFieldFlagsAtรวมถึงธง read-only, required, password, และ multi-select- การทำให้ฟอร์มแบนราบ -
GenerateFormAppearancesจะสร้าง /AP appearance stream ใหม่ให้กับฟอร์ม widget ทุกตัวในทุกหน้า และFlattenPage/FlattenAllPagesจะฝัง annotation และฟิลด์ฟอร์มลงในเนื้อหาหน้าที่เป็น static ซึ่งแก้ไขไม่ได้- การเลือกข้อความในฟอร์มและ Undo / Redo - บน widget ของ AcroForm ที่กำลังโฟกัสอยู่ มุมมองจะเปิดเผย
GetSelectedFormText(ข้อความที่เลือกอยู่),SelectAllFormText(เลือกทุกตัวอักษร), และFormUndo/FormRedo/FormCanUndo/FormCanRedo(ขับเคลื่อนประวัติการแก้ไขต่อ widget ของ PDFium) ทั้งหกเมธอดจะ short-circuit อย่างปลอดภัยเมื่อมุมมองไม่ active หรือไม่มี widget ที่ถูกโฟกัส
การทำงานกับรูปภาพ
- การดึงรูปภาพ - ดึง bitmap จากหน้า PDF ด้วยพร็อพเพอร์ตี
Bitmapแบบ indexed; วนBitmapCountเพื่อบันทึกรูปภาพทุกภาพลงดิสก์- การแทรก JPEG -
AddJpegImageรับ TStream ของไบต์ JPEG ดิบ และฝังรูปภาพเป็น /DCTDecode XObject โดยไม่ต้องเข้ารหัสใหม่- รองรับ Picture -
AddPictureรับอ็อบเจ็กต์TPictureพร้อมการแปลงฟอร์แมตอัตโนมัติผ่านคลาสกราฟิกที่ลงทะเบียนไว้ของ VCL/LCL- การแทรกรูปภาพโดยตรง -
AddImage(FileName)รู้จักฟอร์แมตใดก็ตามที่ลงทะเบียนไว้กับกราฟิกยูนิตของ VCL หรือ LCL เช่น BMP, PNG ผ่าน PngImage, JPG, ... และใช้ pipeline เดียวกับ AddPicture ส่วนAddImage(TBitmap)จะข้าม TPicture ตรงกลาง ทำให้โค้ดที่ถือ TBitmap จากงานเรนเดอร์หรืองานสร้างแบบชุดทำได้ง่ายขึ้น- โปรไฟล์ ICC ของรูปภาพ - image page object จะแสดงข้อมูล ICC profile ที่ฝังอยู่เมื่อมีอยู่จริง (binding สำหรับ
FPDFImageObj_GetIccProfileDataDecoded)- การสร้างภาพย่อ - สร้าง bitmap ภาพย่อของหน้าปัจจุบันผ่านพร็อพเพอร์ตี
Thumbnailหรือเรนเดอร์หน้าใดก็ได้ที่นับแบบ one-based ผ่านTPdf.RenderPageThumbnailโดยไม่เปลี่ยนPageNumber
ยูนิตช่วยเหลือ
- โครงสร้างพื้นฐานแบบอะซิงก์ -
FPdfAsyncเปิดเผยIPdfCancellationToken/IPdfCancellationTokenSourceสำหรับ semantics การยกเลิกจาก UI แบบร่วมมือกัน, singletonPdfNoCancellationTokenที่นำกลับมาใช้ได้, และ helperTPdfFuture<T>แบบเบาที่รัน worker บนเธรดเบื้องหลังและส่ง envelopeTPdfFutureResult<T>กลับไปยัง main thread โดยแยกกรณีสำเร็จ ยกเลิก และล้มเหลว- อะแดปเตอร์สตรีม -
TPdfStreamAdapterเชื่อมTStreamของ Pascal เข้ากับ callbackFPDF_FILEACCESSของ PDFium เพื่อให้LoadCustomDocumentอ่านบล็อกตามต้องการแทนการบัฟเฟอร์ PDF ทั้งไฟล์ไว้ใน memory- การประกอบเมทริกซ์ -
FPdfMatrixห่อFS_MATRIXของ PDFium ด้วย OO API สำหรับTranslate,Scale,Rotate,HorizontalFlip,VerticalFlip,CentralFlip,Skew, และMultiplyโดยMultiplyจะ snapshot องค์ประกอบเมทริกซ์ทั้งหกก่อนคำนวณค่าของแถวใหม่ เพื่อหลีกเลี่ยงกับดักของการทำงานแบบ Pascal ทางเลือกที่ค่าเดิมถูกเขียนทับระหว่างการเรียกครั้งเดียวกันจนได้การประกอบผิดพลาด- การเรนเดอร์แบบ progressive ที่ยกเลิกได้ -
TPdf.RenderPageProgressiveขับเคลื่อนลูปFPDF_RenderPageBitmap_Start+RenderPage_Continueของ PDFium และ polling callbackIFSDK_PAUSEระหว่างรอบผ่านIPdfCancellationTokenทำให้การเรนเดอร์ DPI สูงที่กินเวลานานถูกยกเลิกกลางคันได้โดยไม่บล็อกผู้เรียกจนกว่าจะเสร็จ ส่งคืนTPdfProgressiveStatusคือprsDone,prsCancelled, หรือprsFailed- เส้นทางเรนเดอร์แบบไม่ต้องคัดลอก -
RenderPage/RenderTile/RenderPageProgressiveเขียนผลลัพธ์ของ PDFium ลงใน DIB buffer ของTBitmapปลายทางโดยตรงแทน buffer ชั่วคราวภายใน ช่วยประหยัดการคัดลอกหน่วยความจำขนาด width × height × 4 ไบต์ต่อการเรนเดอร์หนึ่งครั้ง ซึ่งเห็นชัดที่สุดในงาน DPI สูง เช่น แผงภาพย่อ การส่งออกคุณภาพพิมพ์ และการส่งออกแบบชุด ยังคงมีเส้นทางสำรองแบบ per-scanline เมื่อ DIB ปลายทางห่ออย่างปลอดภัยไม่ได้- การแปลง bitmap สำหรับผู้มีข้อจำกัดด้านการมองเห็น -
InvertPdfBitmap,GrayscalePdfBitmap, และDuotonePdfBitmapแปลงพิกเซล 32-bit ของ TBitmap ที่เรนเดอร์แล้วแบบ in place สำหรับมุมมองแบบกลับสี เทา หรือสองสี- การดูแบบผู้มีข้อจำกัดด้านการมองเห็นแบบสด -
TPdfView.OptionsรองรับreInvertและreNightDuotoneโดยNightDuotoneInkและNightDuotonePaperควบคุมพาเลตต์กลางคืนแบบสดก่อนที่ overlay จะถูกวาด
การวาด
- การวาดเส้นทาง - สร้าง path ด้วยเส้นตรง เส้นโค้ง Bezier และรูปทรงปิด
- การลบอ็อบเจ็กต์ - ลบ page object และสร้างเนื้อหาหน้าใหม่จาก TPdf หรือ TPdfView
- การเติมและการขีดเส้น - กำหนดโหมดเติม สี ความโปร่งใส และคุณสมบัติของ stroke
- โหมดผสมผสาน - รองรับ blend mode ต่าง ๆ ของ PDF
- รูปแบบเส้น - กำหนด line cap, line join, และความกว้างของ stroke
ลายเซ็นดิจิทัล
- การตรวจจับลายเซ็น - ตรวจจับและแจกแจงลายเซ็นดิจิทัลในเอกสาร PDF
- ข้อมูลลายเซ็น - เข้าถึง contents ของลายเซ็น ช่วงไบต์ sub-filter เหตุผล และเวลา
- MDP Permissions - สอบถามสิทธิ์สำหรับการตรวจจับและป้องกันการแก้ไขเอกสาร
การรองรับไฟล์แนบ
- การเข้าถึงไฟล์แนบ - อ่าน สร้าง แก้ไข และลบ embedded file attachments
- ชื่อไฟล์แนบ - เข้าถึงชื่อไฟล์ของไฟล์แนบ
- ชนิดของไฟล์แนบ - อ่านค่า MIME subtype ของ embedded file เมื่อมีอยู่
- บุ๊กมาร์ก - นำทาง bookmark ของเอกสารพร้อมการรองรับแบบลำดับชั้นผ่านอาร์เรย์
Bookmarks,BookmarkChildren,HasBookmarkChildren, และ helper การไล่ลำดับBookmarkFrom- ปลายทางที่มีชื่อ - เข้าถึง named destination ตามดัชนีหรือชื่อผ่าน
Destination,DestinationByName, และDestinationCount- ป้ายกำกับหน้า - ดึงป้ายกำกับหน้าของแต่ละหน้าผ่าน
PageLabelมีประโยชน์เมื่อเอกสารใช้เลขโรมันสำหรับส่วนต้นเล่ม- Web Links - ตรวจจับและนำทางลิงก์เว็บบนหน้าด้วย
WebLink,WebLinkCount, และTPdfView.WebLinkAtPos- annotation ลิงก์ - เข้าถึง link annotation พร้อมข้อมูล action และ destination ผ่าน
LinkAnnotation,LinkAnnotationCount, และTPdfView.LinkAnnotationAtPos- การจัดการการคลิกลิงก์อย่างปลอดภัย - TPdfView จะส่ง event
OnAnnotationLinkClick/OnWebLinkClickก่อนจัดการ goto / URI แบบอัตโนมัติ โดยปิด launch actions ไว้เป็นค่าเริ่มต้น การตรวจจับการคลิกลิงก์จะทำงานเฉพาะเมื่อ gesture เป็นการคลิกไม่ใช่การลาก และใช้ MouseDown anchor ใหม่เพื่อให้ gesture แบบแพนยังคงไหลผ่านเส้นทางเลื่อนเดิมโดยไม่เปลี่ยนแปลง
การเรนเดอร์
- การเรนเดอร์คุณภาพสูง - เรนเดอร์หน้าไปยัง device context, bitmap, หรือ tile ผ่าน
RenderPage/RenderTileพร้อมการเขียนตรงแบบไม่ต้องคัดลอกลงใน destination DIB buffer- การเรนเดอร์แบบ progressive ที่ยกเลิกได้ -
RenderPageProgressiveขับลูปแบบ progressive ของ PDFium และ pollingIPdfCancellationTokenระหว่างรอบ โดยส่งคืนprsDone,prsCancelled, หรือprsFailedเมื่อยกเลิก bitmap จะเก็บงานบางส่วนที่ทำไปแล้ว- ตัวเลือกการเรนเดอร์ - การปรับแต่งข้อความ LCD (
reLcd), annotation (reAnnotations), grayscale, และธงโหมดการพิมพ์- จุดเชื่อม Skia - มี binding ระดับต่ำของ
FPDF_RenderPageSkiaและFPDF_FFLDrawSkiaเมื่อผู้เรียกส่ง SkCanvas ภายนอกมาให้ โดยขึ้นกับ export ของ DLL ที่มาพร้อมกัน- การเลือกโหมดพิมพ์ - ตั้งโหมดพิมพ์ของ PDFium แบบ EMF, text-only, PostScript, pass-through, image-mask, และ Type 42 ผ่านฟังก์ชัน
SetPdfPrintModeร่วมกับTPdfPrintMode- เลเยอร์ซ้อนทับแบบอะซิงก์ - TPdfView สามารถแสดง loading overlay แบบเลือกเปิดได้ ขณะที่ worker ที่แอปเป็นเจ้าของเรนเดอร์ด้วยอินสแตนซ์ TPdf แยกต่างหาก
- การหมุนหน้า - รองรับการหมุน 0, 90, 180, และ 270 องศา (
ro0,ro90,ro180,ro270)- การตรวจจับความโปร่งใส - พร็อพเพอร์ตี
Transparentรายงานว่าอ็อบเจ็กต์ใด ๆ บนหน้าปัจจุบันมีความโปร่งใสหรือไม่ รวมถึง blend mode และ alpha บางส่วน
การดูเอกสาร (TPdfView)
- โหมดการแสดงผล -
dmSingleContinuous,dmTwoPageContinuous, และdmTwoPageContinuousWithCover(หน้า cover จะแยกเดี่ยวแล้วจึงต่อด้วย spread แบบสองหน้า) helper ระดับยูนิตComputeSpreadPagesเปิดเผยคณิตศาสตร์ของ spread-page โดยไม่ต้องสร้าง viewer- โหมด Fit -
FitModeเลือกว่าหน้าจะวางอย่างไรใน viewport:pfmNone(ซูมเอง),pfmActualSize(100%),pfmFitPage(ทั้งหน้าพอดีกับ viewport), และpfmFitWidth(ความกว้างหน้าพอดีกับความกว้าง viewport) โหมด Fit ที่ใช้อยู่จะถูกนำกลับมาใช้โดยอัตโนมัติเมื่อ Resize และเมื่อหน้าปัจจุบันเปลี่ยนไป; การตั้งค่า Zoom โดยตรงจะยกเลิกโหมด Fit ที่ใช้อยู่ทันที (FitMode กลับเป็นpfmNone) ตามธรรมเนียมของ PDF viewer มาตรฐาน- การควบคุมการซูม - ซูมแบบปรับได้ด้วย helper รายหน้าของ
PageZoom,PageWidthZoom,PageHeightZoom, และActualSizeZoom- สีของหน้า -
PageColorแยกพื้นหลังของหน้า PDF ที่เรนเดอร์แล้วออกจากColorของ control ที่อยู่รอบ ๆ ค่าเริ่มต้นคือclWhiteดังนั้นหน้า PDF จะเรนเดอร์เป็นขาวเหมือนกระดาษไม่ว่าธีมของแอปจะเป็นแบบใด ผู้ใช้โหมดมืดสามารถคงพื้นที่เลื่อนให้มืดไว้ได้ในขณะที่ปล่อยให้หน้า PDF จริงเป็นสีขาวหรือสีใดก็ตามที่แอปเลือก- การเลือกข้อความแบบโต้ตอบ - ผู้ใช้ปลายทางสามารถลากเลือกข้อความบนหน้า PDF ได้ โดย hit-test จะสลับระหว่าง selection และ pan อัตโนมัติ: คลิกที่ตัวอักษรจะเริ่มลากเลือก คลิกที่พื้นที่ว่างจะ pan ดับเบิลคลิกเลือกคำ ทริปเปิลคลิกเลือกบรรทัด
Ctrl+Aเลือกหน้า ทั้งสองหน้าในโหมด spread,Ctrl+Cคัดลอกเป็นCF_UNICODETEXT,Shift+arrowsขยายการเลือก, เลื่อนเมาส์ผ่านข้อความจะเปลี่ยนเคอร์เซอร์เป็นcrIBeam, และลากไปยังขอบ viewer จะเลื่อนหน้าอัตโนมัติ มีSelectionColorและOnSelectionChangeที่ประกาศใหม่; และ public ใหม่HasSelection,SelectedText,SelectionCharCount,ClearSelection,SelectAll,CopySelectionToClipboardโหมดแสดงผลแบบ spread จะเลือกข้ามทั้งสองหน้าที่มองเห็นพร้อมเชื่อมด้วย CR/LF เมื่อ host ยังไม่ได้กำหนดPopupMenuของตนเอง จะมีป๊อปอัป Copy แบบค่าเริ่มต้นแนบให้อัตโนมัติ ควบคุมด้วย flagAllowUserTextSelectionของ v1.17.0 สำหรับโฮสต์แบบ kiosk- การแมปพิกัด - แปลงระหว่างพิกัดอุปกรณ์ของ viewer กับพิกัดหน้าของ PDF ด้วย
DeviceToPage/PageToDeviceรวมถึง overload ที่รับTRectและส่งคืนTPdfRectangle- การเลือกข้อความและ hit testing - ระบุตัวอักษรใต้จุดที่ผู้ใช้ชี้ใน viewer ด้วย
CharacterIndexAtPosและวาดไฮไลต์การเลือกข้อความผ่านPaintSelection- เมาส์และคีย์บอร์ด - รองรับอุปกรณ์รับเข้าครบถ้วน ทั้งการลากเมาส์เพื่อเลื่อน, ปุ่มลัด PgUp / PgDn / Ctrl+Home / Ctrl+End และการนำทางหน้าด้วยล้อเมาส์ขึ้น/ลง Ctrl+wheel ถูกกันไว้สำหรับการซูมของแอปและจะถูกข้ามโดยตัวจัดการนำทาง
- การล็อกอินพุตของผู้ใช้ -
AllowUserPageChangeควบคุมปุ่มลัดเปลี่ยนหน้าของคีย์บอร์ด,ChangePageOnMouseScrollingควบคุมการกระโดดหน้าด้วยล้อเมาส์, และAllowUserTextSelectionควบคุมอินพุตการเลือกข้อความด้วยเมาส์ / คีย์บอร์ด ทั้งสามค่ามีค่าเริ่มต้นเป็น True; ปรับเป็น False เพื่อปิดการใช้งานใน kiosk, แผงพรีวิว, หรือ embedding แบบอ่านอย่างเดียวโดยไม่ต้องสืบทอดคลาส- เลเยอร์ซ้อนทับการเรนเดอร์แบบอะซิงก์ -
AsyncRendering,LoadingText, และLoadingColorวาดตัวบ่งชี้ "Loading..." ขนาดเล็กทับหน้าที่เรนเดอร์แล้ว เพื่อให้แอปที่ใช้ worker ของตนเองสำหรับงานเรนเดอร์ยาว ๆ มีสิ่งบ่งชี้ทางภาพที่สอดคล้องกัน ค่าเริ่มต้นยังคงพฤติกรรมเดิมTPdfตอนนี้เรียงลำดับการเรียก render และ page-unload ต่อหนึ่ง instance; แอปยังคงเป็นเจ้าของการ dispatch worker และต้องหลีกเลี่ยงการแก้ไขเอกสารขณะ render กำลังทำงาน- การจัดการการคลิกลิงก์อย่างปลอดภัย -
LinkOptionsเป็น set ที่ประกาศไว้ซึ่งควบคุมพฤติกรรมอัตโนมัติของ PDF link action ทั้งสี่ชนิด:loAutoGoto(กระโดดหน้า),loAutoOpenURI(ShellExecute),loAutoLaunch(ShellExecute), และloAutoEmbeddedGoto(สำรอง) ค่าเริ่มต้นเปิดใช้เฉพาะloAutoGotoและloAutoOpenURI;loAutoLaunchและloAutoEmbeddedGotoถูกปิดไว้เพื่อไม่ให้การคลิกพลาดเพียงครั้งเดียวสั่งรันโปรแกรมใด ๆ ได้OnAnnotationLinkClickและOnWebLinkClickจะเกิดก่อนการกระทำอัตโนมัติใด ๆ และเปิดให้แอปทำเครื่องหมาย event ว่า Handled หรือเปลี่ยนเส้นทางได้- การโต้ตอบกับฟอร์ม - การแก้ไขฟอร์มแบบโต้ตอบภายใน viewer พร้อม helper สำหรับการเลือก / Undo / Redo ของ v1.23.0
- รูปแบบภาพ -
PageShadowSize,PageShadowColor, และPageBorderColorวาดเงาแบบ drop shadow ได้ใต้กรอบหน้าและเส้นขอบหนึ่งพิกเซลรอบหน้า;SmoothScrollตอนนี้ทำแอนิเมชันคำสั่ง scrollbar ของบรรทัด/หน้าเป็นช่วง ๆ ที่ขับด้วย timer ขณะที่การลาก thumb ยังตอบสนองทันที- การนำทางด้วยภาพย่อ -
TPdfThumbnailView(ยูนิตFPdfThumbnail) แสดงภาพย่อของทีละหน้าในแผงด้านข้างแบบเลื่อน พร้อมไฮไลต์เมื่อชี้และเมื่อเลือก รวมถึงการคลิกเพื่อไปยังหน้า ออกแบบมาให้อยู่ข้าง TPdfView มีพร็อพเพอร์ตีCurrentPageIndex,ThumbnailWidth,ThumbnailHeight,TextColor,HoverColor,SelectionColor,BorderColor; eventOnPageClick
การบีบอัด
- การบีบอัดอัตโนมัติ - เมื่อพร็อพเพอร์ตี
Compressedเป็น True (ค่าเริ่มต้น) ระบบจะทำให้ PDF stream ทั้งหมดถูกบีบอัดด้วย FlateDecode ตอนบันทึก- การ post-process - เอนจินการบีบอัดจะสแกนข้อมูล PDF ที่บันทึกแล้วและบีบอัด stream ที่ยังไม่ถูกบีบอัดด้วยการบีบอัดระดับสูงสุดของ zlib
- การสร้างตาราง cross-reference ใหม่ - สร้าง xref table ใหม่โดยอัตโนมัติเมื่อการบีบอัด stream เปลี่ยน byte offset
- ไม่มี overhead - ถ้า stream ทั้งหมดถูกบีบอัดอยู่แล้ว ข้อมูลจะผ่านไปโดยไม่ถูกแก้ไข
ความปลอดภัย
- การรองรับรหัสผ่าน - เปิดเอกสาร PDF ที่ป้องกันด้วยรหัสผ่าน
- สิทธิ์ - อ่านสิทธิ์ของเอกสารและผู้ใช้; demo
SecurityAuditรวมสิทธิ์ ไฟล์แนบ Document JavaScript ลิงก์ URI / Launch ลายเซ็น XFA และความพร้อมของ V8 เข้าเป็น risk surface แบบอ่านอย่างเดียว พร้อมการบันทึกรายงาน TXT / JSON และการคัดลอก TXT- การลบการป้องกัน - บันทึกเอกสารโดยลบการป้องกันออก เมื่อมีสิทธิ์แล้ว
การพิมพ์
- โหมดการพิมพ์ - เลือกระหว่างโหมดพิมพ์ EMF, text-only, PostScript Level 2 / 3, PostScript pass-through, EMF image-mask, และ Type 42 ผ่านฟังก์ชันสากล
SetPdfPrintMode- การตั้งค่าของ viewer - สะท้อนเจตนาของผู้เขียนเอกสารผ่าน
PrintCopies,PrintPageRanges(ช่วงหน้าที่นับแบบ one-based),PrintScaling, และPrintPaperHandling;SetPdfPrintPaperHandlingDevModeจะแมปคำใบ้แบบ duplex ไปยัง WindowsDEVMODE.dmDuplex- การพิมพ์ N-up - demo
PrintPreferencesของ Delphi, C++Builder, และ Lazarus แสดงการจัดวางแผ่นแบบ N-up (1 / 2 / 4 / 9 หน้าต่อแผ่น) พร้อมการกรองหน้าคี่/คู่ การเรนเดอร์ระดับ grayscale เส้นขอบเซลล์ 1 พิกเซลแบบเลือกได้ การตั้งค่าการพิมพ์ของผู้เขียน PDF และการแมปเจตนา duplex ผ่านSetPdfPrintPaperHandlingDevMode
เดโมที่จัดส่งมาด้วย
โครงสร้าง
Demo\Delphi,Demo\CBuilder, และDemo\Lazarusมี sample project ที่รันได้ซึ่งทดสอบพื้นที่ API จริงครอบคลุมทั้งสามตระกูล IDE จุดเด่นได้แก่
- PDFViewer / MultiPageViewer / SplitView - การใช้งาน TPdfView แบบ end-to-end: โหลด นำทาง ซูม หมุน แสดงแบบสองหน้าต่อเนื่อง เค้าโครงที่คำนึงถึงหน้า cover และการเปรียบเทียบ PDF แบบวางเคียงกันของ Delphi / C++Builder / Lazarus พร้อมคำสั่งที่ซิงโครไนซ์ เดโม viewer ยังเป็นการทดสอบความเร็วแบบใช้งานจริงสำหรับ PDF ขนาดหลาย GB โดยเอกสารขนาด 2.x GB สามารถแสดงมุมมองแรกที่ใช้งานได้เกือบจะทันทีในขณะที่การเรนเดอร์หน้ายังคงตอบสนองได้ดี
- ViewerInteractionLab - ตัวอย่างการโต้ตอบกับ TPdfView ที่เน้น Delphi, C++Builder, และ Lazarus สำหรับโหมดแสดงผล โหมด fit สีหน้า การหมุน การไฮไลต์การค้นหา การเลือกข้อความ การแสดงตัวอย่างข้อความที่เลือก การทำงานกับคลิปบอร์ด และ feedback พิกัด DeviceToPage
- SearchAndSelect - ตัวอย่าง workflow ที่เน้น Delphi, Lazarus, และ C++Builder สำหรับการแสดงรายการผลการค้นหาทั้งหน้า การนำทางผลก่อนหน้า / ถัดไป การกระโดดไปผลลัพธ์ด้วยดับเบิลคลิก
HighlightSearchTextการค้นหาแบบ match-case / whole-wordAllowUserTextSelectionSelectedTextSelectAllCopySelectionToClipboardClearSelectionและโหมดแสดงผลแบบ spread- PreflightReport - เดโม workflow ของ Delphi, Lazarus, และ C++Builder พร้อมโปรแกรมคอนโซลคู่หูของ Delphi รอบ
FPdfPreflightReportที่นำผลการตรวจสอบ PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, และ PDF/VT มารวมเป็นแถวสรุปสถานะ ลำดับความสำคัญ หมวดปัญหา จำนวนต่อหมวด สรุปขั้นตอนถัดไป คำแนะนำปัญหา พรีวิวข้อความ / Markdown / JSON / CSV รายงาน TXT / HTML / Markdown / JSON / CSV การสร้างรายงานแบบสคริปต์ได้ การประมวลผลรายการและไดเรกทอรีแบบชุดพร้อม routing ไปยัง report directory สรุปภาพรวม TXT / JSON / HTML รายการแถว CSV การฝังไฟล์แนบรายงานได้ตามต้องการ และ exit code สำหรับการบังคับใช้ CI- ContentExtractionLab - workflow การสำรวจเนื้อหาแบบรวมของ Delphi, Lazarus, และ C++Builder สำหรับ metadata เอกสาร ข้อความหน้า page object รูปภาพ ไฟล์แนบ ลิงก์ annotation bookmark และเมตริกฟอนต์ / ตัวอักษร พร้อมส่งออก TXT / JSON การเลือกหมวดแบบ all / none การบันทึก source PDF และการคัดลอกรายงาน
- WatermarkStamp - workflow Form XObject ที่นำกลับมาใช้ซ้ำได้ของ Delphi, Lazarus, และ C++Builder สำหรับ watermark กลางหน้า stamp มุม และป้ายเลขหน้าบน PDF เป้าหมายหลายหน้า
- CreatePDF - สร้าง PDF หลายหน้าจากศูนย์ด้วยข้อความ รูปภาพ path ตาราง และการประกอบ watermark; รวมถึงตัวเลือก 'European Text' ในการเขียนข้อความภาษาเช็ก / ฝรั่งเศส / เยอรมัน / สเปน / โปรตุเกส / โปแลนด์ / ตุรกีที่มีวรรณยุกต์ เพื่อตรวจสอบการเลือกฟอนต์และการจัดการ Unicode
- ExtractText / ExtractImages / ContentExtractionLab - บันทึกข้อความที่ดึงออกมา (รวมถึงผลลัพธ์ที่แยกรายหน้า) หรือรูปภาพที่ฝังอยู่ลงดิสก์; หรือสร้างรายงานการสำรวจเนื้อหาแบบหลายหมวดหมู่ในรวดเดียว
- FormFill - อ่าน metadata ของฟิลด์ AcroForm เขียนค่า สร้าง /AP appearance ใหม่ และบันทึกทั้งผลลัพธ์ที่แก้ไขต่อได้หรือผลลัพธ์ที่ทำให้แบนราบแล้ว
- FontProperties - ตรวจสอบ metadata ของตัวอักษร / ฟอนต์แบบ indexed ผ่านทั้ง TPdf และ TPdfView ใน Delphi, C++Builder, และ Lazarus
- MergePDF / SplitPDF - รวม PDF ต้นทางหลายไฟล์ (พร้อมการเลือกช่วงหน้าต่อไฟล์ เส้นทางผลลัพธ์แบบระบุได้ บันทึกการทำงาน ปุ่มยกเลิก และสรุปการรวมเมื่อเสร็จสิ้น) หรือแยก PDF หนึ่งไฟล์ออกเป็นไฟล์ผลลัพธ์รายหน้า
- PDFtoJpg / BatchExport - การแปลง PDF เป็น JPG แบบครั้งเดียวหรือแบบชุดหลายไฟล์ของ Delphi, C++Builder, และ Lazarus พร้อมความคืบหน้ารวมต่อไฟล์ ความคืบหน้าปัจจุบันต่อหน้า DPI / คุณภาพ / อินพุตรหัสผ่าน และชุดงานที่ยกเลิกได้แบบร่วมมือกันโดยอาศัย
IPdfCancellationToken- StandardsLab - ตัวอย่าง workflow ของ Delphi, C++Builder, และ Lazarus สำหรับการตรวจสอบ PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, และ PDF/VT การรายงานปัญหา และผลลัพธ์การบันทึกที่มุ่งเน้นมาตรฐาน
- PrintPDF / PrintPreferences - การพิมพ์ PDF มาตรฐานของ Delphi, C++Builder, และ Lazarus พร้อมพรีวิว ช่วงหน้า จำนวนสำเนา collate ความคืบหน้า และการยกเลิก (PrintPDF) รวมถึงการจัดวางแผ่นแบบ N-up ของ Delphi, C++Builder, และ Lazarus พร้อมการกรองหน้าคี่/คู่และการตั้งค่าการพิมพ์ของผู้เขียน PDF (PrintPreferences)
- SecurityAudit - ตัวอย่าง risk surface แบบอ่านอย่างเดียวของ Delphi, C++Builder, และ Lazarus สำหรับสิทธิ์ ไฟล์แนบ action ของ JavaScript ลิงก์ URI / Launch web link ลายเซ็น สถานะ XFA ความพร้อมของ helper V8 / XFA และรายงานการตรวจสอบ TXT / JSON
- Attachment - สร้าง PDF เพิ่ม / แสดงรายการ / ดึงออก / ลบ / บันทึกไฟล์แนบที่ฝังอยู่ พร้อมการแสดง MIME subtype
- ImageToPDF - การแปลงรูปภาพแบบชุดของ Delphi, C++Builder, และ Lazarus ให้เป็น PDF เดียว โดยหนึ่งรูปต่อหนึ่งหน้า พร้อมพรีวิวและความคืบหน้าต่อรูป
ชุด regression ของ Delphi, C++Builder, และ Lazarus ครอบคลุม 147 กรณี (Pas) / 123 กรณี (C++) โดยใช้ fixture PDF ชุดเดียวกัน เพื่อให้พฤติกรรมตรงกันระดับ byte ระหว่างทั้งสามตระกูล IDE
การรองรับแพลตฟอร์ม
- Delphi - ตั้งแต่ Delphi XE5 (RAD Studio XE5) จนถึง Delphi 13.1 Florence (RAD Studio 13.1)
- C++Builder - ตั้งแต่ C++Builder XE5 (RAD Studio XE5) จนถึง C++Builder 13.1 Florence
- Lazarus - รองรับ Free Pascal / Lazarus
- Win32 / Win64 - รองรับทั้งแพลตฟอร์ม Windows แบบ 32 บิตและ 64 บิต