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

使用带有图像和多页的JAVA(Netbeans)创建PDF,java,pdf,netbeans,itext,Java,Pdf,Netbeans,Itext,我正在开发具有以下要求的Java程序: 应用程序将获取5个输入字段和3个图像(浏览并“附加”到Java应用程序) 一旦“表格”完成,将使用名为“提交”的按钮提交 一旦提交,JAVA应用程序将创建一个包含5个输入文本和3个附加图像的PDF文件 我应该能够控制哪个去哪个页码 如何使用iText实现这样的解决方案?您可以使用XSL-FO。一个基本的例子。在此之后,您可以为PDF搜索和添加其他选项 应用程序将获取5个输入字段和3个图像(浏览并“附加”到Java应用程序) 一旦“表格”完成,将使用名

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

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

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

您可以使用XSL-FO。一个基本的例子。在此之后,您可以为PDF搜索和添加其他选项

  • 应用程序将获取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();
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);
添加文本 您可以在其中一个
添加内容中添加文本。。。第页
使用

import com.itextpdf.text.Paragraph;

...

document.add(new Paragraph(text1));
import com.itextpdf.text.Image;

...

document.add(Image.getInstance(image1));
添加图像 您可以在一个
addcontent中为。。。第页
使用

import com.itextpdf.text.Paragraph;

...

document.add(new Paragraph(text1));
import com.itextpdf.text.Image;

...

document.add(Image.getInstance(image1));
在给定位置添加 如上所述添加文本或图像会将布局细节留给iText,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();
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);

此外,还有更多操作内容的选项,例如,选择字体、选择文本大小、缩放图像、旋转内容等,只要看看《iText在行动中-第二版》一书中的内容即可。

我相信您对iText的理解是错的,该库允许使用非常简单的代码创建非常棒的PDF。你可能想更详细地查看它。我需要一个库,允许我从输入和附加/提供给它的图像创建PDF文件。顺便检查一下iText网站,它似乎不再免费了?@JamesAnd我知道iText,但它根本不让你控制PDF——这是完全错误的。与其说这些胡说八道,不如问一下如何使用iText实现解决方案。@JamesAnd顺便问一下,iText网站似乎不再免费了?在上,在页面底部,您可以找到有关iText的AGPL版本的信息,该版本的功能与商业版本完全相同。更多关于它的详细信息是桌面应用程序、web应用程序、Android应用程序还是?不清楚你在问什么。然而,在PDF中放入5个字符串和3个图像并不重要。查看开发人员站点以获取示例:根据“表单”一词的含义,您甚至可能根本不需要XML。根据您在下面@alex-m的回答中的评论,我认为您不会这么做。谢谢!但是,如何在PDF之前创建一个XSL文件呢?您可以基于某个模型对象创建一个XSL文件,然后XSL文件将创建一个xml文件,该文件将被转换/转换为PDF文件。关于模型,它可以是一个具有5个属性(5个输入字段)和图像列表的类。更多关于流程和xml模型的例子,我认为OP根本没有使用xml,但问题还不清楚。