| categories |
|
|||||
|---|---|---|---|---|---|---|
| date | 2025-12-26 | |||||
| description | Naučte se, jak v Javě extrahovat metadata PDF, včetně typu souboru, počtu stránek a velikosti. Tento průvodce se zabývá zpracováním typu souboru PDF v Javě pomocí GroupDocs. | |||||
| keywords | Java document metadata extraction, extract PDF metadata Java, Java file information extraction, document properties Java API, PDF page count Java | |||||
| lastmod | 2025-12-26 | |||||
| linktitle | How to Extract PDF Metadata in Java with GroupDocs | |||||
| tags |
|
|||||
| title | Jak extrahovat metadata PDF v Javě pomocí GroupDocs | |||||
| type | docs | |||||
| url | /cs/java/document-information/groupdocs-annotation-java-document-info-extraction/ | |||||
| weight | 1 |
Už jste někdy potřebovali rychle získat základní informace ze stovek dokumentů? Nejste v tom sami. Ať už budujete systém pro správu dokumentů, zpracováváte právní soubory, nebo se jen snažíte uspořádat ten chaotický sdílený disk, jak extrahovat metadata PDF programově vám může ušetřit hodiny ruční práce. V tomto průvodci si ukážeme, jak pomocí Javy získat typ souboru, počet stránek a velikost — ideální pro každého, kdo potřebuje efektivně řešit výzvu pdf file type java.
- Jaká knihovna je nejlepší pro metadata PDF v Javě? GroupDocs.Annotation poskytuje jednoduché API pro extrahování metadat bez načítání celého obsahu.
- Potřebuji licenci? Bezplatná zkušební verze funguje pro vývoj; pro produkci je vyžadována plná licence.
- Mohu extrahovat metadata i z jiných formátů? Ano — GroupDocs podporuje Word, Excel a mnoho dalších.
- Jak rychlá je extrakce metadat? Obvykle milisekundy na soubor, protože čte jen informace z hlavičky.
- Je to bezpečné pro velké dávky? Ano, pokud používáte try‑with‑resources a vzory dávkového zpracování.
Metadata PDF zahrnují vlastnosti jako počet stránek, typ souboru, velikost, autora, datum vytvoření a jakákoli vlastní pole vložená do dokumentu. Extrahování těchto dat umožňuje aplikacím automaticky katalogizovat, vyhledávat a ověřovat soubory, aniž by je plně otevíraly.
- Systémy pro správu obsahu mohou automaticky označovat a indexovat soubory hned po jejich nahrání.
- Právní a compliance týmy mohou ověřovat vlastnosti dokumentů pro audity.
- Správa digitálních aktiv se zjednodušuje díky automatickému označování.
- Optimalizace výkonu zabraňuje načítání velkých PDF, když jsou potřeba jen informace z hlavičky.
- Java 8+ (doporučeno Java 11+)
- IDE dle vašeho výběru (IntelliJ, Eclipse, VS Code)
- Maven nebo Gradle pro závislosti
- Základní znalost práce se soubory v Javě
Přidejte repozitář a závislost do vašeho pom.xml:
<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>Tip: Zkontrolujte stránku vydání GroupDocs pro novější verze; novější vydání často přinášejí vylepšení výkonu.
Níže je podrobný průvodce krok za krokem. Kódové bloky jsou nezměněny oproti originálnímu tutoriálu, aby byla zachována funkčnost.
import com.groupdocs.annotation.Annotator;
import java.io.IOException;
String inputFile = "YOUR_DOCUMENT_DIRECTORY/document.pdf"; // Point this to your test file
try (final Annotator annotator = new Annotator(inputFile)) {
// Your metadata extraction code goes here
// The try-with-resources ensures proper cleanup
} catch (IOException e) {
System.err.println("Couldn't access the document: " + e.getMessage());
// Handle the error appropriately for your use case
}Proč používat try‑with‑resources? Automaticky uzavře Annotator, čímž zabraňuje únikům paměti — což je klíčové při zpracování mnoha souborů.
import com.groupdocs.annotation.IDocumentInfo;
try (final Annotator annotator = new Annotator(inputFile)) {
IDocumentInfo info = null;
try {
// This is where the magic happens
info = annotator.getDocument().getDocumentInfo();
if (info != null) {
System.out.println("Number of Pages: " + info.getPageCount());
System.out.println("File Type: " + info.getFileType());
System.out.println("Size: " + info.getSize() + " bytes");
// Convert bytes to more readable format
double sizeInMB = info.getSize() / (1024.0 * 1024.0);
System.out.printf("Size: %.2f MB%n", sizeInMB);
} else {
System.out.println("Couldn't extract document information");
}
} catch (IOException e) {
System.err.println("Error extracting metadata: " + e.getMessage());
}
}getDocumentInfo() čte jen hlavičku, takže i velké PDF jsou zpracovány rychle.
Pevně zakódované absolutní cesty selžou při přechodu do jiného prostředí. Používejte relativní cesty nebo proměnné prostředí:
String baseDir = System.getProperty("user.dir");
String inputFile = baseDir + "/documents/sample.pdf";Při zpracování velkých dávek vždy rychle uzavírejte zdroje a sledujte využití haldy. Zpracování souborů v menších částech zabraňuje OutOfMemoryError.
Zachytávejte konkrétní výjimky, abyste získali užitečnou diagnostiku:
try {
// metadata extraction code
} catch (IOException e) {
logger.error("Cannot access file: " + inputFile, e);
} catch (Exception e) {
logger.error("Unexpected error processing document", e);
}List<String> documentPaths = Arrays.asList("doc1.pdf", "doc2.docx", "doc3.xlsx");
for (String path : documentPaths) {
try (final Annotator annotator = new Annotator(path)) {
IDocumentInfo info = annotator.getDocument().getDocumentInfo();
// Process info immediately
processDocumentInfo(path, info);
} catch (Exception e) {
// Log error but continue with next document
logger.warn("Failed to process " + path + ": " + e.getMessage());
}
}Map<String, IDocumentInfo> metadataCache = new ConcurrentHashMap<>();
public IDocumentInfo getDocumentInfo(String filePath) {
return metadataCache.computeIfAbsent(filePath, path -> {
try (final Annotator annotator = new Annotator(path)) {
return annotator.getDocument().getDocumentInfo();
} catch (Exception e) {
logger.error("Failed to extract metadata for " + path, e);
return null;
}
});
}public class DocumentProcessor {
public DocumentMetadata processUploadedDocument(String filePath) {
try (final Annotator annotator = new Annotator(filePath)) {
IDocumentInfo info = annotator.getDocument().getDocumentInfo();
return new DocumentMetadata.Builder()
.pageCount(info.getPageCount())
.fileType(info.getFileType())
.sizeInBytes(info.getSize())
.processedDate(LocalDateTime.now())
.build();
} catch (Exception e) {
throw new DocumentProcessingException("Failed to process document", e);
}
}
}public void organizeDocumentsByType(List<String> filePaths) {
for (String path : filePaths) {
try (final Annotator annotator = new Annotator(path)) {
IDocumentInfo info = annotator.getDocument().getDocumentInfo();
String destinationFolder = "organized/" + info.getFileType().toLowerCase();
Files.createDirectories(Paths.get(destinationFolder));
Files.move(Paths.get(path),
Paths.get(destinationFolder, Paths.get(path).getFileName().toString()));
} catch (Exception e) {
logger.warn("Failed to organize file: " + path, e);
}
}
}public Optional<DocumentMetadata> extractMetadata(String filePath) {
try (final Annotator annotator = new Annotator(filePath)) {
IDocumentInfo info = annotator.getDocument().getDocumentInfo();
return Optional.of(new DocumentMetadata(info));
} catch (IOException e) {
logger.error("IO error processing " + filePath, e);
return Optional.empty();
} catch (Exception e) {
logger.error("Unexpected error processing " + filePath, e);
return Optional.empty();
}
}logger.info("Processing document: {} (Size: {} bytes)", filePath, fileSize);
long startTime = System.currentTimeMillis();
// ... metadata extraction code ...
long processingTime = System.currentTimeMillis() - startTime;
logger.info("Processed {} in {}ms", filePath, processingTime);# application.properties
document.processing.max-file-size=50MB
document.processing.timeout=30s
document.processing.batch-size=100- File Not Found: Ověřte cestu, oprávnění a že žádný jiný proces soubor neblokuje.
- OutOfMemoryError: Zvyšte haldu JVM (
-Xmx2g) nebo zpracovávejte soubory v menších dávkách. - Unsupported Format: Zkontrolujte seznam podporovaných formátů GroupDocs; pro neznámé typy použijte Apache Tika.
Q: Jak mohu zpracovat PDF chráněná heslem?
A: Při vytváření Annotator předávejte objekt LoadOptions s heslem.
Q: Je extrakce metadat rychlá u velkých PDF?
A: Ano — protože se čte jen informace z hlavičky, i PDF s několika stovkami stránek skončí během milisekund.
Q: Mohu extrahovat vlastní vlastnosti?
A: Použijte info.getCustomProperties() k získání uživatelem definovaných polí metadat.
Q: Je bezpečné zpracovávat soubory z nedůvěryhodných zdrojů?
A: Ověřte velikost souboru, typ a zvažte sandboxování procesu extrakce.
Q: Co když je dokument poškozený?
A: GroupDocs se s menšími poškozeními zachází elegantně; v závažných případech zachyťte výjimky a soubor přeskočte.
Nyní máte kompletní, připravený přístup pro jak extrahovat metadata PDF v Javě. Začněte jednoduchým příkladem Annotator, poté rozšiřujte pomocí dávkového zpracování, cachování a robustního ošetření chyb. Vzory zde ukázané vám dobře poslouží při budování větších pipeline pro zpracování dokumentů.
Resources and Links
- Dokumentace: GroupDocs.Annotation Java Docs
- API Reference: Java API Reference
- Ke stažení: GroupDocs Releases
- Možnosti nákupu: Buy GroupDocs License
- Bezplatná zkušební verze: Try GroupDocs Free
- Vývojová licence: Get Temporary License
- Komunitní podpora: GroupDocs Forum
Last Updated: 2025-12-26
Tested With: GroupDocs.Annotation 25.2
Author: GroupDocs