- 该应用程序将采用5个输入字段和3个图像(浏览并"附加"到Java应用程序).
- 完成"表单"后,将使用名为"提交"的按钮提交.
前两个要求不清楚; 它们是在Java GUI(AWT?Swing?FX?),某些独立的Web UI(纯HTML?Vaadin?)中实现的,还是在某些派生的UI(Portlet?...)中实现的?
但是,正如问题标题" 使用带有图像和多页的JAVA(Netbeans)创建PDF "一样侧重于PDF创建,让我们看看第三和第四个要求.
- 提交后,JAVA应用程序将创建一个PDF文件,其中包含5个输入文本和3个附加图像.
- 我应该能够控制哪个页码.
假设您已经在变量中有这些输入
String text1, text2, text3, text4, text5;
byte[] image1, image2, image3;
Run Code Online (Sandbox Code Playgroud)
使用iText,您现在可以创建如下文档:
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
...
// where you want to create the PDF;
// use a FileOutputStream for creating the PDF in the file system
// use a ByteArrayOutputStream for creating the PDF in a byte[] in memory
OutputStream output = ...;
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, output);
document.open();
// Add content for the first page(s)
...
// Start e new page
document.newPage();
// Add content for the next page(s)
...
// Start a new page
document.newPage();
// etc etc
document.close();
Run Code Online (Sandbox Code Playgroud)
您可以Add content for the ... page(s)使用其中一个部分添加文本
import com.itextpdf.text.Paragraph;
...
document.add(new Paragraph(text1));
Run Code Online (Sandbox Code Playgroud)
您可以Add content for the ... page(s)使用其中一个部分添加图像
import com.itextpdf.text.Image;
...
document.add(Image.getInstance(image1));
Run Code Online (Sandbox Code Playgroud)
如上所述添加文本或图像会将布局细节留给iText,而iText会从上到下填充页面,除了一些边距.
如果您想自己控制内容的位置(这也意味着您必须注意内容部分不重叠或在页面区域之外绘制),您可以这样做:
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.Phrase;
...
PdfContentByte canvas = writer.getDirectContent();
Phrase phrase = new Phrase(text2);
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase, 200, 572, 0);
Image img = Image.getInstance(image2);
img.setAbsolutePosition(200, 200);
canvas.addImage(img);
Run Code Online (Sandbox Code Playgroud)
而且还有很多更多的选择如何处理您的内容,例如选择字体,选择文本大小,缩放图像,旋转内容,...,只需看看iText的样品从书的iText在行动-第二版.