如何在pdfbox中设置文本位置

时间:2016-04-29 10:40:09

标签: servlets pdfbox

我使用pdfbox创建pdf,但没有确定如何在x和y中设置文本,它将无法以正确的格式显示

PDDocument document=new PDDocument();
    PDPage blank=new PDPage();
    PDFont font=PDType1Font.HELVETICA_BOLD; 
    document.addPage(blank);

    PDPageContentStream content=new PDPageContentStream(document, blank);
    content.beginText();
    int i=0;
    int  x=20;
    int y=700;
while(i<5){
content. newLineAtOffset(x, y);
            content.setFont(font, 12);
            content.showText(id);
            content.showText(role);
            i++;
            y=-20;
}
content.endText();
content.close();
document.save("BlankPage.pdf");
document.close();[it will increase x and i dont want to increase possition of x][1]


  [1]: http://i.stack.imgur.com/Q1A6I.jpg

1 个答案:

答案 0 :(得分:0)

不幸的是,OP没有解释没有采用正确格式的具体含义。

看看他的代码,但似乎他认为

content.newLineAtOffset(x, y);

将新行定位在给定的 x y 作为绝对坐标。不是这种情况。相反, x y 相对与之前的行坐标设置为 0 0 < / strong>在content.beginText()生成的PDF指令中。

这实际上已经由Offset中的newLineAtOffset暗示,并在JavaDocs中明确指出:

/**
 * The Td operator.
 * Move to the start of the next line, offset from the start of the current line by (tx, ty).
 *
 * @param tx The x translation.
 * @param ty The y translation.
 * @throws IOException If there is an error writing to the stream.
 * @throws IllegalStateException If the method was not allowed to be called at this time.
 */
public void newLineAtOffset(float tx, float ty) throws IOException

因此,他很可能想做类似

的事情
int x=20;
int y=700;
content.beginText();
content.setFont(font, 12);
content.newLineAtOffset(x, y);
for (int i=0; i<5; i++)
{
    content.showText(id);
    content.showText(role);
    content.newLineAtOffset(0, -20);
}
content.endText();