Operatory strumienia treści
Ten przewodnik pokazuje, jak uzyskać dostęp i manipulować operatorami strumieni treści PDF przy użyciu ContentStreamParser i ContentStreamBuilder w Aspose.PDF FOSS dla Java. Nauczysz się odczytywać surowe bajty zawartości strony i używać parsera do przeglądania poleceń rysowania.
Strumienie treści
Zawartość strony PDF jest kodowana jako sekwencja operatorów w strumieniu treści. Każdy Page zapewnia dostęp do swoich operatorów treści poprzez właściwość getContents().
ContentStreamParser
ContentStreamParser analizuje surowe bajty strumienia treści, przekształcając je w obiekty operatorów, umożliwiając programowe przeglądanie poleceń rysowania strony. Przekaż surowe bajty z page.getContents().toByteArray() do konstruktora parsera:
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 tworzy nowe strumienie treści do osadzenia w Page. Użyj ContentStreamBuilder, gdy tworzysz zawartość strony programowo, zamiast modyfikować istniejący strumień. Po zbudowaniu strumienia, przypisz go z powrotem do strony i zapisz dokument.
Referencja operatorów
Operatory strumieni zawartości PDF są zdefiniowane w ISO 32000-1:2008, tabela A.1. Typowe operatory obejmują operatory tekstu (BT, ET, Tf, Tj), operatory stanu graficznego (q, Q, cm) oraz operatory ścieżki (m, l, h, f, S).
Operatory strumieni zawartości są zgodne ze specyfikacją PDF (ISO 32000-1:2008, §8). Użyj ContentStreamParser, aby iterować po operatorach w istniejącym strumieniu.
Dostęp do surowej zawartości strony
Aby odczytać surowe bajty strumienia zawartości strony, wywołaj page.getContents().toByteArray(). Bajty można następnie przeanalizować, zdekodować lub przekazać 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");
}