如何使用Java生成具有类似HTML功能的PDF

如何使用Java生成具有类似HTML功能的PDF,java,itext,dynamicpdf,Java,Itext,Dynamicpdf,我需要使用一些java API创建PDF,这些API具有HTML等功能。基本上,我想创建一个表单,它可以从用户那里获取输入,执行一些基本的客户端验证,还可以使用Java以编程方式生成此PDF。我也在寻找类似HTML的丰富功能,如展开、折叠、超链接、在按钮点击时添加一个部分等。因此,基本上我试图创建一个类似HTML的页面,但在PDF中 我尝试过使用itext,但只能做一些事情,无法在PDF中添加活力。是否有任何工具/API支持此功能?PDF本身允许您嵌入(一个子集)javascript 此嵌入代码

我需要使用一些java API创建PDF,这些API具有HTML等功能。基本上,我想创建一个表单,它可以从用户那里获取输入,执行一些基本的客户端验证,还可以使用Java以编程方式生成此PDF。我也在寻找类似HTML的丰富功能,如展开、折叠、超链接、在按钮点击时添加一个部分等。因此,基本上我试图创建一个类似HTML的页面,但在PDF中


我尝试过使用itext,但只能做一些事情,无法在PDF中添加活力。是否有任何工具/API支持此功能?

PDF本身允许您嵌入(一个子集)javascript

此嵌入代码可以链接到文档事件(例如打开文档)或特定表单元素(例如单击按钮、更改文本输入字段中的文本)

这是他们网站上名为“”的页面,重点是添加表单元素

布鲁诺·洛瓦吉(iText的原始创始人)的书()也非常详细。它甚至展示了如何在PDF文档(第232页)中编程计算器

我只是将相关部分复制粘贴到这里

清单7.29计算器

public void addTextField(PdfWriter writer, Rectangle rect, String name) {
    PdfFormField field = PdfFormField.createTextField(writer, false, false, 0);
     field.setFieldName(name);
     field.setWidget(rect, PdfAnnotation.HIGHLIGHT_NONE);
     field.setQuadding(PdfFormField.Q_RIGHT);
     field.setFieldFlags(PdfFormField.FF_READ_ONLY);
     writer.addAnnotation(field);
}    

public void addPushButton(PdfWriter writer, Rectangle rect, String btn, String script) {
    float w = rect.getWidth();
    float h = rect.getHeight();
    PdfFormField pushbutton = PdfFormField.createPushButton(writer);
    pushbutton.setFieldName("btn_" + btn);
    pushbutton.setWidget(rect, PdfAnnotation.HIGHLIGHT_PUSH);
    PdfContentByte cb = writer.getDirectContent();
    pushbutton.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, createAppearance(cb, btn, BaseColor.GRAY, w, h));
    pushbutton.setAppearance(PdfAnnotation.APPEARANCE_ROLLOVER, createAppearance(cb, btn, BaseColor.RED, w, h));
    pushbutton.setAppearance(PdfAnnotation.APPEARANCE_DOWN, createAppearance(cb, btn, BaseColor.BLUE, w, h));
    pushbutton.setAdditionalActions(PdfName.U, PdfAction.javaScript(script, writer));
    pushbutton.setAdditionalActions(PdfName.E, PdfAction.javaScript( "this.showMove('" + btn + "');", writer));
    pushbutton.setAdditionalActions(PdfName.X, PdfAction.javaScript( "this.showMove(' ');", writer));
    writer.addAnnotation(pushbutton);
}

public PdfAppearance createAppearance(PdfContentByte cb, String btn, BaseColor color, float w, float h) {
    PdfAppearance app = cb.createAppearance(w, h);
    app.setColorFill(color);
    app.rectangle(2, 2, w - 4, h - 4);
    app.fill();
    app.beginText();
    app.setColorFill(BaseColor.BLACK);
    app.setFontAndSize(bf, h / 2);
    app.showTextAligned(Element.ALIGN_CENTER, btn, w / 2, h / 4, 0);
    app.endText();
    return app;
} 

我能够生成PDF并进行一些验证,但我无法理解单击按钮是否可以动态添加文本框?是否可以在JavaScript中嵌入AddJava代码段,从而可以添加文本框或任何其他小部件?您完全可以从内部JavaScript设置文本框的文本。有关javascript子集的具体操作细节,我认为最好查看PDF参考。