PDFium Delphi Component Docs

İşlemsel stilli metin değiştirme

Yerel üst düzey metin nesnelerine karşı değiştirmeleri planlamak ve yürütmek için FPdfStyledEdit ekleyin ve bir IPdfRegexEngine sağlayın

PlanStyledPdfRegexReplacements yinelenebilir bir kaynak anlık görüntüsü yakalar, gerçek Unicode gliflerini sayfa ve nesne sırasına göre birleştirir ve eşleşmeleri kararlı nesne çapalarına geri eşler; ayıklamayla üretilen boşluklar ve satır sonları hariç tutulur

ExecuteStyledPdfReplacements, bağımsız yüklenmiş bir belgeyi değiştirmeden önce anlık görüntü SHA-256 değerini, geçerli kaynak kimliğini, çapaları ve örtüşmeyen aralıkları doğrular

Kaynak kimliği, özgün dosya baytları yerine normalleştirilmiş zaman damgaları ve tanımlayıcılar dahil yinelenebilir serileştirme kullanır; plan, gerçek anlık görüntü baytlarını ve SHA-256 değerlerini saklar

Yerel yazı tipi, metin boyutu, renk ve matris mümkün olduğunca yeniden kullanılır; nesneleri veya sayfaları kapsayan değiştirmeler ilk nesnenin stilini korur ve kalan metni ile sayfa sırasını korurken tüketilen karakterleri sonraki nesnelerden kaldırır

FallbackFontName, yerel Unicode yeniden üretilemediğinde açıkça standart bir PostScript yazı tipi seçer; ForceFallbackFont bu yolu doğrudan talep eder

Geri dönüş, boyacı sırasını, matrisi, işleme modunu ve dolgu ile kontur özniteliklerini korur; kırpılmış, saydam, işaretli veya etiketli nesneler grafik semantiğini sessizce kaybetmek yerine reddedilir

Kaynak sınırlarından daha geniş metin, matrisi dik ve kesilmemişken yatay olarak daralabilir; MinHorizontalScale varsayılan 0,5tır ve daha dar değiştirme metni özgün matrisi korur

Bu iş akışı tek satırlı değiştirme metnini ve sınırlı yatay sığdırmayı destekler; iç içe Form XObject'lerinde gezinmez, Tagged PDF semantiğini yeniden yazmaz veya paragraf yeniden akışı yapmaz

İmzalı veya şifreli belgeler ile XFA reddedilir; iptal, bayat planlar, geçersiz UTF-16, desteklenmeyen yazı tipleri ve tükenen bütçeler çağıranın belgesini değiştirmeden bırakır

PreviewOnly, bağımsız olarak yeniden açılan sonucu çağıranı değiştirmeden PreviewPdf içinde döndürür; başarılı işleme, glif ayıklama ve sayfa sayısı kaydetme ve yeniden açmadan sonra doğrulandıktan sonra belgeyi değiştirir

Tüm eşleşmeler, yerel nesneler değiştirilmeden önce nihai nesne metnine derlenir; sığdırma ve minimum ölçek, özgün sınırlara göre bir kez denetlenir; böylece yinelenen eşleşmelerin aşırı daralma biriktirmesi önlenir

Boş değiştirme metni, tüm çapalı düzenlemelerden sonra tamamen tüketilmiş bir metin nesnesini kaldırır; çoklu değiştirmeler geriye doğru yürütülür, böylece önceki kaynak ofsetleri geçerli kalır

Varsayılan sınırlar 256 MiB belge baytı, 10.000 sayfa, 100.000 metin nesnesi, 16.777.216 UTF-16 birimi ve 100.000 değiştirmedir; metin tarama iş bütçesi 67.108.864 yerel karakter ziyareti ve UTF-16 planlama-kopyalama birimidir

Katı üst sınırlar o sayfa, nesne, karakter ve değiştirme sınırlarını korur, 512 MiB belge baytına ve 1.073.741.824 tarama ziyaretine izin verir ve geri dönüş yazı tipi adını 1.024 baytla sınırlar

Rapor, kaynak ve çıktı SHA-256 değerlerini, uygulanan değiştirme, geri dönüş ve ölçekleme sayılarını ve nesne başına özgün/son metni ile PDF kullanıcı uzayı puan cinsinden sınırları içerir; sayfa ve nesne dizinleri sıfır tabanlı kaynak dizinleridir

Değiştirme işlemi bir güvenlik karartma iş akışı değildir; hassas içeriğin ve ilişkili belge verilerinin kaldırılması için özel karartma API'lerini kullanın

Options := TPdfStyledEditOptions.Default;
Plan := PlanStyledPdfRegexReplacements(Pdf, Pattern, Replacement, Engine, Options);
Options.PreviewOnly := True;
if not ExecuteStyledPdfReplacements(Pdf, Plan, Options, PreviewPdf, Report) then
  raise EPdfProduction.Create(Report.ErrorMessage);

Public declarations

type
  TPdfStyledEditOptions= record
    MaxDocumentBytes: Integer;
    MaxPages, MaxTextObjects, MaxCharacters, MaxReplacements: Integer;
    MaxTextScanWork: Int64;
    MinHorizontalScale: Double;
    FallbackFontName: AnsiString;
    ForceFallbackFont: Boolean;
    PreviewOnly: Boolean;
    CancellationToken: IPdfCancellationToken;
    class function Default: TPdfStyledEditOptions; static;
  end;
  TPdfStyledEditPlan= record
    SourceSha256: string;
    SourceBytes: TBytes;
    Spans: TPdfStyledSpans;
    Replacements: TPdfStyledReplacements;
  end;
  TPdfStyledObjectChange= record
    PageIndex, ObjectIndex: Integer;
    BeforeText, AfterText: WideString;
    BeforeBounds, AfterBounds: TPdfRectangle;
    HorizontalScale: Double;
    FontFallback: Boolean;
  end;
  TPdfStyledObjectChanges= array of TPdfStyledObjectChange;
  TPdfStyledEditReport= record
    Succeeded, Cancelled, PreviewOnly: Boolean;
    AppliedReplacementCount, FontFallbackCount, ScaledObjectCount: Integer;
    SourceSha256, OutputSha256, ErrorMessage: string;
    Changes: TPdfStyledObjectChanges;
  end;

function PlanStyledPdfRegexReplacements(Pdf: TPdf;
  const Pattern, Replacement: WideString; Engine: IPdfRegexEngine;
  const Options: TPdfStyledEditOptions): TPdfStyledEditPlan;
function ExecuteStyledPdfReplacements(Pdf: TPdf;
  const Plan: TPdfStyledEditPlan; const Options: TPdfStyledEditOptions;
  out PreviewPdf: TBytes; out Report: TPdfStyledEditReport): Boolean;