Giriş

Aspose.PDF FOSS for Java, org.aspose.pdf için bir MIT lisanslı Java kütüphanesidir ve PDF belgeleri oluşturmak ve düzenlemek için kullanılır. Sınıfları org.aspose.pdf paketi ve alt paketleri (org.aspose.pdf.annotations, org.aspose.pdf.forms, org.aspose.pdf.facades ve diğerleri) altında düzenlenmiştir ve Document çoğu iş akışı için giriş noktasıdır. Kütüphanenin üçüncü taraf çalışma zamanı bağımlılığı yoktur; Maven yapısındaki tek bağımlılık test kapsamındaki JUnit’tur.

library announcement, facades post ve page-editing post zaten belge oluşturma, form alanları, çıkarma, şifreleme ve damgalama için facade sınıfları ve PdfFileEditor ile sayfa işlemlerini kapsar. Bu gönderi, aynı API içinde o gönderilerin göstermediği beş başka alanı ele alıyor: metin işaretleme ek açıklamaları, serbest metin çağrıları, belge düzeyinde eylemler, akış çözümlemede boyut koruması ve tanılayıcı günlük kaydı.

Her alan, küçük ve bağımsız bir API dir. Aşağıdaki bölümler, kütüphanenin kendi testlerinin belirlediği çağrıları, varsayılanları ve uç durumları gösterir.


Ana Özellikler

Metin İşaretleme Açıklamaları

HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation ve SquigglyAnnotation her biri bir Page ve bir Rectangle alır. Yapıcı, ek açıklamanın dört noktasını dikdörtgenden türetir, bu yüzden getQuadPoints() herhangi bir manuel hesaplama yapmadan sekiz değer döndürür. (100, 200, 300, 250) dikdörtgeni için sonuç [100, 250, 300, 250, 100, 200, 300, 200] şeklindedir: sol üst, sağ üst, sol alt, ardından sağ alt. setQuadPoints() türetilen değerleri kendi sekiz değerlik dizinizle değiştirir ve mevcut bir sözlükten yeniden oluşturulan bir ek açıklama, zaten orada depolanmış dört noktayı korur. getSubtype() PDF alt tür adını döndürür: Highlight, Underline, StrikeOut veya Squiggly.

Bir açıklama oluşturmak, onu sayfaya eklemez. page.getAnnotations().add(...) ile ekleyin.

try (Document doc = new Document()) {
    Page page = doc.getPages().add();

    HighlightAnnotation highlight = new HighlightAnnotation(page, new Rectangle(100, 200, 300, 250));
    double[] quadPoints = highlight.getQuadPoints();

    UnderlineAnnotation underline = new UnderlineAnnotation(page, new Rectangle(50, 100, 200, 120));
    StrikeOutAnnotation strikeOut = new StrikeOutAnnotation(page, new Rectangle(50, 140, 200, 160));
    SquigglyAnnotation squiggly = new SquigglyAnnotation(page, new Rectangle(50, 180, 200, 200));

    page.getAnnotations().add(highlight);
    page.getAnnotations().add(underline);
    page.getAnnotations().add(strikeOut);
    page.getAnnotations().add(squiggly);
    doc.save("markup.pdf");
}

Serbest Metin Çağrıları

FreeTextAnnotation metni doğrudan bir sayfaya yerleştirir. Üç argümanlı yapıcı, font adını, font boyutunu ve metin rengini içeren bir DefaultAppearance alır. Üç özellik çağrıyı şekillendirir:

  • setIntent() bir FreeTextIntent alır: FreeText, FreeTextCallout veya FreeTextTypeWriter. Yeni bir açıklama Undefined rapor eder ve null geçmek onu o duruma geri döndürür.
  • setCallout() çağrı satırını iki ya da üç {x, y} noktasından oluşan bir dizi olarak alır. Başka uzunlukta bir dizi yok sayılır ve mevcut çağrı yerinde kalır; null çağrıyı kaldırır.
  • setEndingStyle() OpenArrow veya Diamond gibi bir LineEnding değeri alır. Yeni bir açıklama LineEnding.None rapor eder.
try (Document doc = new Document()) {
    Page page = doc.getPages().add();
    DefaultAppearance da = new DefaultAppearance("Helv", 10, Color.BLACK);
    FreeTextAnnotation note = new FreeTextAnnotation(page, new Rectangle(50, 50, 200, 100), da);

    note.setContents("Check this value");
    note.setIntent(FreeTextIntent.FreeTextCallout);
    note.setCallout(new double[][] {{10, 10}, {50, 50}, {100, 100}});
    note.setEndingStyle(LineEnding.OpenArrow);

    page.getAnnotations().add(note);
    doc.save("callout.pdf");
}

Kaydedilen açıklama sözlüğü bu değerleri /IT, /CL ve /LE olarak saklar.

Belge Düzeyi Eylemler

Document.getActions() belge kataloğunun DocumentActions görünümünü döndürür. setOpenAction(), kataloğun /OpenAction girişinde bir eylemi saklar. Beş ek tetikleyici, setBeforeClosing(), setBeforeSaving(), setAfterSaving(), setBeforePrinting() ve setAfterPrinting(), kataloğun /AA ek-aksiyonlar sözlüğünde bağımsız olarak saklanır.

Her alıcı, tetikleyicisi ayarlanana kadar null döndürür. Bir ayarlayıcıya null vermek o girdiyi kaldırır ve son tetikleyiciyi kaldırmak aynı zamanda /AA sözlüğünü de kaldırır. Eylemler PdfAction örnekleridir; GoToURIAction, UriAction‘in bir takma adıdır ve onun getType() URI döndürür. DocumentActions nesnesi canlı bir görünümdür, bu yüzden getActions()‘a sonraki bir çağrı, önceki bir çağrıyla yapılan değişiklikleri görür ve tetikleyiciler dosya tekrar açıldığında geri okunur.

try (Document doc = new Document()) {
    doc.getPages().add();
    DocumentActions actions = doc.getActions();

    actions.setOpenAction(new GoToURIAction("https://example.com"));
    actions.setBeforeSaving(new GoToURIAction("https://example.com/saving"));

    PdfAction open = doc.getActions().getOpenAction();
    if (open instanceof UriAction) {
        System.out.println(((UriAction) open).getUri());
    }

    actions.setBeforeSaving(null);   // removes /WS; /AA is removed once it is empty
    doc.save("actions.pdf");
}

Akış Filtreleri için Çözümleme Sınırları

PDF akışları kodlanmış biçimde saklanır ve bozuk ya da kötü niyetli bir akış, saklanan boyutundan çok daha fazla genişleyebilir. DecodeLimits, FlateDecode, LZWDecode ve RunLengthDecode filtreleri tarafından paylaşılan bir korumadır. Bir akışın çözülmüş çıktısı sınırı aşınca, filtre DecodeSizeLimitException hatasını fırlatır; bu, IOException‘nin bir alt sınıfıdır ve yığını tükenene kadar çözümleme yapmaz.

Varsayılan sınır, çözülen her akış için 256 MB’dir (DecodeLimits.DEFAULT_MAX_DECODED_BYTES). Bunu değiştirmek için, DecodeLimits.PROPERTY tarafından adlandırılan sistem özelliğini, aspose.pdf.maxDecodedStreamBytes olan, bayt cinsinden bir boyuta ayarlayın; 0 veya daha düşük bir değer korumayı devre dışı bırakır. Özellik her çözümlemede okunur, bu yüzden çalışma zamanında değiştirilebilir.

static byte[] decodeFlate(byte[] encoded) {
    // Lower the cap to 16 MB (16777216 bytes) for this process
    System.setProperty(DecodeLimits.PROPERTY, "16777216");
    try {
        return new FlateFilter().decode(encoded, null);
    } catch (IOException e) {
        // "FlateDecode: decoded output exceeds 16777216 bytes - likely a corrupt stream
        //  or decompression bomb (override with -Daspose.pdf.maxDecodedStreamBytes)"
        return null;
    }
}

Sınırın altındaki akışlar normal şekilde çözülür. FlateFilter ve RunLengthFilter, çıktı sınırın altında kaldığında veriyi encode() ve decode() üzerinden çift yönlü aktarır.

Tanı Kaydı

Kütüphane, org.aspose.pdf kaydedicisi altında java.util.logging aracılığıyla log tutar ve varsayılan olarak sessizdir: seviye OFF‘dir. AsposePdfLogging loglamayı açar.

  • setLevel(Level) koddan seviyeyi ayarlar; null kütüphaneyi OFF‘ye döndürür. getLevel() onu geri okur.
  • aspose.pdf.log sistem özelliği (aynı zamanda AsposePdfLogging.LOG_PROPERTY olarak da bulunur) komut satırından ayarlar. configureFromSystemProperty() özelliği uygular ve sınıf yüklendiğinde de çalışır. on ve warning değerleri WARNING‘i seçer, verbose FINE‘i seçer, debug ALL‘ı seçer, java.util.logging.Level gibi herhangi bir ad, örneğin SEVERE, kabul edilir ve tanınmayan bir değer OFF‘ye geri döner.

WARNING motorun uyarılarını geçmesine izin verir; FINE, verbose ayarı, aynı zamanda ayrıştırıcının kurtarma ayrıntılarını da geçmesine izin verir. AsposePdfLogging yalnızca org.aspose.pdf logger alt ağacını değiştirir. Kök logger seviyesini değiştirmez ve kütüphane logger’ı kayıtları kök logger’ın işleyicilerine iletmez. Günlükleme etkinse ve kütüphane logger’ına hiçbir işleyici eklenmemişse, bir konsol işleyicisi kurulur.

// Equivalent to starting the JVM with -Daspose.pdf.log=warning
AsposePdfLogging.setLevel(Level.WARNING);

System.setProperty(AsposePdfLogging.LOG_PROPERTY, "verbose");
AsposePdfLogging.configureFromSystemProperty();
System.out.println(AsposePdfLogging.getLevel());   // FINE

Hızlı Başlangıç

Bağımlılığı derlemenize ekleyin:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-pdf-foss</artifactId>
  <version>26.8.0</version>
</dependency>

Aşağıdaki örnek bir sayfa oluşturur, bir vurgulama ve serbest metin açıklaması ekler ve belgeyi kaydeder:

import org.aspose.pdf.*;
import org.aspose.pdf.annotations.*;

try (Document doc = new Document()) {
    Page page = doc.getPages().add();

    page.getAnnotations().add(new HighlightAnnotation(page, new Rectangle(100, 200, 300, 250)));

    FreeTextAnnotation note = new FreeTextAnnotation(page, new Rectangle(50, 50, 200, 100),
            new DefaultAppearance("Helv", 10, Color.BLACK));
    note.setContents("Check this value");
    note.setIntent(FreeTextIntent.FreeTextCallout);
    note.setCallout(new double[][] {{10, 10}, {50, 50}, {100, 100}});
    page.getAnnotations().add(note);

    doc.save("core-features.pdf");
}

Desteklenen Formatlar

Kütüphanenin yükleme ve kaydetme seçenekleri ile renderleme aygıtları tarafından onaylanan format desteği:

BiçimUzantıOkumaYazma
PDFpdf✓✓
HTMLhtml✓✓
DOCXdocx✓✓
DOCdoc✓✓
XFDFxfdf✓✓
BMPbmp—✓
GIFgif—✓
JPEGjpeg—✓
TIFFtiff—✓
Texttxt—✓

Açık Kaynak & Lisanslama

Aspose.PDF FOSS for Java MIT lisansı altında yayınlanmıştır, bu lisans ticari kullanım, değiştirme ve yeniden dağıtımı izin verir. Kaynak kodu ve hata izleyici şu adreste bulunur: github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java. Kütüphane Java 11 veya daha yenisini hedefler.


Başlarken

İlgili Kaynaklar