Java 如何使用iText相对于页面定位文本?
如何设置文本的位置,使其相对于页面大小垂直居中?我想定位它,比如说,从右边垂直居中x个点。文本当然会旋转90度Java 如何使用iText相对于页面定位文本?,java,pdf,itext,Java,Pdf,Itext,如何设置文本的位置,使其相对于页面大小垂直居中?我想定位它,比如说,从右边垂直居中x个点。文本当然会旋转90度 int n = reader.getNumberOfPages(); PdfImportedPage page; PdfCopy.PageStamp stamp; for (int j = 0; j < n; ) { ++j;
int n = reader.getNumberOfPages();
PdfImportedPage page;
PdfCopy.PageStamp stamp;
for (int j = 0; j < n; )
{
++j;
page = writer.getImportedPage(reader, j);
stamp = writer.createPageStamp(page);
Rectangle crop = reader.getCropBox(1);
// add overlay text
Phrase phrase = new Phrase("Overlay Text");
ColumnText.showTextAligned(stamp.getOverContent(), Element.ALIGN_CENTER, phrase,
crop.getRight(72f), crop.getHeight() / 2, 90);
stamp.alterContents();
writer.addPage(page);
}
int n=reader.getNumberOfPages();
PDF导入页面;
PdfCopy.PageStamp;
对于(int j=0;j
上面的代码给出了不一致的文本位置,在某些页面中,只有部分“覆盖文本”可见。请帮忙,我不知道如何正确使用mediabox和cropbox,而且我对itext还不熟悉
谢谢 关于不一致的位置:应通过添加垂直偏移来固定:
crop.getRight(72f), crop.getBottom() + crop.getHeight() / 2
你看到了吗?您将边距为1英寸的右边框作为x
坐标,但忘记考虑页面底部的y
坐标(它并不总是0
)。通常,这会解决定位问题
关于只有一部分覆盖文本可见的事实:我的第一个猜测是您正在现有内容下添加内容,但这个猜测是错误的(您使用的是
getOverContent()
)。你说的第二个问题到底是什么意思?你的意思是文本被CropBox剪辑了吗?您是否正在寻找一种方法来测量短语的内容,以便在添加之前查看其是否适合高度?文本不可见,在某些情况下会移动。我只想知道x,y坐标,这样我就可以将覆盖文本定位在相对于pdf页面的相同位置,即垂直居中,并且应该靠近页面可见区域的边缘(左侧或右侧)。一些PDF具有不同的页面大小。在这种情况下,公式是什么?谢谢。我不是已经回答了那个问题吗?如果crop
是定义CropBox(如果存在)或MediaBox(如果没有CropBox)的矩形,则x=crop.getRight()+xPos
和y=crop.getBottom()+crop.getHeight()/2
,其中xPos
定义了文本从右边框开始以用户单位计算的偏移量。根据您在此处的帖子:,您说“当您在绝对位置添加内容时,如果原点的(x,y)值与(0,0)不同,则需要将其考虑在内。”。否则,您可能会在错误的位置添加内容,甚至可能在页面的可见区域之外。”如果我没有做到这一点,我诚挚的道歉。我尝试了crop.getRight()+xPos,crop.getBottom()+crop.getHeight()/2
但是我想添加的内容的位置仍然不一致。谢谢@bruno lowagie。请查看此生成的pdf:。覆盖文本与第1-3页和第20-21页一致,但在其余页面的可见区域之外。希望你能帮助我。再次提前感谢。非常感谢您抽出时间指出我忽略的内容。我将尝试通过尝试和错误来计算偏移位置。我还有很多书要读。对于使用聊天功能,我深表歉意。谢谢和问候。