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

itext7的绝对位置

仰成天
2023-03-14

我在iText7中添加一个相对于页面大小具有绝对位置的图像有一个问题。

在itext5中,我使用了下面的代码来确定图像相对于要将其添加到的页面的位置

for (int i = 0; i < numberOfPages;) {
    page = copy.getImportedPage(reader, ++i);

    if(page.getBoundingBox().getWidth() != 595.00f) {
        img.setAbsolutePosition(page.getBoundingBox().getWidth() - (595-img.getAbsoluteX()),img.getAbsoluteY());
    }
    if(page.getBoundingBox().getHeight() != 842.00f) {
        img.setAbsolutePosition(img.getAbsoluteX(), page.getBoundingBox().getHeight() - (842-img.getAbsoluteY()));
    }

    stamp = copy.createPageStamp(page);
    stamp.getOverContent().addImage(img);
    stamp.alterContents();
    copy.addPage(page);
}

现在,对于itext7,我正在使用

public static void addImageToPDF(String inputFilePath, Image img) throws IOException, DocumentException {    

    File inFile = new File(inputFilePath);
    File outFile = new File(inputFilePath + "_image.pdf");

    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inFile), new PdfWriter(outFile));

    Document document = new Document(pdfDoc);
    int numberOfPages = pdfDoc.getNumberOfPages();

    Rectangle pageSize;

    // Loop over the pages of document
    for (int i = 1; i <= numberOfPages; i++) {

        pageSize = pdfDoc.getPage(i).getPageSize();

        if(pageSize.getWidth() != 595.00f) {
            img.setFixedPosition(pageSize.getWidth() - (595-img.getImageWidth()),img.getImageHeight());
        }
        if(pageSize.getHeight() != 842.00f) {
            img.setFixedPosition(img.getImageWidth(), pageSize.getHeight() - (842-img.getImageHeight()));
        }

        document.add(img);
    }
}

共有1个答案

赵俊侠
2023-03-14

我不明白为什么在for循环中需要两个case。如果您的目标是将图像放置到页面的右上方位置,并且您知道图像的宽度和高度以及页面的宽度和高度,那么您需要做的只是计算坐标以传递给SetFixedPosition方法。

setfixedposition接受xy坐标,这些坐标是图像在PDF坐标系中的左下坐标,即从左到右,从上到下。

因此,您需要从页面宽度中减去图像宽度,并对高度执行同样的操作,这将导致以下一行字:

img.setFixedPosition(pageSize.getWidth() - img.getImageWidth(), pageSize.getHeight() - img.getImageHeight());
 类似资料:
  • 问题内容: 我有3个要素。 第一个更大(包装)并具有 第2个相对于第1个相对位置绝对定位(并包含在第1个中) 第3个包含在第2个中,并且也具有绝对定位。 为什么第3个位置相对于第2个绝对位置(这也是第1个位置的绝对位置)而不是相对位置的第一个位置? 因为3rd 是绝对定位到2nd的绝对定位。 问题答案: 因为就像重置孩子的相对位置一样。 这是无法解决的-如果您希望第三个相对于第一个绝对定位,则必须

  • 问题内容: 和CSS 和有什么不一样?那你什么时候应该使用呢? 问题答案: CSS绝对定位 绝对定位是最容易理解的。您从CSS 属性开始: 这告诉浏览器应将要定位的所有内容从文档的正常流程中删除,并将其放置在页面上的确切位置。它不会影响HTML中它之前或之后的元素在网页上的放置方式,但是除非您重写它,否则 它将 取决于其父级的位置。 如果你想一个元素从文档窗口的顶部10个像素的位置,你会使用偏移与

  • 当一个元素的 position属性设置为 absolute 或 fixed,它将使用绝对定位。绝对定位的元素将从文档流中完全删除,它原先在正常文档流中所占的空间会关闭,就好像该元素不存在一样,因此不会在原先的位置留下空白。 绝对定位的元素相对它的包含块进行定位。position: absolute 元素的包含块是最近已定位(position属性被设置,且不是static)的祖先元素,如果没有已定位

  • 问题内容: 我在另一个div内有两个div,我想使用css将一个子div放在父div的右上角,另一个子div放在父div的底下。即,我想对两个子div使用绝对定位,但是将它们相对于父div而不是页面定位。我怎样才能做到这一点? 范例html: 问题答案: 这工作,因为手段类似“使用,,,来定位自己相对于谁拥有最近的祖先或”。 因此,我们使have 和子代都有,然后使用和定位子代。

  • 问题内容: 根据W3Schools: 相对定位的元素通常用作绝对定位元素的容器块。 为什么是这样?有没有很好的例子? 问题答案: 一个很好的例子是当您想将某些内容放置到页面上或相对于容器/ div放置时。 这向您显示,如果绝对div不在“相对” div内,则内容将与文档主体对齐。 请注意,绿色div()的div内部()的对齐方式为的上/右对齐。 蓝色框()具有与绿色框()完全相同的HTML布局,但

  • 我在另一个div中有两个div,我想使用CSS将一个子div放置在父div的右上方,另一个子div放置在父div的底部。例如,我想对两个子div使用绝对定位,但是相对于父div而不是页面定位它们。我怎么能这么做? HTML示例: