我在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);
}
}
我不明白为什么在for
循环中需要两个case。如果您的目标是将图像放置到页面的右上方位置,并且您知道图像的宽度和高度以及页面的宽度和高度,那么您需要做的只是计算坐标以传递给SetFixedPosition
方法。
setfixedposition
接受x
和y
坐标,这些坐标是图像在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示例: