📜  在 PDF 中平铺页面内容的Java程序

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

在 PDF 中平铺页面内容的Java程序

为了平铺页面,我们将在这里使用 iText 开源库,因为iText是世界领先的 F/OSS PDF 库。为了在 PDF 中平铺页面内容,我们需要一些类 iText 库。以下是用于创建 Tiling 页面内容的组件。

  1. PdfReader 类属于com.itextpdf.text.pdf包,用于读取现有的 PDF 文档。
  2. PdfWriter类属于com.itextpdf.text.pdf用于将内容写入文档。
  3. 属于包com.itextpdf.kernel.pdf PdfDocument类。通过创建这个类,你必须传递一个 writer 参数或 reader 参数。
  4. 文档类属于包 com.itextpdf.layout。它是 IText 中的核心类之一。 com.itextpdf.text.Document类用于创建实例。
  5. 属于包com.itextpdf.text 的矩形类此类用于设置边框颜色、归档特定颜色、调整文本以适合矩形内部。
  6. 属于com.itextpdf.kernel.pdf.canvas pdfCanvas类 Pdf画布。 pdfCanvas 用于将数据写入页面内容。使用完毕后调用 pdfCanvas.release()方法。它会节省一些内存。
  7. 使用 close() 方法关闭文档,因为它会节省一些内存。

程序:

  1. 在工作区下载 iText 库。
  2. 创建Java项目
  3. 转到配置并将此项目转换为 maven 项目
  4. 添加依赖Ënciespom.xml文件。
  5. 之后创建一个Java类并通过提供 PDF 文件的特定路径来构建此代码。

执行:

平铺前的PDF页面内容如下:



例子

Java
// Java Program to Tile a Page Content in a PDF
 
// Importing input output classes
// Importing required classes from itextpdf
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[]) throws Exception
    {
 
        // Creating an object Pdf Writer
        String writing_pdf
            = "C:\Users\HP\Downloads\document.pdf";
        PdfWriter pdf_writer = new PdfWriter(writing_pdf);
 
        // Creating an object Pdf Reader
        String reading_pdf
            = "C:\Users\HP\Downloads\image.pdf";
        PdfReader pdf_reader = new PdfReader(reading_pdf);
 
        // Creating a PdfDocument objects by
        // creating both objects of PdfDocument class
        PdfDocument write = new PdfDocument(pdf_writer);
        PdfDocument read = new PdfDocument(pdf_reader);
 
        // Step 1: Opening a page from the existing PDF
        PdfPage origPage = read.getPage(1); // srcPdf= read
 
        // Step 2: Getting the page size
        Rectangle orig = origPage.getPageSizeWithRotation();
 
        // Step 3: Getting the size of the page
        PdfFormXObject pageCopy
            = origPage.copyAsFormXObject(write);
 
        // Step 4: Getting the size of the tile
        Rectangle Size = PageSize.A4.rotate();
 
        AffineTransform transformationMatrix
            = AffineTransform.getScaleInstance(
                Size.getWidth() / orig.getWidth() * 2f,
                Size.getHeight() / orig.getHeight() * 2f);
 
        // Step 5: Now creating the titles
        PdfPage page
            = write.addNewPage(PageSize.A4.rotate());
 
        // 1st tile
        PdfCanvas obj = new PdfCanvas(page);
        obj.concatMatrix(transformationMatrix);
        obj.addXObject(pageCopy, 0, -orig.getHeight() / 2f);
 
        // 2nd tile
        page = write.addNewPage(PageSize.A4.rotate());
 
        obj = new PdfCanvas(page);
        obj.concatMatrix(transformationMatrix);
        obj.addXObject(pageCopy, -orig.getWidth() / 2f,
                       -orig.getHeight() / 2f);
 
        // 3rd tile
        page = write.addNewPage(PageSize.A4.rotate());
 
        obj = new PdfCanvas(page);
        obj.concatMatrix(transformationMatrix);
        obj.addXObject(pageCopy, 0, 0);
 
        // 4th tile
        page = write.addNewPage(PageSize.A4.rotate());
 
        obj = new PdfCanvas(page);
        obj.concatMatrix(transformationMatrix);
        obj.addXObject(pageCopy, -orig.getWidth() / 2f, 0);
 
        // Step 6: Closing the pdfdocument objects
        // using close() methods, optimizing program by
        // releasing the memory space
        write.close();
        read.close();
 
        // Display message on console only illustrating
        // successful execution of the program
        System.out.println(
            "PDF document is created successfully.");
    }
}


输出:

输出控制台上的消息。

PDF document is created successfully.

另外,在指定位置打开保存的PDF后,您会看到该PDF中的页面内容平铺,新生成的PDF如下: