在 PDF 中平铺页面内容的 Java 程序
为了平铺页面,我们将在这里使用 iText 开源库,因为 iText 是一个世界领先的 F/OSS PDF 库。为了在 PDF 中平铺页面内容,我们需要一些类 iText 库。以下是创建切片页面内容时使用的组件。
- 属于包com.itextpdf.text.pdf的 PdfReader 类,用于读取现有的 PDF 文档。
- PdfWriter 类属于包com.itextpdf.text.pdf,是用来给文档写内容的。
- 属于 com.itextpdf.kernel.pdf 包的 PdfDocument 类。通过创建这个类,您必须传递一个作者参数或读者参数。
- 文档类属于 package com.itextpdf.layout,是 IText 中的核心类之一。类用于创建实例。
- 属于包的矩形类该类用于设置边框颜色、归档特定颜色、调整文本以适合矩形。
- 属于包的类。pdfCanvas 用于将数据写入页面内容。使用完毕后,调用方法。这会节省一些内存。
- 使用 Close()方法关闭文档,因为这样会节省一些内存。
程序:
- 在工作区下载 iText 库。
- 创建 Java 项目
- 转到配置,将这个项目转换成 maven 项目
- 将 dependencis 添加到 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 如下:
版权属于:月萌API www.moonapi.com,转载请注明出处