使用Java将图像添加到 PDF 中的表格
PDFBox是一个用Java编写的开源库。它有助于 PDF 文档的开发和转换。 PDFBox 库以 JAR 文件的形式出现。它可以创建新的 PDF 文档、处理现有文档、为 PDF 添加书签以及从 PDF 文档中提取内容。我们可以使用这个库进行数字签名、打印和验证符合PDF/A-1b 标准的文件。它带有一系列命令行实用程序,用于对 PDF 文档执行各种操作。一些实用程序正在加密和解密 PDF、调试、合并、覆盖、将文本转换为 PDF 和将 PDF 转换为图像。 PDFBox 的一些组件是 PDFBox、FontBox、XmpBox、PreFlight。 PDFBox是 PDFBox 库的主要部分。因为它包含用于内容提取和操作/修改文件的类和接口。 FontBox包含处理字体信息的类和接口。 XmpBox包含用于处理XMP元数据的类和接口。 PreFlight用于验证PDF/A-1B 标准的PDF 文件。
iText是一个开源Java库,用于在Java和.NET中创建和操作 PDF 文件。最初,源代码在 Mozilla 公共许可证或 GNU 库通用公共许可证开源许可证下作为开源分发。 iText 支持最高级的 PDF 功能,例如基于 PKI 的签名、40 位和 128 位加密、颜色校正、标记 PDF、PDF 表单 (AcroForms)、PDF/X、通过 ICC 配置文件和条形码进行颜色管理,并且是被多种产品和服务使用,包括 Eclipse BIRT、Jasper Reports、JBoss Seam、Windward Reports 和 pdftk。 iText 为用户提供类 (API) 来生成交互式 PDF 文档。通过这些,我们可以创建地图和书籍。我们可以添加书签、页码和水印。我们可以将现有的 PDF 拆分为多个 PDF,也可以向其中添加/连接其他页面。我们可以在 PDF 文档中填写交互式表单。我们可以将 PDF 保存为图像文件,例如 PNG 或 JPEG (JPG)。 iText 库为我们提供了一个 Canvas 类,使用它我们可以在 PDF 文档上绘制各种几何形状,如矩形、圆形、线条等。 使用 iText,您可以从您的Java程序创建一个新的 PDF 文件。我们也可以包含图像和字体。
环境设置
- 使用Java maven 创建一个项目。
- 转到 pdfbox.apache.org 并将依赖项添加到您的项目中。这样,库就会导入到您的项目中。
- 现在,在 Source Packages 中的com.mycompany.
下创建一个Java类。 - 很好,现在您可以使用这些库了。
理解概念
创建文档
首先,我们创建一个属于 org.apache.pdfbox.pdmodel 包的PDDocument类的实例。通过获取 PDDocument 类的实例,我们可以创建一个空的 PDF 文档。
PDDocument doc = new PDDocument();
创建空白页
PDPage 类用于在 PDF 文档中创建空白页面。以下代码在我们的 PDF 文档中创建一个页面。
PDPage blankPage = new PDPage();
添加页面
addPage()方法用于在 PDF 文档中添加页面。以下代码在我们的 PDF 文档中添加了一个页面。
doc.addPage( blankPage );
保存文件
当我们创建一个文档时,我们必须将文档保存到我们想要的位置。所以,我们使用save()方法来保存文档。 save() 方法接受一个字符串值并将文档的路径作为参数传递。
doc.save("Path of Document");
关闭文档
我们需要在完成任务后关闭 PDDocument 类对象,通过使用 close() 方法
doc.close();
例子:
Java
// Importing the required library functions
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.*;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
public class image_insert {
public static void main(String[] args)
throws FileNotFoundException, IOException,
COSVisitorException
{
// Create a pdfdocument object
PDDocument doc = new PDDocument();
// Create a PDPage object
PDPage page = new PDPage();
// Add page to document object
doc.addPage(page);
// Create FileInputStream object for your image
FileInputStream in
= new FileInputStream("D:/Downloads/abc1.jpg");
PDJpeg img = new PDJpeg(doc, in);
PDPageContentStream stream
= new PDPageContentStream(doc, page);
// Invoke drawXObject() object to draw image onto
// pdf file.
stream.drawXObject(img, 200, 220, 220, 200);
// First two integers are x and y
// coordinates(position of image) Second two
// integers are width and height of the image
stream.close();
doc.save("D:/My_pdf1");
doc.close();
}
}
Java
// Adding image to pdf
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
public class Itext_final {
public static void main(String args[]) throws Exception
{
// Creating a PdfWriter
PdfWriter writer = new PdfWriter("D:/mypdf1.pdf");
// Creating a PdfDocument
PdfDocument pdf = new PdfDocument(writer);
// Creating a Document
Document document = new Document(pdf);
// Creating an ImageData object
ImageData data = ImageDataFactory.create(
"D:/Downloads/Image.png");
// Creating an Image object
Image image = new Image(data);
// Adding image to the document
document.add(image);
// Closing the document
document.close();
System.out.println("Image added successfully!!");
}
}
输出:
cd D:\NetBeansProjects\ImagePdf; “JAVA_HOME=C:\\Program Files\\Java\\jdk-14.0.2” cmd /c “\”C:\\Program Files\\NetBeans-12.0\\netbeans\\java\\maven\\bin\\mvn.cmd\” -Dexec.args=\”-classpath %classpath com.mycompany.imagepdf.image_insert\” -Dexec.executable=\”C:\\Program Files\\Java\\jdk-14.0.2\\bin\\java.exe\” -Dexec.classpathScope=runtime -Dmaven.ext.class.path=\”C:\\Program Files\\NetBeans-12.0\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\” -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec”
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects…
———————–< com.mycompany:ImagePdf >———————–
Building ImagePdf 1.0-SNAPSHOT
——————————–[ jar ]———————————
— exec-maven-plugin:1.5.0:exec (default-cli) @ ImagePdf —
————————————————————————
BUILD SUCCESS
————————————————————————
Total time: 1.372 s
Finished at: 2020-10-31T23:31:58+05:30
————————————————————————
如果您获得类似的输出,则表示代码已成功执行。
注意:借助上述代码,您只能将 jpg 图像插入到 PDF 中。
使用 PDFBox 添加图像
1.使用Java maven制作项目。
2 .编辑可在项目文件下找到的pom.xml文件。您应该添加粗体部分,如下所示。
4.0.0
com.mycompany
Itextt
1.0-SNAPSHOT
jar
UTF-8
14
14
com.itextpdf
itext7-core
7.1.10
pom
3.现在只需运行它,您可以观察到所有 jar 文件都会自动安装。
理解概念
创建一个 PdfWriter 对象
PdfWriter类表示属于包 com.itextpdf.kernel.pdf 的 PDF 的 DocWriter。构造函数接受一个字符串作为输入,它表示要创建 PDF 的文件的路径。然后通过向其构造函数传递一个字符串值(表示我们需要创建 PDF 的路径)来初始化 PdfWriter 类,如下所示。
String destination = "D:/Downloads/My_pdf.pdf";
PdfWriter writer = new PdfWriter(destination);
当此类型的对象传递给 PdfDocument 类时,添加到此文档的每个元素都将写入指定的文件。
创建一个 PdfDocument 对象
PdfDocument 类是在 iText 中表示 PDF 文档的类。此类属于包 com.itextpdf.kernel.pdf。要初始化这个类(在写入模式下),我们需要将类 PdfWriter 的对象传递给它的构造函数。
通过将上面创建的 PdfWriter 对象传递给其构造函数来初始化 PdfDocument 类,如下所示。
PdfDocument pdfdocument= new PdfDocument(writer);
创建 PdfDocument 对象时,可以使用其类提供的相应方法添加各种元素,例如页面、文件附件、字体和事件处理程序。
创建文档对象
在创建自给自足的 PDF 时,根元素是包 com.itextpdf.layout 的 Document 类。该类的构造函数之一采用类 PdfDocument 的对象。通过传递前面步骤中创建的类 PdfDocument 的对象来初始化 Document 类,如下所示。
Document document = new Document(pdfdocument);
创建图像对象
为了创建图像对象,首先我们使用 ImageDataFactory 类的 create() 方法创建一个 ImageData 对象。然后,我们传递一个表示图像路径的字符串参数作为该方法的参数。
String imgFile = "D:/img.jpg";
ImageData data = ImageDataFactory.create(imgFile);
现在,初始化 com.itextpdf.layout.element 包的 Image 类。实例化时,我们将上面创建的ImageData对象作为参数传递给它的构造函数,如图
Image img = new Image(data);
将图像添加到文档
我们可以使用 Document 类的 add() 方法添加上一步创建的图像对象。
document.add(img);
关闭文档
我们需要使用 Document 类的 close() 方法关闭文档
document.close();
例子:
Java
// Adding image to pdf
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
public class Itext_final {
public static void main(String args[]) throws Exception
{
// Creating a PdfWriter
PdfWriter writer = new PdfWriter("D:/mypdf1.pdf");
// Creating a PdfDocument
PdfDocument pdf = new PdfDocument(writer);
// Creating a Document
Document document = new Document(pdf);
// Creating an ImageData object
ImageData data = ImageDataFactory.create(
"D:/Downloads/Image.png");
// Creating an Image object
Image image = new Image(data);
// Adding image to the document
document.add(image);
// Closing the document
document.close();
System.out.println("Image added successfully!!");
}
}
输出
Image added successfully!!
注意:在这种方法中,我们可以添加 PNG 格式的图像,以及 jpg 格式的图像,这比 PDFBox 库有优势。