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