procedure LoadDocument;
procedure LoadDocument(Data: Pointer; Size: Integer; Buffered: Boolean = True);
| Data | Pointer. 메모리에 있는 원본 PDF 데이터를 가리키는 포인터입니다 |
| Size | Integer. 데이터 버퍼의 바이트 크기입니다 |
| Buffered | Boolean. True(기본값)이면 PDFium이 데이터를 즉시 복사합니다. False이면 문서가 unload될 때까지 버퍼가 유효해야 합니다 |
procedure LoadDocument(const Data: TBytes; Buffered: Boolean = True);
| Data | TBytes. 바이트 배열 형태의 PDF 파일 내용입니다 |
| Buffered | Boolean. True(기본값)이면 PDFium이 데이터를 즉시 복사합니다. False이면 문서가 unload될 때까지 버퍼가 유효해야 합니다 |
procedure LoadDocument(const Data: TBytes; Index, Count: Integer; Buffered: Boolean = True);
| Data | TBytes. PDF window를 포함하는 기반 byte 배열입니다. |
| Index | Integer. 첫 번째 PDF byte의 0 기반 오프셋입니다. |
| Count | Integer. 로드할 PDF byte 수입니다. |
| Buffered | Boolean. True(기본값)이면 TPdf가 선택된 window만 복사합니다. False이면 문서가 unload될 때까지 기반 byte 배열이 유효하고 변경되지 않은 상태로 유지되어야 합니다. |
procedure LoadDocument(Data: TMemoryStream; Buffered: Boolean = True);
| Data | TMemoryStream. PDF 데이터를 담고 있는 TMemoryStream입니다 |
| Buffered | Boolean. True(기본값)이면 PDFium이 데이터를 즉시 복사합니다. False이면 문서가 unload될 때까지 버퍼가 유효해야 합니다 |
procedure LoadDocument(const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
procedure LoadDocument(Data: Pointer; Size: NativeUInt; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
procedure LoadDocument(const Data: TBytes; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
procedure LoadDocument(const Data: TBytes; Index, Count: Integer; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
function SaveAsRepaired(Stream: TStream; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsRepaired(const FileName: string; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;
레거시 overload는 compatible 모드를 사용하며 기존 동작을 유지하면서, native xref 유효성과 복구 상태를 LastLoadReport를 통해 공개합니다. 인수 없는 overload는 FileName에 저장된 경로에서 읽습니다. Pointer, TBytes,
TMemoryStream overload는 파일 시스템을 거치지 않고 메모리 내 데이터에서 직접 로드합니다. byte-range overload는 임시 TBytes slice를 만들지 않고 더 큰 container, protocol frame 또는 재사용 가능한 수신 버퍼에서 내장된 PDF를 선택합니다
Buffered가 True(기본값)이면 TPdf가 제공된 byte를 자신이 보유한 버퍼로 복사합니다. False이면 호출자의 버퍼는 UnloadDocument 또는 Active := False 전까지 유효하고 변경되지 않은 상태로 유지되어야 합니다. 이는 추가 복사를 피하지만 신중한 수명 관리가 필요합니다
byte-range overload는 음수 값, 데이터 길이를 벗어난 Index, 남은 byte를 초과하는 Count를 거부합니다. pointer overload는 Size가 0이 아닐 때 nil을 거부하고, TMemoryStream overload는 문서 상태가 변경되기 전에 nil stream을 거부합니다
성공하면 Active가 True가 되고 모든 페이지 프로퍼티가
첫 페이지(PageNumber = 1)를 반영합니다. 실패하면
EPdfError 예외가 발생합니다
TPdfLoadOptions.Default는 source byte, issue, xref section, xref 항목, 객체 번호에 대해 제한된 기본값을 제공합니다. 모든 모드에서 PDFium이 의미론적 parser로 남으며, wrapper 감사가 존재하는 이유는 공개된 PDFium ABI가 xref 유효성을 보고하지만 parser 복구를 비활성화하는 스위치를 노출하지 않기 때문입니다
plmCompatible은 PDFium 복구를 수용하고 레거시 로드 동작을 바꾸지 않은 채 결과를 기록합니다plmStrict는 PDFium이 xref를 재구성했거나 제한된 감사가 구조적 오류를 발견하면 source를 거부합니다plmRecovery는 복구된 로드를 명시적으로 수용하고 진단 경로와 근거를 반환합니다감사는 고전적 xref table, xref stream, hybrid revision, /Prev chain을 따라갑니다. 잘못된 형식의 section, 순환, 충돌하는 항목, 손상된 객체 오프셋, 누락된 종결 표식, 지원되지 않는 stream filter, 예산 소진, native 복구를 보고합니다. 설정된 감사 예산을 초과하면 AuditComplete가 False가 되고 경고가 발생하지만, 검사되지 않은 byte가 잘못되었다고 주장하지는 않습니다
InspectAvailability는 linearization과 page-first 로딩을 위한 가벼운 native 가용성 probe로 남아 있으며, 구조적 로드 보고서를 대체하지 않습니다
TPdfLoadReport는 Status, CrossReferenceTableValid, UsedRecovery, RecoveryRoute, source 및 구조적 오프셋, section과 항목 계수, 충돌 및 손상 계수, issue 총계, 절단 상태, 타입화된 Issues 배열을 포함합니다. 동일한 보고서가 LastLoadReport에 저장됩니다
TPdfRepairReport는 source가 복구를 사용했는지, 출력 크기와 page 수, 출력 xref 유효성, 종결 오류 텍스트, 완전한 독립 strict-load 검증 보고서를 기록합니다
SaveAsRepaired는 PDFium에게 완전한 비증분 사본을 쓰도록 요청한 뒤, 그 출력을 격리된 TPdf에서 plmStrict로 엽니다. 이 메서드는 xref 유효성과 page 수 일관성 검사를 통과한 후에만 byte를 전달합니다. file overload는 같은 디렉터리의 임시 파일을 통해 기록하고 대상을 원자적으로 교체합니다
전체 재작성은 이전 증분 기록을 제거하고 기존 signature byte 범위를 무효화합니다. 서명된 문서는 AllowSignedDocument가 명시적으로 True가 아니면 거부됩니다. 이 메서드는 PDFium이 성공적으로 로드하고 다시 쓸 수 있는 구조를 수리하며, 임의의 손상된 내용의 복구나 전자 서명의 보존을 보장하지는 않습니다
// From file
Pdf.FileName := 'C:\docs\file.pdf';
Pdf.LoadDocument;
// From TBytes
var Bytes: TBytes;
Bytes := TFile.ReadAllBytes('file.pdf');
Pdf.LoadDocument(Bytes);
// From TMemoryStream (unbuffered)
Pdf.LoadDocument(FStream, False);