Операторы потока контента

Операторы потока контента

Это руководство показывает, как получать доступ к операторам потоков содержимого 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");
}

См. также:

 Русский