在 PDF 中平铺页面内容的Java程序
为了平铺页面,我们将在这里使用 iText 开源库,因为iText是世界领先的 F/OSS PDF 库。为了在 PDF 中平铺页面内容,我们需要一些类 iText 库。以下是用于创建 Tiling 页面内容的组件。
- PdfReader 类属于com.itextpdf.text.pdf包,用于读取现有的 PDF 文档。
- PdfWriter类属于com.itextpdf.text.pdf包,用于将内容写入文档。
- 属于包com.itextpdf.kernel.pdf PdfDocument类。通过创建这个类,你必须传递一个 writer 参数或 reader 参数。
- 文档类属于包 com.itextpdf.layout。它是 IText 中的核心类之一。 com.itextpdf.text.Document类用于创建实例。
- 属于包com.itextpdf.text 的矩形类。此类用于设置边框颜色、归档特定颜色、调整文本以适合矩形内部。
- 属于包com.itextpdf.kernel.pdf.canvas pdfCanvas类。 Pdf画布。 pdfCanvas 用于将数据写入页面内容。使用完毕后调用 pdfCanvas.release()方法。它会节省一些内存。
- 使用 close() 方法关闭文档,因为它会节省一些内存。
程序:
- 在工作区下载 iText 库。
- 创建Java项目
- 转到配置并将此项目转换为 maven 项目
- 添加依赖Ëncies到pom.xml文件。
- 之后创建一个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如下: