Operatori di flusso di contenuto
Questa guida mostra come accedere e manipolare gli operatori del flusso di contenuto PDF usando ContentStreamParser e ContentStreamBuilder in Aspose.PDF FOSS per Java. Imparerai a leggere i byte grezzi del contenuto della pagina e a utilizzare il parser per ispezionare i comandi di disegno.
Flussi di contenuto
Il contenuto della pagina PDF è codificato come una sequenza di operatori in un flusso di contenuto. Ogni Page fornisce l’accesso ai propri operatori di contenuto tramite la proprietà getContents().
ContentStreamParser
ContentStreamParser analizza i byte grezzi del flusso di contenuto in oggetti operatore, consentendo l’ispezione programmata dei comandi di disegno della pagina. Passa i byte grezzi da page.getContents().toByteArray() al costruttore del parser:
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 crea nuovi flussi di contenuto da incorporare in un Page. Usa ContentStreamBuilder quando costruisci il contenuto della pagina programmaticamente anziché modificare un flusso esistente. Dopo aver creato il flusso, assegnalo nuovamente alla pagina e salva il documento.
Riferimento agli operatori
Gli operatori del flusso di contenuti PDF sono definiti in ISO 32000-1:2008, Tabella A.1. Gli operatori comuni includono operatori di testo (BT, ET, Tf, Tj), operatori di stato grafico (q, Q, cm) e operatori di percorso (m, l, h, f, S).
Gli operatori del flusso di contenuti seguono la specifica PDF (ISO 32000-1:2008, §8). Usa ContentStreamParser per iterare sugli operatori in un flusso esistente.
Accesso al contenuto grezzo della pagina
Per leggere i byte grezzi di un flusso di contenuti di pagina, chiama page.getContents().toByteArray(). I byte possono quindi essere ispezionati, decodificati o passati a 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");
}