PDFBox - Sistema di coordinate
-
28-10-2019 - |
Domanda
Vorrei realizzare la cosa seguente. Ho una serie di file PDF, prima vorrei controllare l'origine del sistema di coordinate. Se l'origine del sistema di coordinate per il PDF non è in alto a sinistra [di solito l'origine è inferiore a sinistra], vorrei creare un PDF risultante con coordinate in alto a sinistra. Sto provando a farlo usando PDFBox [lo snippet di codice è di seguito], tuttavia il PDF risultante sta diventando vuoto, cosa sto facendo di sbagliato. Sono nuovo in PDFBox, quindi qualsiasi aiuto in questo senso è molto apprezzato.
// loading the existing doc
PDDocument doc = PDDocument.load("C:\\Users\\test\\workspace\\example1.pdf");
List allPages = doc.getDocumentCatalog().getAllPages();
PDPageContentStream contentStream = null;
for( int i=0; i<allPages.size(); i++ )
{
PDPage page = (PDPage)allPages.get( i );
contentStream = new PDPageContentStream(doc, page);
contentStream.concatenate2CTM(1f, 0f, 0f, -1f, 0f, page.findMediaBox().getHeight());
contentStream.saveGraphicsState();
contentStream.close();
}
doc.save("C:\\Users\\test\\workspace\\example2.pdf");
doc.close();
Soluzione
Stai creando un flusso di contenuti vuoto, trasformato.
Devi ottenere il contenuto esistente tramite page.getContents()
, e avvolgilo nella tua trasformazione. Qualcosa di simile a:
contentStream.conactenate2CTM(...);
contentStream.magicFunctionThatSucksUpTheExistingPageContent( page.getContents() );
contentStream.close();
PS: una chiamata a saveGraphicsState()
senza una chiamata corrispondente a restoreGraphicsState()
è un no-no.
Oh e sembra "Magicfunction ..." si chiama appendRawCommands()
.