Java pdf ok ek açıklamaları – eksiksiz öğretici ve en iyi uygulamalar (2025)
Giriş
PDF belgelerinin incelemeleri sırasında ekibinizin belirli bölümlere odaklanmasını sağlamakta zorlandınız mı? Tek başınıza değilsiniz. Teknik dokümantasyon, yasal sözleşmeler veya proje spesifikasyonları yönetiyor olun, tartışma için kesin alanları işaretlemek doğru araçlar olmadan hayal kırıklığı yaratabilir.
İşte çözüm: GroupDocs.Annotation API kullanarak Java PDF ok ek açıklamaları. Bu güçlü yaklaşım, add arrow to pdf dosyalarına programatik olarak ok eklemenizi sağlar, iş birliğini sorunsuz ve profesyonel hâle getirir. Deneme sürümünü GroupDocs geçici‑lisans sayfasından alabilirsiniz.
Hızlı cevaplar
- Java’da pdf’ye ok eklemek için hangi kütüphane? GroupDocs.Annotation for Java.
- Üretim için lisansa ihtiyacım var mı? Evet, ticari lisans su işaretlerini kaldırır ve tam özellik setini açar. Ayrıntılar için GroupDocs pricing page sayfasına bakın.
- Hangi Java sürümü önerilir? JDK 11 en iyi performansı ve uzun vadeli desteği sunar.
- Tek bir belgede birden fazla ok ekleyebilir miyim? Kesinlikle – sadece birden fazla
ArrowAnnotationnesnesi oluşturup aynıAnnotatoriçine ekleyin. - Toplu işleme destekleniyor mu? Evet, belgeler arasında döngü kurabilir ve uygun şekilde imha ettikten sonra aynı
Annotatorörneğini yeniden kullanabilirsiniz.
PDF’ye ok ekleme nedir?
add arrow to pdf işlemi, belirli bir bölgeyi vurgulamak veya işaretlemek için PDF sayfasına yönlü bir işaretçi çizer. Ok ek açıklamaları PDF nesneleri olarak saklanır, bu yüzden standart‑uyumlu herhangi bir görüntüleyicide görünür ve daha sonra düzenlenebilir veya yanıtlanabilir.
Neden GroupDocs.Annotation’ı Java PDF ok ek açıklamaları için seçmelisiniz?
GroupDocs.Annotation, zengin bir ek açıklama tipi seti, kurumsal‑düzey destek ve tekrarlayan kodu azaltan basit bir Java API sunar. Alternatiflerle karşılaştırıldığında 50+ giriş ve çıkış formatı işleyebilir ve 500‑sayfalık PDF’leri 200 MB altında yığın belleği ile işleyebilir; bu, akış mimarisi sayesinde mümkün olur.
Önkoşullar - aslında ihtiyacınız olanlar
Gerekli kütüphaneler ve bağımlılıklar
İlk olarak, GroupDocs.Annotation Maven bağımlılığını ekleyin. Aşağıdaki snippet tam olarak ihtiyacınız olan koordinatları gösterir; sürüm yer tutucusunu en son kararlı sürümle değiştirin.
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/annotation/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-annotation</artifactId>
<version>25.2</version>
</dependency>
</dependencies>
Pro tip: En yeni sürüm numarası için GroupDocs sürüm sayfasını kontrol edin. Yeni sürümler genellikle performans yamaları ve ek ek açıklama stilleri içerir.
Baş ağrısına neden olmayan ortam kurulumu
- JDK 8 veya üzeri – Gelişmiş çöp toplayıcı ve modül sistemi nedeniyle JDK 11 önerilir.
- Maven 3.6+ – Eski Maven sürümleri geçişli bağımlılıklarla zorlanabilir.
- IDE – IntelliJ IDEA veya Eclipse, Java kütüphaneleri için en iyi hata ayıklama deneyimini sunar.
- Memory – 100 sayfadan büyük PDF’lerle çalışırken en az 2 GB yığın tahsis edin.
Bilgi önkoşulları (kendinize dürüst olun)
Aşağıdakilerle rahat olmalısınız:
- Temel Java koleksiyonları ve istisna yönetimi.
- Maven bağımlılık yönetimi.
- Temel dosya G/Ç (ikili akışları okuma ve yazma).
Bu alanlardan herhangi biri eksik hissediyorsa, ek açıklama koduna dalmadan önce hızlı bir yenileme yapın.
GroupDocs.Annotation’ı kurmak - doğru yol
Adım 1: Maven yapılandırması (sorun giderme ile)
Daha önce gösterilen depo ve bağımlılığı ekleyin. Maven artefaktı çözümleyemezse, pom.xml içinde GroupDocs genel deposunun tanımlı olduğundan emin olun:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
Adım 2: Lisans kurulumu (üretim için kritik)
Geliştirme aşamasında geçici bir deneme lisansı kullanabilirsiniz:
// For evaluation purposes
License license = new License();
// license.setLicense("path/to/license.lic"); // Comment this out for trial
Gerçeklik kontrolü: Deneme, kaydedilen her PDF’e görünür bir su işareti ekler. Üretim lisansı bu su işaretini kaldırır ve tam ek açıklama özellik setini açar.
Adım 3: Temel başlatma deseni
Annotator, bir PDF belgesini yüklemek ve ek açıklamalar uygulamak için birincil sınıftır.
Kaynakların hızlıca serbest bırakılması için Annotator‘ı her zaman bir try‑finally bloğuna sarın:
Annotator annotator = null;
try {
annotator = new Annotator("YOUR_DOCUMENT_DIRECTORY/input.pdf");
// Your annotation code here
} finally {
if (annotator != null) {
annotator.dispose();
}
}
Neden try‑finally bloğu? GroupDocs, PDF ayrıştırması için yerel bellek tahsis eder; Annotator‘ı serbest bırakmazsanız, özellikle toplu işlerde birçok belge işlediğinizde bellek sızıntılarına yol açabilir.
Tam uygulama rehberi - sıfırdan üretime
Bağlamda ok ek açıklamalarını anlama
Ok ek açıklamaları, belge‑inceleme iş akışlarında görsel ipuçları görevi görür. Tipik kullanım senaryoları şunlardır:
- İnceleme geri bildirimi – “Bu madde açıklamaya ihtiyaç duyuyor.”
- Referans bağlantısı – “Sayfa 12’deki diyagrama bakın.”
- Süreç rehberliği – “Denetimi burada başlatın.”
- Sorun vurgulama – “Bu paragrafta olası bir yazım hatası.”
Bu senaryolara göre ek açıklama UI’nızı tasarlamak, kullanıcıların aracı daha hızlı benimsemesini sağlar.
Adım 1: Ek açıklama yanıtları oluşturma (akıllı yol)
Yanıtlar, statik bir oku etkileşimli bir tartışma noktasına dönüştürür. Reply sınıfını ilk kez tanıttığınızda, kısa bir tanım ekleyin:
Tanım bağlantısı: Reply, bir ek açıklamaya eklenmiş metin yorumunu temsil eder, yazar bilgisi ve zaman damgası içerir.
Reply reply1 = new Reply();
reply1.setComment("First comment");
reply1.setRepliedOn(Calendar.getInstance().getTime());
Reply reply2 = new Reply();
reply2.setComment("Second comment");
reply2.setRepliedOn(Calendar.getInstance().getTime());
List<Reply> replies = new ArrayList<>();
replies.add(reply1);
replies.add(reply2);
Pro tip: Yanıt meta verisine kullanıcının kimliğini ve rolünü kaydedin; bu, yorumları daha sonra filtrelemeyi kolaylaştırır.
Adım 2: Ok ek açıklamasını oluşturma (gerçek dünya koşullarıyla)
Tanım bağlantısı: ArrowAnnotation, PDF sayfasına yönlü bir ok çizen GroupDocs nesnesidir.
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setBox(new Rectangle(100, 100, 100, 100)); // Position and size
arrow.setCreatedOn(Calendar.getInstance().getTime()); // Creation time
arrow.setMessage("This is an arrow annotation"); // Annotation message
arrow.setOpacity(0.7); // Opacity level
arrow.setPageNumber(0); // Page number
arrow.setPenColor(65535); // ARGB pen color
arrow.setPenStyle(PenStyle.DOT); // Pen style
arrow.setPenWidth((byte) 3); // Arrow line width
arrow.setReplies(replies); // Attach replies
Açıklanan ana parametreler:
- Rectangle coordinates –
(x, y, width, height);(x, y)sınırlayıcı kutunun sol‑üst köşesidir. - PenColor – ARGB tamsayısı kullanır;
65535canlı bir mavi verir. Özel renkler için çevrimiçi dönüştürücü kullanın. - PenStyle – Seçenekler:
DOT,DASH,SOLID,DASHDOT,DASHDOTDOT. Çoğu senaryo içinSOLIDseçin. - Opacity –
0.0(şeffaf) ile1.0(opak) arasında değişir.0.7değeri, görünürlük ile alt içerik okunabilirliği arasında denge kurar.
Adım 3: Ekleyip kaydetme (hata yönetimi ile)
Tanım bağlantısı: Annotator.save, bekleyen tüm ek açıklama değişikliklerini hedef PDF dosyasına kalıcı hâle getirir.
try {
annotator.add(arrow);
annotator.save("YOUR_OUTPUT_DIRECTORY/output.pdf");
System.out.println("Arrow annotation added successfully!");
} catch (Exception e) {
System.err.println("Failed to add annotation: " + e.getMessage());
// Log the full stack trace in production
e.printStackTrace();
} finally {
annotator.dispose();
}
IOException ve AnnotationException‘ı her zaman yakalayarak bozuk dosyalar, geçersiz yollar veya izin sorunlarını ele alın. Yığın izini (stack trace) kaydetmek, üretimde sorunları teşhis etmenize yardımcı olur.
Yaygın tuzaklar ve nasıl kaçınılır
Sorun 1: Koordinatlar beklenen konumla eşleşmiyor
Problem: Ok, hedeflenen noktadan kaymış olarak görünür.
Solution: PDF koordinat orijini sol‑alt, GroupDocs ise sol‑üst bekler. UI koordinatlarınızı buna göre dönüştürün veya yerleşik convertToPdfCoordinates yardımcı metodunu kullanın:
// If arrows appear in wrong positions, try adjusting the Y coordinate
int adjustedY = pageHeight - originalY - annotationHeight;
arrow.setBox(new Rectangle(x, adjustedY, width, height));
Sorun 2: Kaydedildikten sonra ek açıklamalar kayboluyor
Problem: İşleme sırasında oklar görünür, ancak son PDF’te yoktur.
Solution: Bu neredeyse daima bir lisans sorunu olduğunu gösterir. Herhangi bir Annotator örneği oluşturulmadan önce lisans dosyasının yüklendiğini doğrulayın:
License license = new License();
try {
license.setLicense("GroupDocs.Annotation.lic");
} catch (Exception e) {
System.out.println("License not found, using trial mode");
}
Sorun 3: Toplu işleme sırasında bellek sızıntıları
Problem: Yüzlerce PDF işlenirken JVM yığın belleği tükenir.
Solution: Bir belgeyle işiniz bittiğinde her Annotator‘ı imha edin ve bellek kullanımını öngörülebilir tutmak için dosyaları küçük partiler halinde işleyin:
for (String documentPath : documentPaths) {
Annotator annotator = null;
try {
annotator = new Annotator(documentPath);
// Process document
} finally {
if (annotator != null) {
annotator.dispose();
}
}
// Force garbage collection every 10 documents
if (processedCount % 10 == 0) {
System.gc();
}
}
Gelişmiş özelleştirme teknikleri
Dinamik ok konumlandırma
Okların bir web UI’da kullanıcı tıklamalarını takip etmesi gerektiğinde, dikdörtgeni istemci tarafında hesaplayıp koordinatları backend’e gönderin. Backend, bu değerlerle bir ArrowAnnotation örneği oluşturabilir.
public ArrowAnnotation createArrowAt(int x, int y, String message) {
ArrowAnnotation arrow = new ArrowAnnotation();
// Create arrow pointing to specific coordinates
int arrowLength = 50;
arrow.setBox(new Rectangle(x - arrowLength, y - arrowLength, arrowLength, arrowLength));
arrow.setMessage(message);
arrow.setOpacity(0.8);
arrow.setPenColor(0xFF0000); // Red color
arrow.setPenStyle(PenStyle.SOLID);
arrow.setPenWidth((byte) 2);
return arrow;
}
Farklı kullanım durumları için okları stilize etme
PenColor ve PenStyle‘ı değiştirerek anlam katabilirsiniz—örneğin kritik sorunlar için kırmızı kesikli oklar, onaylı bölümler için yeşil katı oklar.
// Error highlighting (red, thick, solid)
public ArrowAnnotation createErrorArrow() {
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setPenColor(0xFF0000); // Red
arrow.setPenWidth((byte) 4);
arrow.setPenStyle(PenStyle.SOLID);
arrow.setOpacity(0.9);
return arrow;
}
// Suggestion arrows (blue, thin, dashed)
public ArrowAnnotation createSuggestionArrow() {
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setPenColor(0x0000FF); // Blue
arrow.setPenWidth((byte) 2);
arrow.setPenStyle(PenStyle.DASH);
arrow.setOpacity(0.6);
return arrow;
}
Gerçek dünya uygulama senaryoları
Senaryo 1: Belge inceleme sistemi
Çok‑kullanıcılı bir inceleme portalında, her inceleyen bir ArrowAnnotation oluşturur ve bir Reply ekler. Sistem, yanıtları ilişkisel bir veritabanında saklayarak her ek açıklama üzerinde dallanmış tartışma imkanı sunar.
public class DocumentReviewSystem {
public void addReviewArrow(String documentPath, int x, int y,
String reviewComment, String reviewerName) {
Annotator annotator = new Annotator(documentPath);
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setBox(new Rectangle(x, y, 50, 50));
arrow.setMessage("Review by " + reviewerName);
// Add reviewer's comment as reply
Reply review = new Reply();
review.setComment(reviewComment);
review.setUser(new User(reviewerName));
review.setRepliedOn(new Date());
arrow.setReplies(Arrays.asList(review));
annotator.add(arrow);
annotator.save(documentPath.replace(".pdf", "_reviewed.pdf"));
annotator.dispose();
}
}
Senaryo 2: Otomatik sorun tespiti
Bir analiz motoru, uyumluluk ihlallerini tarar ve otomatik olarak problemli maddelere kırmızı oklar ekler.
public void highlightDetectedIssues(String documentPath, List<Issue> issues) {
Annotator annotator = new Annotator(documentPath);
for (Issue issue : issues) {
ArrowAnnotation arrow = createArrowForIssue(issue);
annotator.add(arrow);
}
annotator.save(documentPath.replace(".pdf", "_issues_highlighted.pdf"));
annotator.dispose();
}
private ArrowAnnotation createArrowForIssue(Issue issue) {
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setBox(new Rectangle(issue.getX(), issue.getY(), 40, 40));
arrow.setMessage("Issue detected: " + issue.getType());
// Color‑code by severity
switch (issue.getSeverity()) {
case HIGH:
arrow.setPenColor(0xFF0000); // Red
break;
case MEDIUM:
arrow.setPenColor(0xFFA500); // Orange
break;
case LOW:
arrow.setPenColor(0xFFFF00); // Yellow
break;
}
return arrow;
}
Performans optimizasyon ipuçları
Bellek yönetimi en iyi uygulamaları
Use try‑with‑resources (Java 7+) to auto‑close
Annotatorobjects:
try (Annotator annotator = new Annotator(“document.pdf”)) { // Your annotation code } // Automatically disposed
2. **Process pages individually** instead of loading the entire document into memory.
3. **Monitor heap usage** with tools like VisualVM or JConsole during large‑scale batch runs.
### CPU performans düşünceleri
- Tüm oklar için tek bir `Color` örneği yeniden kullanın, gereksiz nesne tahsisinden kaçının.
- Aynı `PenStyle` nesnelerini tekrar tekrar oluşturan iç içe döngülerden kaçının.
- Birçok bağımsız PDF'niz varsa bir iş parçacığı havuzu (thread pool) düşünün, ancak aynı anda çalışan `Annotator` örnek sayısını sınırlayarak bellek tüketimini kontrol altında tutun.
## Sorun giderme rehberi – gerçek sorunlara çözümler
### Sorun: Ek açıklamalar Adobe Reader'da görünmüyor
**Symptoms**: Oklar özel görüntüleyicinizde görünür ancak Adobe Acrobat'ta yok.
**Solutions**:
1. PDF'i PDF/A‑1b uyumluluğu ile kaydedin, böylece en yüksek görüntüleyici uyumluluğu sağlanır:
```java
// Try different save options if available
SaveOptions saveOptions = new SaveOptions();
saveOptions.setAnnotationType(AnnotationType.All);
annotator.save(outputPath, saveOptions);
- PDF sürümünün en az 1.7 olduğundan emin olun; daha eski sürümler yeni ek açıklama tiplerini atabilir.
Sorun: Büyük PDF’lerde düşük performans
Symptoms: 200 sayfadan büyük PDF’lerle çalışırken uygulama takılıyor veya yanıt vermiyor.
Solutions:
Process pages individually rather than loading the whole file:
// Process specific pages LoadOptions loadOptions = new LoadOptions(); loadOptions.setLoadCharts(false); // Skip charts if not needed Annotator annotator = new Annotator(documentPath, loadOptions);
2. **Enable streaming** in the `Annotator` constructor if your version supports it.
3. Çok büyük belgeler için JVM yığınını (`-Xmx4g`) artırın.
### Sorun: Renk renderleme sorunları
**Symptoms**: Ok gri ya da tamamen şeffaf görünüyor.
**Solution**: Rengi ARGB formatında tanımlayın ve PDF'in renk uzayının **DeviceRGB** olarak ayarlandığından emin olun:
```java
// Use hex values for consistent colors
int red = 0xFFFF0000; // ARGB format
int blue = 0xFF0000FF;
int green = 0xFF00FF00;
// Or convert from RGB
public int rgbToArgb(int r, int g, int b) {
return (0xFF << 24) | (r << 16) | (g << 8) | b;
}
Uygulamanızı test etme
Ok ek açıklamaları birim testi
Sağlam bir birim testi, örnek bir PDF yükler, bir ArrowAnnotation ekler, dosyayı kaydeder ve ardından ek açıklama sayısını ve özelliklerini doğrulamak için yeniden açar:
@Test
public void testArrowAnnotationCreation() {
// Arrange
String inputPath = "test-documents/sample.pdf";
String outputPath = "test-output/annotated.pdf";
// Act
Annotator annotator = new Annotator(inputPath);
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setBox(new Rectangle(100, 100, 50, 50));
arrow.setMessage("Test annotation");
annotator.add(arrow);
annotator.save(outputPath);
annotator.dispose();
// Assert
assertTrue("Output file should exist", new File(outputPath).exists());
// Verify annotation was added
Annotator verifyAnnotator = new Annotator(outputPath);
List<AnnotationInfo> annotations = verifyAnnotator.get();
assertEquals("Should have one annotation", 1, annotations.size());
verifyAnnotator.dispose();
}
Entegrasyon testi
Aynı test paketini farklı boyutlardaki PDF’lerde (10 sayfa, 100 sayfa, 500 sayfa) ve farklı görüntüleyicilerde (Adobe Reader, Foxit, Chrome) çalıştırarak tutarlı renderlama garantileyin.
Sonuç
Artık GroupDocs.Annotation kullanarak Java PDF ok ek açıklamaları uygulamak için eksiksiz bir araç setine sahipsiniz. Şunu unutmayın:
Annotatornesnelerini zamanında imha edin.- Çeşitli PDF sürümleri ve boyutlarıyla test edin.
- Toplu işlerde ölçeklenirken performans ipuçlarını uygulayın.
- Yorumların anlamsal anlamına uygun şekilde okları stilize edin.
Sonraki adımlar: TextAnnotation, AreaAnnotation ve WatermarkAnnotation gibi diğer ek açıklama tiplerini keşfedin. Aynı başlatma ve imha desenleri geçerlidir, böylece tam özellikli bir belge iş birliği platformu oluşturabilirsiniz.
Sıkça sorulan sorular
Q: Parola korumalı PDF’lere ok ek açıklamaları ekleyebilir miyim?
A: Evet, Annotator örneğini oluştururken şifreyi sağlayın:
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Annotator annotator = new Annotator("protected.pdf", loadOptions);
Q: Birden fazla belgeyi verimli şekilde toplu işleme nasıl yaparım?
A: Belgeleri küçük partiler halinde işleyin, her dosya için tek bir Annotator yeniden kullanın ve her kaydın ardından dispose() çağırın:
for (String doc : documents) {
try (Annotator annotator = new Annotator(doc)) {
// Add annotations
annotator.save(doc.replace(".pdf", "_annotated.pdf"));
}
if (processedCount % 10 == 0) {
System.gc(); // Encourage garbage collection
}
}
Q: Bir belgede maksimum kaç ek açıklama olabilir?
A: GroupDocs kesin bir sınır koymaz, ancak pratik performans, 500‑sayfalık bir PDF’de yaklaşık 1.000 ek açıklamadan sonra düşer; bu durumda burada anlatılan bellek‑yönetim tekniklerini uygulamanız gerekir.
Q: Standart seçeneklerin ötesinde ok şekillerini özelleştirebilir miyim?
A: Kütüphane standart ok başları sağlar. Tamamen özel şekiller için birden fazla AreaAnnotation birleştirebilir veya vektör yollarını destekleyen grafik‑odaklı bir kütüphane kullanabilirsiniz.
Q: Farklı PDF koordinat sistemleriyle nasıl başa çıkılır?
A: GroupDocs, UI koordinatlarını (sol‑üst) PDF koordinatlarına (sol‑alt) otomatik dönüştürür. Eşleşme sorunları yaşarsanız, istemci tarafında ekstra bir dönüşüm katmanı uygulamadığınızdan emin olun.
// Get page info for coordinate calculations
PageInfo pageInfo = annotator.getDocument().getPages().get(pageNumber);
int pageHeight = pageInfo.getHeight();
// Adjust Y coordinate if needed
int adjustedY = pageHeight - originalY;
Q: Üretim kullanımı için lisans maliyeti nedir?
A: GroupDocs, Geliştirici, Site ve OEM lisansları sunar. Fiyatlar, geliştirici başına yılda $699‘dan başlar. En güncel rakamlar için GroupDocs pricing page’i ziyaret edin.
Q: Bunu Spring Boot uygulamalarıyla nasıl entegre ederim?
A: Ek açıklama mantığını kapsülleyen bir @Service bean’i oluşturun, kontrolcülere enjekte edin ve bir PDF akışı kabul edip ek açıklamalı PDF döndüren bir REST uç noktası sunun.
@Service
public class AnnotationService {
public void addArrowAnnotation(String inputPath, String outputPath,
int x, int y, String message) {
try (Annotator annotator = new Annotator(inputPath)) {
ArrowAnnotation arrow = new ArrowAnnotation();
arrow.setBox(new Rectangle(x, y, 50, 50));
arrow.setMessage(message);
annotator.add(arrow);
annotator.save(outputPath);
}
}
}
Q: PDF’lerden mevcut ok ek açıklamalarını çıkarabilir miyim?
A: Evet, bir Annotator örneğinde getAnnotations() metodunu çağırın ve sonuçları AnnotationType.Arrow ile filtreleyin.
Annotator annotator = new Annotator("document.pdf");
List<AnnotationInfo> annotations = annotator.get();
for (AnnotationInfo annotation : annotations) {
if (annotation instanceof ArrowAnnotation) {
ArrowAnnotation arrow = (ArrowAnnotation) annotation;
System.out.println("Arrow message: " + arrow.getMessage());
}
}
Ek kaynaklar
- Documentation: GroupDocs.Annotation for Java Documentation
- API reference: Complete API Reference
- Download latest version: GroupDocs Releases
- Purchase license: Buy GroupDocs License
- GroupDocs pricing page: GroupDocs pricing page
- Free trial: Download Free Trial
- Temporary license: Request Temporary License
- Community support: GroupDocs Forum
- Professional support: Ücretli lisanslarla öncelikli destek mevcuttur
Son Güncelleme: 2026-08-14
Tested With: GroupDocs.Annotation 25.2 for Java
Author: GroupDocs
public void processBatch(List<String> documents, int batchSize) {
for (int i = 0; i < documents.size(); i += batchSize) {
List<String> batch = documents.subList(i,
Math.min(i + batchSize, documents.size()));
processBatchInternal(batch);
// Allow GC between batches
System.gc();
Thread.sleep(100);
}
}
Runtime runtime = Runtime.getRuntime();
long memoryBefore = runtime.totalMemory() - runtime.freeMemory();
// Your annotation processing
long memoryAfter = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Memory used: " + (memoryAfter - memoryBefore) + " bytes");
java -Xmx4g -jar your-application.jar