📜  使用Java将图像添加到 PDF 中的表格

📅  最后修改于: 2022-05-13 01:54:56.937000             🧑  作者: Mango

使用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!!");
    }
}


输出:

如果您获得类似的输出,则表示代码已成功执行。

将 jpg 图像插入 pdf

注意:借助上述代码,您只能将 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!!

将图像插入 pdf

注意:在这种方法中,我们可以添加 PNG 格式的图像,以及 jpg 格式的图像,这比 PDFBox 库有优势。