Sınırlı paragraph editing

HPDFParagraphReflow, açık bir kaynak dikdörtgeni içinde yüklenmiş glyph merkezlerini seçer ve aynı sayfada açık bir hedef dikdörtgeni içinde yeni ölçülmüş bir paragraph yazar

Kabul profili, Delphi Win32/Win64 ve Windows FPC/Lazarus'u kapsar; ölçülmüş yazı tipi üretimi, mevcut belge appearance builder'ını ve onun kurulu-yazı-tipi desteğini kullanır

Seçim, layout ve koruma

Koordinatlar, yukarı-yönlü y ekseniyle döndürülmemiş PDF sayfa user-space punto'lardır; her iki dikdörtgen de sonlu olmalı, 14400 punto'dan büyük-olmayan pozitif boyutlara sahip olmalı ve sayfa MediaBox'ına sığmalıdır

Seçim, birden çok orijinal baseline'ı ve birden çok sayfa content stream'ini kapsayabilir; literal, onaltılık, TJ, tek quote ve çift quote metin operand'ları, seçili character-code sınırlarında yeniden yazılır

Tutulan prefix'ler, suffix'ler, metin advance'leri ve orijinal sayısal kerning ayarlamaları yerinde kalır; kaynak metin, bir arka plan dikdörtgeni tarafından gizlenmek yerine gerçek operand'lardan kaldırılır

İç-ice Form XObject'ler kendi Matrix ve BBox'larını kullanır; her seçili invocation ve ancestor kaynakları private kopyalanır — orijinal Form'ları paylaşan diğer invocation'ları ve sayfaları koruyarak

Bir Form BBox'ının dışındaki glyph merkezleri dışlanır; kısmi kaynak glyph sınırları default'ta reddedilir ve RejectPartialSourceGlyphs = False, merkezi seçildiğinde eksiksiz bir character code'un kaldırılmasını açıkça izin verir

Appearance, kurulu yazı tipini, style'ı, boyutu, rengi, padding'i, alignment'ı ve overflow politikasını seçer; hedef genişliği wrapping'i kontrol eder ve shrink-to-fit gerçek EffectiveFontSize'u raporlar

Üretilmiş glyph geometrisi bağımsız yorumlanır ve hedef dikdörtgenine karşı denetlenir; bu sınırlı helper için rotasyon sıfıra ve opaklık bire sabitlenir

Boş bir replacement, seçili kaynak metni siler; boş bir kaynak bölgesine paragraph eklemek için RequireSourceText = False ayarlayın

Çarpışma kanıtı

Seçilmemiş whitespace-olmayan metin, XObject ve inline görseller, boyanan path sınırları ve anotasyon dikdörtgenleri, üretilmiş replacement glyph sınırlarıyla karşılaştırılır

Her çarpışma, kendi türünü, sayfa-space sınırlarını, opsiyonel komşu metni ve bir replacement glyph indeksini tanımlar; toplam sayı, döndürülen çarpışma listesi tavanına ulaşsa bile tutulur

Path kontrol noktaları, dönüştürülmüş Form clip sınırları, stroke genişliği ve miter limitleri muhafazakâr kutular üretir; bilinmeyen boya kapsamıyla shading, tüm hedef dikdörtgenini muhafazakâr şekilde kaplar

Bu geometri testi, saydam görselleri, boyanmamış anotasyon area'larını, eğrileri, kırpılmış path'leri ve döndürülmüş Form zarflarını fazla raporlayabilir; piksel-mükemmel mürekkep ayrımını kanıtlamaz veya keyfi clipping path'leri, blend compositing'i veya yazı tipi outline'larını incelemez

RejectCollisions = True, üst üste binen replacement'ları mutation olmadan reddeder; false'a ayarlamak, çağıranın bilinçli overlap politikasına izin verirken raporu tutar

Preview, commit ve rollback

HPDFPreviewParagraphReflow, çağıranın-sahip olduğu mühürlü bir plan, semantik replacement layout'u, fingerprint'ler ve çarpışma kanıtı döndürür, ardından üretilmiş belge object'lerini geri alır

HPDFCommitParagraphReflow, sınırlı analiz'i tekrar eder ve planı yalnızca kaynak içerik, Form sınırları, anotasyon geometrisi ve replacement yazı tipi geometrisi hâlâ preview ile eşleştiğinde atomik uygular

Bir plan, aynı canlı belge instance'ına aittir; bittiğinde serbest bırakın, belgeyi boyunca canlı tutun ve başka bir belge yükledikten veya seçili içeriği değiştirdikten sonra preview'i yeniden üretin

THPDFParagraphReflowSession, uygulanmış bir inceleme state'i ekler: Apply, düzenlenmiş belgeyi extraction veya rendering için açığa çıkarır, Commit onu yayımlar ve Rollback veya destruction orijinal grafiği geri alır

Session'ları seri kullanın; belge session'dan uzun yaşamalıdır ve Pending true iken diğer graf transaction'ları veya editing çağrıları iç içe geçmemelidir

Rollback, bellek-içi belge state'ini geri alır; zaten kaydedilmiş harici dosyalar çağıranın sorumluluğunda kalır

Sonu iş ve başarısızlık davranışı

Default limitler, 64 MiB decoded içerik, 64 MiB üretilmiş stream'ler, 100000000 work unit, 100000 glyph, 250000 token, 12 Form düzeyi, 256 Form invocation'ı, 256 döndürülmüş çarpışma ve 100000 klonlanmış kaynak node'dur

Kodlanmış string baytları, glyph yorumlamasından önce kalan glyph limitine karşı denetlenir — çok-byte'lı character encoding'leri, görünen glyph sayılarından daha fazla bütçe muhafazakâr şekilde tüketebilir

Decoded ve üretilmiş limitler, helper tarafından işlenen içeriği kapsar; üretilmiş stream boyutu yayımdan önce denetlenir ve process peak-bellek limitini temsil etmez veya tüm kurulu-yazı-tipi builder tahsislerini sınırlamaz

Cancellation, content tokenization'ı ve helper döngüleri üzerinden cooperative'tır — mevcut yazı-tipi-üretim çağrılarının etrafındaki check'lerle; çağrı tamamlanana kadar token'ı tutun

Eksik kaynak, geçersiz input, çarpışmalar, bayat planlar, desteklenmeyen içerik, tükenmiş bütçeler, cancellation ve sıradan başarısızlıklar, açık bir status ile false döndürür ve orijinal object grafiğini korur

Seçili dikey veya tekil metin, cycle'lı veya çözümlenmemiş Form'lar, desteklenmeyen boyanan XObject türleri ve signature field'lı belgeler reddedilir; signature-koruyan incremental editing ayrı bir workflow gerektirir

Örnek

Options := HPDFDefaultParagraphReflowOptions;
Options.Appearance.FontName := 'Arial';
Options.Appearance.FontSize := 11;
Source.Left := 55; Source.Bottom := 659;
Source.Right := 350; Source.Top := 714;
Target := Source;
Plan := nil;
try
  if HPDFPreviewParagraphReflow(Document, 0, Source, Target,
    'The Supplier must deliver signed monthly reports.', Options,
    Plan, Report, CancellationToken) then
    if HPDFCommitParagraphReflow(Document, Plan, Report, CancellationToken) then
      Document.SaveLoadedDocument('reviewed-contract.pdf');
finally
  Plan.Free;
end;

Kabul ve kayıtlı output

Özel Delphi ve FPC runner'ları, çok-baseline'lı paragraph'lar, kısmi operand'lar, iç-ice paylaşılan Form'lar, kırpılmış Form metni, genişlik ve yazı tipi değişiklikleri, çarpışma türleri, cancellation ve graf rollback için gerçek yüklenmiş PDF fixture'ları kullanır

Tekrarlanan file/file ve stream/file kayıtları düzenlenmiş grafiği korur; taze değişmemiş yüklenmiş belgeler kesin kaynak baytlarını tutar ve enjekte edilmiş bir output yazma başarısızlığının ardından başarılı bir retry gelebilir

Tests/Fixtures/ParagraphReflow/loaded-repeat-save.pdf, save regresyonunu paragraph helper'ını kullanmadan izole eder: yükle, bir işaretçi ekle, iki kez kaydet ve ikinci dosyayı bağımsız oku

Tests/Delphi/Run-ParagraphReflowTests.ps1 -Platform Win64 veya Tests/FPC/Run-ParagraphReflowTests.ps1 -Platform Win64 çalıştırın ve diğer architektür için Win32 seçin

Opsiyonel Python verifier Tests/Fixtures/ParagraphReflow/verify_output.py, PyMuPDF kullanarak gerçek kayıtlı Unicode metnini çıkarır ve düzenlenmiş sayfaları render eder; her runner otomatik viewer başlatmasını bastırır

İlgili konular

Sınırlı paragraph editing · Options · Report