使用带有图像和多页的JAVA(Netbeans)创建PDF

时间:2016-02-02 13:23:09

标签: java pdf netbeans itext

我正在开发一个具有以下要求的Java程序:

  • 该应用程序将获取5个输入字段和3个图像(浏览并“附加”到Java应用程序)。
  • 完成“表格”后,将使用名为“提交”的按钮提交。
  • 一旦提交,JAVA应用程序将创建一个包含5个输入文本和3个附加图像的PDF文件。
  • 我应该可以控制哪个页码。

如何使用iText实现这样的解决方案?

2 个答案:

答案 0 :(得分:5)

  
      
  • 该应用程序将获取5个输入字段和3个图像(浏览并“附加”到Java应用程序)。
  •   
  • 完成“表格”后,将使用名为“提交”的按钮提交。
  •   

前两个要求不清楚;它们是在Java GUI(AWT?Swing?FX?),某些独立的Web UI(纯HTML?Vaadin?)中实现的,还是在某些派生的UI(Portlet?...)中实现的?

但问题标题“使用带有图像和多页的JAVA(Netbeans)创建PDF ”专注于PDF创建,让我们看看第三和第四个要求。

  
      
  • 一旦提交,JAVA应用程序将创建一个包含5个输入文本和3个附加图像的PDF文件。
  •   
  • 我应该可以控制哪个页码。
  •   

假设您已经在变量中有这些输入

String text1, text2, text3, text4, text5;
byte[] image1, image2, image3;

框架

使用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();

添加文字

您可以使用

在其中一个Add content for the ... page(s)部分添加文字
import com.itextpdf.text.Paragraph;

...

document.add(new Paragraph(text1));

添加图像

您可以使用

在其中一个Add content for the ... page(s)部分添加图片
import com.itextpdf.text.Image;

...

document.add(Image.getInstance(image1));

在给定位置添加

如上所述添加文本或图像会将布局细节留给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);

还有更多选项可以操作您的内容,例如:选择字体,选择文字大小,缩放图像,旋转内容......,只需查看书中的{em> iText in Action - Second Edition 中的iText samples

答案 1 :(得分:0)

您可以使用 XSL-FO 。基本示例here。在此之后,您可以搜索并添加PDF的其他选项。