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();  
È stato utile?

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().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top