Операторы потока контента
Это руководство показывает, как получать доступ к операторам потоков содержимого PDF и управлять ими с помощью ContentStreamParser и ContentStreamBuilder в Aspose.PDF FOSS для Java. Вы научитесь читать необработанные байты содержимого страницы и использовать парсер для проверки команд рисования.
Потоки содержимого
Содержимое страницы PDF кодируется как последовательность операторов в потоке содержимого. Каждый Page предоставляет доступ к своим операторам содержимого через свойство getContents().
ContentStreamParser
ContentStreamParser разбирает необработанные байты потока содержимого в объекты операторов, позволяя программно инспектировать команды рисования страницы. Передайте необработанные байты из page.getContents().toByteArray() конструктору парсера:
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 создает новые потоки содержимого для встраивания в Page. Используйте ContentStreamBuilder при программном построении содержимого страницы, а не при изменении существующего потока. После построения потока назначьте его обратно странице и сохраните документ.
Справочник операторов
Операторы потоков содержимого PDF определены в ISO 32000-1:2008, таблица A.1. Распространённые операторы включают текстовые операторы (BT, ET, Tf, Tj), операторы графического состояния (q, Q, cm) и операторы контуров (m, l, h, f, S).
Операторы потоков содержимого соответствуют спецификации PDF (ISO 32000-1:2008, §8). Используйте ContentStreamParser для перебора операторов в существующем потоке.
Доступ к необработанному содержимому страницы
Чтобы прочитать необработанные байты потока содержимого страницы, вызовите page.getContents().toByteArray(). Затем байты можно проанализировать, декодировать или передать в 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");
}