PDFium Delphi Component Docs

TPdfProgressiveDocument 클래스

유닛: PDFium  ·  베이스 클래스: TPdf
스파스 바이트 가용성, 우선순위가 적용된 범위 스케줄링, 한도 있는 재시도, 취소, 문서·폼·페이지 게이트를 갖춘 네이티브 PDFium progressive 다운로드 세션입니다

Syntax

type TPdfProgressiveDocument = class(TPdf) ... end;

Methods

MethodDescription
Create문서 컴포넌트와 소유한 range-request 스케줄러를 만듭니다
Destroy상속된 문서 리소스를 해제하기 전에 progressive 상태를 취소합니다
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)논리적 최종 크기와 현재 저장된 바이트를 분리해 둔 채 네이티브 가용성 공급자를 만듭니다
CheckDocumentAvailabilitypdaAvailable, pdaNotAvailable, pdaError를 반환하고 PDFium이 요청한 병합된 바이트 범위를 돌려줍니다
OpenProgressiveDocumentlinearized PDF는 FPDFAvail_GetDocument로, 완전히 수신된 non-linearized PDF는 FPDF_LoadCustomDocument로 엽니다
CheckFormAvailability네이티브 폼 데이터를 사용할 수 있게 될 때까지 폼 채우기 초기화를 막습니다
LoadAvailablePage폼 가용성이 최종 상태에 도달한 뒤 1 기반 페이지 하나를 게이트하고 로드합니다
CancelProgressiveLoad페이지, 폼, 문서, 가용성 핸들, 콜백, 스트림 어댑터를 의존 순서대로 닫습니다

Properties and events

MemberTypeDescription
ProgressiveLoadingBoolean네이티브 가용성 세션이 살아 있는 동안 True
LogicalFileSizeUInt64서버나 컨테이너가 제공하는 최종 콘텐츠 길이
AvailableByteCountUInt64스트림에서 이미 읽을 수 있는 연속 접두부의 단조 증가 길이
LinearizationTPdfLinearization헤더 바이트가 충분해지면 나오는 네이티브 linearization 판정
FirstAvailablePageNumberInteger문서 핸들이 열린 뒤의 첫 1 기반 페이지
OnDataAvailableTPdfDataAvailableEvent스파스 또는 순서가 뒤섞인 범위 저장소를 위한 접두부 검사 재정의
RangeRequestsTPdfRangeRequestScheduler모든 네이티브 문서, 폼, 페이지 다운로드 힌트로 채워지는 소유 스케줄러

Description

TPdfProgressiveDocument는 원격 또는 성장하는 스트림 로드 내내 PDFium이 다시 방문할 수 있는 네이티브 FPDF_AVAIL 핸들과 콜백 레코드를 소유합니다

서버 콘텐츠 길이와 초기 접두부로 시작하고, 해당 가용성 메서드를 호출하고, RangeRequests에서 작업을 꺼내고, 각 응답을 기반 랜덤 액세스 저장소에 쓰고, CompleteRequest를 호출하는 과정을 최종 가용성 상태가 반환될 때까지 반복합니다

연속 다운로드에서는 새 바이트를 쓴 뒤 AvailableByteCount를 앞당기고, 스파스 범위 캐시에서는 OnDataAvailable을 할당해 요청된 각 오프셋과 크기가 읽을 수 있는지 답합니다

스케줄러는 레거시 DownloadHints 출력으로 돌아오는 동일한 네이티브 힌트를 받아들이고, 접두부나 스파스 콜백으로 이미 알려진 범위를 제거하고, 인접한 꼬리를 승격시키지 않으면서 페이지에 중요한 바이트를 위해 겹치는 백그라운드 전송을 선점하고, 전송 작업을 MaxRequestSize에서 나눕니다

linearized PDF는 파일 전체가 도착하기 전에 문서 메타데이터와 첫 페이지를 열 수 있고, non-linearized PDF는 완전한 파일을 요구하며 자동으로 평소의 네이티브 커스텀 스트림 로더를 사용합니다

Example

var
  Hints: TPdfDownloadRanges;
  Request: TPdfRangeRequest;
  State: TPdfDataAvailability;
begin
  Progressive.BeginProgressiveLoad(CacheStream, ContentLength,
    False, InitialPrefixLength);
  repeat
    State := Progressive.CheckDocumentAvailability(Hints);
    while Progressive.RangeRequests.TryDequeue(Request) do
    begin
      FetchRangeIntoCache(Request.Offset, Request.Size);
      Progressive.RangeRequests.CompleteRequest(Request);
    end;
  until State <> pdaNotAvailable;
  if State = pdaAvailable then
    Progressive.OpenProgressiveDocument;
end;

Remarks

Related types

TPdfDataAvailability, TPdfDownloadRange, TPdfDownloadRanges, TPdfRangeRequest, TPdfRangeRequestPriority, TPdfRangeRequestStatistics, TPdfRangeRequestScheduler, TPdfDataAvailableEvent, TPdfLinearization, TPdfFormAvailability