PDFBox - Система координат - PullRequest
3 голосов
/ 02 февраля 2011

Я бы хотел сделать следующее. У меня есть набор файлов PDF, во-первых, я хотел бы проверить происхождение системы координат. Если исходная точка системы координат для pdf находится не в верхнем левом углу [обычно это нижний левый нижний угол], я хотел бы создать результирующий PDF с координатами в верхнем левом углу. Я пытаюсь сделать это, используя PDFBox [фрагмент кода ниже], однако полученный PDF становится пустым, что я делаю неправильно. Я новичок в PDFBox, поэтому любая помощь в этом отношении очень ценится.

        // 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();  

1 Ответ

2 голосов
/ 03 февраля 2011

Вы создаете пустой, преобразованный поток контента.

Вам необходимо получить существующий контент через page.getContents() и обернуть его в своем преобразовании. Что-то вроде:

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

PS: вызов на saveGraphicsState() без соответствующего вызова на restoreGraphicsState() - это нет-нет.

Да, и похоже, что "magicFunction ..." называется appendRawCommands().

...