当我生成pdf表单时,我想使用iTextJava在pdf的左上角添加表单编号

当我生成pdf表单时,我想使用iTextJava在pdf的左上角添加表单编号,java,pdf,itext,Java,Pdf,Itext,嗨,当我使用java和itext生成表单时,我想在文档的左上角添加表单编号 在页眉上方。请让我知道方法 PdfPTable table = new PdfPTable(3); // 3 columns. table.setWidthPercentage(100); PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1")); PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2")); PdfPC

嗨,当我使用java和itext生成表单时,我想在文档的左上角添加表单编号 在页眉上方。请让我知道方法

PdfPTable table = new PdfPTable(3); // 3 columns.
table.setWidthPercentage(100);
PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1"));
PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2"));
PdfPCell cell3 = new PdfPCell(new Paragraph("Cell 3"));
cell1.setBorder(0);
cell2.setBorder(0);
cell3.setBorder(0);
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);

如何将表格对齐方式设置为页边距的开头

你的问题很令人困惑。您说您正在创建一个表单,但当您说表单时,您似乎不是指一个交互式表单,而是指一个包含表的普通PDF

你说你想在页眉上方加一个数字,但你没有告诉我们你所说的页眉是什么意思。你假设阅读你问题的人能读懂你的思想

我猜您希望使用页面事件在每个页面的左上角添加一个
字符串。那会使你的问题几乎是重复的

您可以创建
PdfPageEventHelper
的子类,如下所示:

public class Header extends PdfPageEventHelper {

    protected Phrase header;

    public void setHeader(Phrase header) {
        this.header = header;
    }

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte canvas = writer.getDirectContentUnder();
        ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, header, 36, 806, 0);
    }
}
public void createPdf(String filename) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
    Header event = new Header();
    writer.setPageEvent(event);
    // step 3
    document.open();
    // step 4
    List<Integer> factors;
    for (int i = 2; i < 301; i++) {
        factors = getFactors(i);
        if (factors.size() == 1) {
            document.add(new Paragraph("This is a prime number!"));
        }
        for (int factor : factors) {
            document.add(new Paragraph("Factor: " + factor));
        }
        event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i)));
        document.newPage();
    }
    // step 5
    document.close();
}
然后,您可以像这样使用这个
标题
类:

public class Header extends PdfPageEventHelper {

    protected Phrase header;

    public void setHeader(Phrase header) {
        this.header = header;
    }

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte canvas = writer.getDirectContentUnder();
        ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, header, 36, 806, 0);
    }
}
public void createPdf(String filename) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
    Header event = new Header();
    writer.setPageEvent(event);
    // step 3
    document.open();
    // step 4
    List<Integer> factors;
    for (int i = 2; i < 301; i++) {
        factors = getFactors(i);
        if (factors.size() == 1) {
            document.add(new Paragraph("This is a prime number!"));
        }
        for (int factor : factors) {
            document.add(new Paragraph("Factor: " + factor));
        }
        event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i)));
        document.newPage();
    }
    // step 5
    document.close();
}
你会有类似于:

event.setHeader(new Phrase(number));

其中
number
是要在坐标x=36,y=806处添加的数字。

您尝试了什么?您是从头开始创建文档还是填写现有表单?您是否使用了
showTextAligned()
方法?出了什么问题?你需要澄清。在当前状态下,无法回答您的问题,因为您没有向我们提供足够的信息。@Lowagie如何将showTextAligned()应用于表。