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