Operátory obsahového proudu
Tento průvodce ukazuje, jak přistupovat k operátorům proudu obsahu PDF a manipulovat s nimi pomocí ContentStreamParser a ContentStreamBuilder v Aspose.PDF FOSS pro Java. Naučíte se číst surové bajty obsahu stránky a použít parser k inspekci kreslících příkazů.
Proudy obsahu
Obsah stránky PDF je kódován jako sekvence operátorů v proudu obsahu. Každý Page poskytuje přístup k jeho operátorům obsahu prostřednictvím vlastnosti getContents().
ContentStreamParser
ContentStreamParser parsuje surové bajty proudu obsahu do objektů operátorů, což umožňuje programovou inspekci kreslících příkazů stránky. Předávejte surové bajty z page.getContents().toByteArray() konstruktoru parseru:
try (Document doc = new Document("input.pdf")) {
PageCollection pages = doc.getPages();
Page page = pages.get(1);
byte[] contentBytes = page.getContents().toByteArray();
ContentStreamParser parser = new ContentStreamParser(contentBytes);
// Iterate over parsed operators
}ContentStreamBuilder
ContentStreamBuilder vytváří nové proudy obsahu pro vložení do Page. Použijte ContentStreamBuilder při programovém sestavování obsahu stránky místo úpravy existujícího proudu. Po vytvoření proudu jej přiřaďte zpět ke stránce a uložte dokument.
Reference operátorů
Operátory proudu obsahu PDF jsou definovány v ISO 32000-1:2008, tabulka A.1. Mezi běžné operátory patří textové operátory (BT, ET, Tf, Tj), operátory grafického stavu (q, Q, cm) a operátory cesty (m, l, h, f, S).
Operátory proudu obsahu se řídí specifikací PDF (ISO 32000-1:2008, §8). Použijte ContentStreamParser k iteraci přes operátory v existujícím proudu.
Přístup k surovému obsahu stránky
Pro načtení surových bajtů proudu obsahu stránky zavolejte page.getContents().toByteArray(). Tyto bajty pak lze zkontrolovat, dekódovat nebo předat do ContentStreamParser:
try (Document doc = new Document("input.pdf")) {
PageCollection pages = doc.getPages();
Page page = pages.get(1);
byte[] contentBytes = page.getContents().toByteArray();
System.out.println("Content stream size: " + contentBytes.length + " bytes");
}