当前位置: 首页 > 知识库问答 >
问题:

如何翻译PDPage的x、y原点?

满伟彦
2023-03-14

实际上,我试图增加PDPage对象的cropbox。好吧,没有挑战。但页面内容仍保留在CropBox的左下角。我要它集中在新的cropbox空间。

我知道所有的内容是绝对定位在PDF。所以我的问题是:有没有一种方法使用PDFBox来翻译我的PDPage的原点(x,y)或者内容元素?

问候
汉斯

共有1个答案

汤枫涟
2023-03-14

第一种方法是简单地更改裁剪框,如下所示:

    PDDocument document = PDDocument.load(new File("data/test.pdf"));
    PDDocumentCatalog catalog = document.getDocumentCatalog();
    @SuppressWarnings("unchecked")
    List<PDPage> pages = catalog.getAllPages();
    float expand = 72;

    for (PDPage page : pages)
    {
        PDRectangle cropBox = page.findCropBox();
        PDRectangle newCropBox = new PDRectangle();
        newCropBox.setLowerLeftX(cropBox.getLowerLeftX() - expand);
        newCropBox.setLowerLeftY(cropBox.getLowerLeftY() - expand);
        newCropBox.setUpperRightX(cropBox.getUpperRightX() + expand);
        newCropBox.setUpperRightY(cropBox.getUpperRightY() + expand);
        page.setCropBox(newCropBox);
    }

    document.save("data/out/test-expand-crop-simple.pdf");

但是,这只在某些时候起作用,因为根据规范ISO 32000-1第14.11.2节的页面边界

剪裁盒、放血盒、修剪盒和艺术盒通常不得延伸到介质盒的边界之外。如果是,它们将有效地减少到它们与介质框的交集。

    PDDocument document = PDDocument.load(new File("data/test.pdf"));
    PDDocumentCatalog catalog = document.getDocumentCatalog();
    @SuppressWarnings("unchecked")
    List<PDPage> pages = catalog.getAllPages();
    float expand = 72;

    for (PDPage page : pages)
    {
        PDRectangle cropBox = page.findCropBox();
        PDRectangle newCropBox = new PDRectangle();
        newCropBox.setLowerLeftX(cropBox.getLowerLeftX() - expand);
        newCropBox.setLowerLeftY(cropBox.getLowerLeftY() - expand);
        newCropBox.setUpperRightX(cropBox.getUpperRightX() + expand);
        newCropBox.setUpperRightY(cropBox.getUpperRightY() + expand);
        page.setCropBox(newCropBox);

        PDRectangle mediaBox = page.findMediaBox();
        PDRectangle newMediaBox = new PDRectangle();
        newMediaBox.setLowerLeftX(mediaBox.getLowerLeftX() - expand);
        newMediaBox.setLowerLeftY(mediaBox.getLowerLeftY() - expand);
        newMediaBox.setUpperRightX(mediaBox.getUpperRightX() + expand);
        newMediaBox.setUpperRightY(mediaBox.getUpperRightY() + expand);
        page.setMediaBox(newMediaBox);
    }

    document.save("data/out/test-expand-crop-and-media.pdf");
 类似资料:
  • 问题内容: 几年前我有这个面试问题,但是我还没有找到答案。 做无限循环的x和y应该是什么? 我们试着用,, VS 。 问题答案: 您需要两个可比较,具有相同值但代表不同实例的变量,例如: 和都为true,因为取消了装箱,但是实例相等性为false。 请注意,它也可以与一起使用,并且任何值(不仅是0)都可以使用。 您还可以使用JVM的复杂性-它们通常仅缓存最多127个整数,因此也可以使用: (但是1

  • 本书的完整源代码可在 {{ book.sourceUrl }} 获得。 请 Fork 整个库。 然后,将库提取至你的电脑上。你需要了解如何通过 Git 来实现这一过程。 阅读 GitBook 文档 ,尤其是 Markdown 章节。 开始编辑 .md 文件,将其翻译至你的本地语言。 在 GitBook.com 上注册帐号,创建一本书籍,然后你便可以呈现出的精美网站,还包括 PDF、EPUB 等格式

  • 问题内容: 我用来创建我的 PDF 文件。 我想使用在这里找到的方法将文本放置在文档中的某个特定位置:itext绝对放置文本。 但是,我不知道在哪里可以找到页面坐标系的原点。 ???? 这个起源在哪里? 问题答案: 页面的尺寸(又称页面边界)在页面字典中定义: :物理介质(页面)的边界。该值是必需的,因此您可以在每个PDF中找到它。 :显示或打印时可见的区域。的是等于或小于较小。该值是可选的;如果

  • 我不是在问AffineTransform是如何工作的,而是如何使用它的翻译方法。 我多次阅读API,但仍然不明白它是如何工作的。 公共空转换(双tx,双ty) 将此转换与翻译转换连接起来。这相当于调用concatenate(T),其中T是由以下矩阵表示的AffineTransform: 问题:

  • 下面的问题实际上与SO上的这个问题非常相似,MKL已经完美地回答了这个问题。简短的回答:要么使用左下原点,要么将你的坐标转换为这些。有一个变通办法,但那是一团糟。 我想创建一个左上坐标为0,0,右下坐标为210,297的PDF。像y=297-y这样的计算方法似乎有点混乱。 此问题与SO上的此问题类似,但参考了PDFBox2,其中所提供的解决方案不起作用。