PDFBOX - Sistema de coordenadas
-
28-10-2019 - |
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();
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()
.