【问题标题】:PDFBox - Coordinate SystemPDFBox - 坐标系
【发布时间】:2011-02-02 09:31:58
【问题描述】:

我想完成以下事情。我有一组 PDF 文件,首先我想检查坐标系的原点。如果 pdf 坐标系的原点不是左上角 [通常原点在左下角],我想创建一个坐标在左上角的结果 PDF。我正在尝试使用 PDFBox [代码 sn-p 在下面] 来执行此操作,但是生成的 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();  

【问题讨论】:

  • 这个问题和iText有什么关系?
  • 如果有人可以建议使用 itext 的解决方案,那很好..

标签: java pdfbox coordinate-systems


【解决方案1】:

您正在创建一个空的、已转换的内容流。

您需要通过page.getContents() 获取现有内容,并将其包装在您的转换中。比如:

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

PS:对saveGraphicsState() 的调用没有对restoreGraphicsState() 的相应调用是不允许的。

哦,看起来“magicFunction...”被称为appendRawCommands()

【讨论】:

  • 马克,除了 javadocs,在哪里可以找到所有这些信息?您似乎对此有深入的了解。您是通过学习 PDF 规范来学习它的,还是有其他资源可以提供比他们的(pdfbox 的)少数“食谱”资源更实用的示例?
  • 多年阅读 PDF 规范并基于它编写软件。
猜你喜欢
  • 2012-01-20
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2020-01-10
  • 2018-02-15
相关资源
最近更新 更多