Pregunta

Me gustaría lograr lo siguiente. Tengo un conjunto de archivos PDF, primero me gustaría verificar el origen del sistema de coordenadas. Si el origen del sistema de coordenadas para el PDF no es superior a la izquierda [generalmente el origen es inferior a la izquierda], me gustaría crear un PDF resultante con coordenadas en la esquina superior izquierda. Estoy tratando de hacer esto usando PDFBox [el fragmento de código está a continuación], sin embargo, el PDF resultante está en blanco, lo que estoy haciendo mal. Soy nuevo en PDFBox, por lo tanto, se agradece mucho cualquier ayuda en este sentido.

        // 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();  
¿Fue útil?

Solución

Estás creando un flujo de contenido vacío, transformado.

Necesita obtener el contenido existente a través de page.getContents(), y envuélvalo en tu transformación. Algo como:

contentStream.conactenate2CTM(...);
contentStream.magicFunctionThatSucksUpTheExistingPageContent( page.getContents() );
contentStream.close();

PD: una llamada a saveGraphicsState() sin una llamada correspondiente a restoreGraphicsState() es un no-no.

Oh y parece "mágico ..." se llama appendRawCommands().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top