Java PDF nyíl annotációk – teljes útmutató és legjobb gyakorlatok (2025)
Bevezetés
Valaha is nehézséget okozott, hogy a csapatod a PDF dokumentumok konkrét részeire összpontosítson az átnézések során? Nem vagy egyedül. Legyen szó technikai dokumentációról, jogi szerződésekről vagy projekt specifikációkról, a pontos területek kiemelése a megbeszéléshez frusztráló lehet a megfelelő eszközök nélkül.
Itt a megoldás: Java PDF nyíl annotációk a GroupDocs.Annotation API segítségével. Ez a hatékony megközelítés lehetővé teszi, hogy programozottan add arrow to pdf fájlokhoz nyilakat adj hozzá, így a közös munka zökkenőmentes és professzionális lesz. Próbaverziót a GroupDocs ideiglenes licenc oldalán szerezhetsz be.
Gyors válaszok
- Melyik könyvtár teszi lehetővé, hogy add arrow to pdf Java‑ban? GroupDocs.Annotation for Java.
- Szükség van licencre a termeléshez? Igen, a kereskedelmi licenc eltávolítja a vízjeleket és feloldja a teljes funkciókészletet. A részletekért lásd a GroupDocs pricing page oldalt.
- Melyik Java‑verzió ajánlott? A JDK 11 a legjobb teljesítményt és hosszú távú támogatást nyújtja.
- Hozzáadhatok több nyilat egy dokumentumhoz? Természetesen – egyszerűen hozz létre több
ArrowAnnotationobjektumot, és add hozzá ugyanahhoz aAnnotator‑hez. - Támogatott a kötegelt feldolgozás? Igen, ciklusba teheted a dokumentumokat, és újra felhasználhatod ugyanazt a
Annotatorpéldányt a megfelelő felszabadítás után.
Mi az add arrow to pdf?
Az add arrow to pdf művelet egy irányt mutató jelölőt rajzol a PDF oldalra, hogy kiemeljen vagy rámutasson egy adott területre. A nyíl annotációk PDF objektumként tárolódnak, így bármely szabványos nézőben láthatóak maradnak, és később szerkeszthetők vagy megválaszolhatók.
Miért válaszd a GroupDocs.Annotation‑t Java PDF nyíl annotációkhoz?
A GroupDocs.Annotation gazdag annotációtípus‑készletet, vállalati szintű támogatást és egy egyszerű Java API‑t kínál, amely csökkenti a felesleges kódot. Alternatívákkal összehasonlítva 50+ bemeneti és kimeneti formátumot támogat, és 500 oldalas PDF‑eket képes kezelni 200 MB alatti heap memória felhasználással, köszönhetően a streaming architektúrának.
Előfeltételek – amire ténylegesen szükséged van
Szükséges könyvtárak és függőségek
Először add hozzá a GroupDocs.Annotation Maven függőséget. Az alábbi kódrészlet pontosan a szükséges koordinátákat tartalmazza; cseréld le a verzióhelyettesítőt a legújabb stabil kiadásra.
<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 tipp: Nézd meg a GroupDocs kiadási oldalt a legfrissebb verziószámért. Az új kiadások gyakran tartalmaznak teljesítményjavításokat és további annotációstílusokat.
Környezet beállítása, ami nem okoz fejfájást
- JDK 8 vagy újabb – A JDK 11 ajánlott a fejlettebb szemétgyűjtő és modulrendszer miatt.
- Maven 3.6+ – A régebbi Maven verziók nehezen kezelhetik a transzitiv függőségeket.
- IDE – Az IntelliJ IDEA vagy az Eclipse a legjobb hibakeresési élményt nyújtja Java könyvtárakhoz.
- Memória – Legalább 2 GB heap memóriát allokálj, ha 100 oldalnál nagyobb PDF‑ekkel dolgozol.
Tudás‑előfeltételek (légy őszinte magaddal)
A következőkkel kell jártasnak lenned:
- Alapvető Java gyűjtemények és kivételkezelés.
- Maven függőségkezelés.
- Alap fájl‑I/O (bináris adatfolyamok olvasása és írása).
Ha bármelyik terület bizonytalan, érdemes egy gyors frissítést végezni, mielőtt belemerülnél az annotációs kódba.
A GroupDocs.Annotation beállítása – a helyes módon
1. lépés: Maven konfiguráció (hibakereséssel)
Add hozzá a korábban bemutatott tárolót és függőséget. Ha a Maven nem tudja feloldani a csomagot, ellenőrizd, hogy a GroupDocs nyilvános tárolója szerepel‑e a pom.xml‑ben:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
2. lépés: Licenc beállítása (kritikus a termeléshez)
Fejlesztés során használhatsz ideiglenes próbaverzió licencet:
// For evaluation purposes
License license = new License();
// license.setLicense("path/to/license.lic"); // Comment this out for trial
Valóság ellenőrzése: A próba licenc minden mentett PDF‑hez látható vízjelet ad. A termelési licenc eltávolítja ezt a vízjelet, és feloldja a teljes annotációs funkciókészletet.
3. lépés: Alap inicializációs minta
Az Annotator az elsődleges osztály egy PDF dokumentum betöltéséhez és annotációk alkalmazásához.
Mindig tedd az Annotator‑t egy try‑finally blokkba, hogy az alatta lévő erőforrások gyorsan felszabaduljanak:
Annotator annotator = null;
try {
annotator = new Annotator("YOUR_DOCUMENT_DIRECTORY/input.pdf");
// Your annotation code here
} finally {
if (annotator != null) {
annotator.dispose();
}
}
Miért a try‑finally blokk? A GroupDocs natív memóriát foglal a PDF‑elemzéshez; ha nem szabadítod fel az Annotator‑t, memória‑szivárgás léphet fel, különösen nagy mennyiségű dokumentum kötegelt feldolgozásakor.
Teljes megvalósítási útmutató – nulláról a termelésig
A nyíl annotációk megértése kontextusban
A nyíl annotációk vizuális jelzések a dokumentum‑áttekintési munkafolyamatokban. Tipikus felhasználási esetek:
- Áttekintési visszajelzés – „Ez a pont tisztázásra szorul.”
- Referencia hivatkozás – „Lásd a 12. oldalon lévő diagramot.”
- Folyamatirányítás – „Itt kezdődjön az audit.”
- Hiba kiemelése – „Lehetséges elütés ebben a bekezdésben.”
Az annotációs UI tervezése ezek köré segít a felhasználóknak gyorsabban elfogadni az eszközt.
1. lépés: Annotációs válaszok építése (okos módon)
A válaszok egy statikus nyilat interaktív megbeszélési ponttá alakítanak. Az első alkalommal, amikor a Reply osztályt említed, határozd meg röviden:
Definíciós horgony: Reply egy szöveges megjegyzést képvisel, amely egy annotációhoz kapcsolódik, és tárolja a szerző információit és az időbélyeget.
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 tipp: Tárold a felhasználó azonosítóját és szerepkörét a válasz metaadataiban; ez később egyszerűvé teszi a kommentek szűrését.
2. lépés: A nyíl annotáció létrehozása (valós‑világi szempontokkal)
Definíciós horgony: ArrowAnnotation a GroupDocs objektum, amely egy irányt mutató nyilat jelenít meg egy PDF oldalon.
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 kulcsparaméterek magyarázata:
- Rectangle coordinates –
(x, y, width, height), ahol(x, y)a keret bal‑felső sarka. - PenColor – ARGB egész szám; a
65535élénk kéket eredményez. Egy online konverterrel testreszabhatod a színeket. - PenStyle – Lehetőségek:
DOT,DASH,SOLID,DASHDOT,DASHDOTDOT. A legtöbb esetben aSOLIDa megfelelő választás. - Opacity –
0.0(átlátszó) és1.0(átlátszatlan) között mozog. A0.7érték egyensúlyt teremt a láthatóság és a háttér tartalom olvashatósága között.
3. lépés: Hozzáadás és mentés (hibakezeléssel)
Definíciós horgony: Annotator.save menti az összes függőben lévő annotációs változást a cél‑PDF fájlba.
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();
}
Mindig kezeld az IOException‑t és az AnnotationException‑t, hogy a sérült fájlok, érvénytelen útvonalak vagy jogosultsági problémák megfelelően legyenek kezelve. A stack trace naplózása segít a termelési hibák diagnosztizálásában.
Gyakori buktatók és elkerülési módok
Probléma 1: A koordináták nem egyeznek a várt pozícióval
Probléma: A nyíl eltolódik a kívánt helytől.
Megoldás: A PDF koordináta‑origó bal‑alsó, míg a GroupDocs a bal‑felsőt várja. Alakítsd át a UI koordinátákat ennek megfelelően, vagy használd a beépített convertToPdfCoordinates segédfüggvényt:
// If arrows appear in wrong positions, try adjusting the Y coordinate
int adjustedY = pageHeight - originalY - annotationHeight;
arrow.setBox(new Rectangle(x, adjustedY, width, height));
Probléma 2: Az annotációk eltűnnek a mentés után
Probléma: A nyilak megjelennek a feldolgozás során, de hiányoznak a végleges PDF‑ben.
Megoldás: Ez szinte mindig licencproblémára utal. Győződj meg róla, hogy a licencfájl betöltésre kerül, mielőtt bármilyen Annotator példányt létrehoznál:
License license = new License();
try {
license.setLicense("GroupDocs.Annotation.lic");
} catch (Exception e) {
System.out.println("License not found, using trial mode");
}
Probléma 3: Memória‑szivárgások kötegelt feldolgozásnál
Probléma: A JVM kifogy a heap‑memóriából, amikor több tucat PDF‑et dolgozol fel.
Megoldás: Minden Annotator példányt szabadíts fel a dokumentum befejezése után, és dolgozz kis kötegekben, hogy a memóriahasználat kiszámítható maradjon:
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();
}
}
Haladó testreszabási technikák
Dinamikus nyílpozicionálás
Ha a nyilaknak a webes UI‑ban történő kattintásokra kell reagálniuk, számold ki a téglalapot a kliensoldalon, és küldd a koordinátákat a backendnek. A backend ezután példányosít egy ArrowAnnotation‑t a kapott értékekkel.
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;
}
Nyilak stílusának testreszabása különböző felhasználási esetekhez
Változtathatod a PenColor‑t és a PenStyle‑t a jelentés közvetítésére – például piros szaggatott nyilak kritikus problémákhoz, zöld szilárd nyilak jóváhagyott szakaszokhoz.
// 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;
}
Valós példák a megvalósításhoz
Szenárió 1: Dokumentum‑áttekintő rendszer
Több felhasználós áttekintő portálban minden reviewer létrehoz egy ArrowAnnotation‑t és csatol egy Reply‑t. A rendszer a válaszokat relációs adatbázisban tárolja, lehetővé téve a szálas megbeszélést minden annotációhoz.
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();
}
}
Szenárió 2: Automatikus hibafelismerés
Egy elemző motor PDF‑eket vizsgál a megfelelőségi szabálysértésekért, és automatikusan piros nyilakat helyez el a problémás klauzulákra mutatva.
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;
}
Teljesítményoptimalizálási tippek
Memória‑kezelési legjobb gyakorlatok
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‑teljesítmény szempontok
- Használd ugyanazt a `Color` példányt minden nyílhoz, hogy elkerüld a felesleges objektum‑létrehozást.
- Kerüld a beágyazott ciklusokat, amelyek ismételten azonos `PenStyle` objektumokat hoznak létre.
- Ha sok független PDF‑ed van, fontold meg egy szálkészlet használatát, de korlátozd a párhuzamos `Annotator` példányok számát a memóriafogyasztás kontrollálása érdekében.
## Hibaelhárítási útmutató – valós problémák megoldásai
### Probléma: Az annotációk nem láthatók az Adobe Readerben
**Tünetek**: A nyilak megjelennek a saját néződben, de nem jelennek meg az Adobe Acrobatban.
**Megoldások**:
1. Mentsd a PDF‑et PDF/A‑1b kompatibilitással, hogy a maximális nézőkompatibilitás biztosított legyen:
```java
// Try different save options if available
SaveOptions saveOptions = new SaveOptions();
saveOptions.setAnnotationType(AnnotationType.All);
annotator.save(outputPath, saveOptions);
- Ellenőrizd, hogy a PDF verzió legalább 1.7‑es; a régebbi verziók elhagyhatják az újabb annotációtípusokat.
Probléma: Gyenge teljesítmény nagy PDF‑eknél
Tünetek: Az alkalmazás lefagy vagy nem reagál, amikor 200 oldalas vagy nagyobb PDF‑eket kezel.
Megoldások:
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. Növeld a JVM heap‑et (`-Xmx4g`) nagyon nagy dokumentumok esetén.
### Probléma: Színmegjelenítési problémák
**Tünetek**: A nyíl szürke vagy teljesen átlátszó.
**Megoldás**: Definiáld a színt ARGB formátumban, és győződj meg róla, hogy a PDF színterét **DeviceRGB**‑re állítottad:
```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;
}
A megvalósítás tesztelése
Egységtesztelés nyíl annotációkhoz
Egy szilárd egységteszt betölt egy mintapDF‑et, hozzáad egy ArrowAnnotation‑t, elmenti a fájlt, majd újra megnyitja, hogy ellenőrizze az annotációk számát és tulajdonságait:
@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();
}
Integrációs tesztelés
Futtasd ugyanazt a tesztkészletet különböző méretű PDF‑ekkel (10 oldal, 100 oldal, 500 oldal) és különböző nézőkkel (Adobe Reader, Foxit, Chrome), hogy garantáld a konzisztens megjelenítést.
Következtetés
Most már teljes eszköztárral rendelkezel a Java PDF nyíl annotációk megvalósításához a GroupDocs.Annotation segítségével. Ne feledd:
- Szabadítsd fel az
Annotatorobjektumokat időben. - Teszteld különböző PDF verziókkal és méretekkel.
- Alkalmazd a teljesítmény‑tippeket, ha kötegelt feladatokra skálázol.
- Stílusozd a nyilakat a megjegyzés szemi‑értelmének megfelelően.
Következő lépések: fedezd fel a többi annotációtípust, például a TextAnnotation, AreaAnnotation és WatermarkAnnotation. Ugyanazok az inicializációs és felszabadítási minták alkalmazhatók, így egy teljes funkcionalitású dokumentum‑közösmunka platformot építhetsz.
Gyakran ismételt kérdések
Q: Hozzáadhatok nyíl annotációkat jelszó‑védett PDF‑ekhez?
A: Igen, add meg a jelszót az Annotator példány létrehozásakor:
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Annotator annotator = new Annotator("protected.pdf", loadOptions);
Q: Hogyan tudok több dokumentumot hatékonyan kötegelt feldolgozni?
A: Dolgozz kis kötegekben, használd újra ugyanazt az Annotator‑t fájlonként, és a mentés után hívd meg a dispose()‑t:
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: Mi a maximális annotációszám egy dokumentumban?
A: A GroupDocs nem szab szigorú korlátot, de a gyakorlati teljesítmény körülbelül 1 000 annotáció után romlik egy 500 oldalas PDF‑nél, hacsak nem alkalmazod a fent leírt memória‑kezelési technikákat.
Q: Testreszabhatom a nyíl formákat a szabványos opciókon túl?
A: A könyvtár szabványos nyílfejeket biztosít. Teljesen egyedi formákhoz kombinálhatsz több AreaAnnotation objektumot, vagy egy vektorgrafikára fókuszáló könyvtárra válthatsz, amely támogatja a vektor‑útvonalakat.
Q: Hogyan kezelem a különböző PDF koordináta‑rendszereket?
A: A GroupDocs automatikusan konvertál a UI bal‑felső koordináták és a PDF bal‑alsó koordinátái között. Ha eltéréseket tapasztalsz, ellenőrizd, hogy nem alkalmazol-e extra transzformációs réteget a kliensoldalon.
// 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: Mennyibe kerül a licenc a termelési használathoz?
A: A GroupDocs Developer, Site és OEM licenceket kínál. Az árak 699 $‑tól indulnak fejlesztői ülésenként évente. Látogasd meg a GroupDocs pricing page‑t a legfrissebb árakért.
Q: Hogyan integráljam ezt Spring Boot alkalmazásokba?
A: Hozz létre egy @Service bean‑t, amely magába foglalja az annotációs logikát, injektáld a kontrollereidbe, és exponálj egy REST végpontot, amely PDF‑streamet fogad és visszaadja a annotált PDF‑et.
@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: Kinyerhetem a meglévő nyíl annotációkat PDF‑ekből?
A: Igen, hívd a getAnnotations() metódust egy Annotator példányon, és szűrd a AnnotationType.Arrow típusú eredményeket.
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());
}
}
További források
- Dokumentáció: GroupDocs.Annotation for Java Documentation
- API referencia: Complete API Reference
- Legújabb verzió letöltése: GroupDocs Releases
- Licenc vásárlása: Buy GroupDocs License
- GroupDocs pricing page: GroupDocs pricing page
- Ingyenes próba: Download Free Trial
- Ideiglenes licenc: Request Temporary License
- Közösségi támogatás: GroupDocs Forum
- Professzionális támogatás: Elérhető fizetett licencekkel, prioritásos segítségnyújtással
Utoljára frissítve: 2026-08-14
Tesztelve: GroupDocs.Annotation 25.2 for Java
Szerző: 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