使用 Java 缩小 PDF 中的内容
压缩 PDF 文档内容的程序。程序中需要导入外部 jar 文件。下面是相同的实现。
进场:
1。创建一个空的 PDF 文件。
- 将空 PDF 的路径分配给字符串变量。
- 从包装com.itextpdf.kernel.pdf进口 PdfWriter 。(PdfWriter 允许我们在 PDF 文件中写入内容)
- PdfWriter 接受一个字符串变量作为其参数,该参数代表 PDF 的目标。
- 通过传递 PDF 文件的路径来初始化 PdfWriter 对象。
2。创建一个表示空 PDF 文件的文档。
- 从包装com.itextpdf.kernel.pdf导入文件。(PdfDocument 用于在代码中表示 pdf。这以后可用于添加或修改各种特征,例如字体、图像等)
- PdfDocument 接受 PdfWriter 或 PdfReader 对象作为其参数。
- 通过传递 PdfWriter 对象初始化 PdfDocument。
3。对原始 PDF 重复上述步骤。
- 将原始 PDF 的路径分配给字符串变量。
- 从包装com.itextpdf.kernel.pdf进口 PdfReader 。(PdfReader 允许我们阅读 PDF 文件上的内容)
- 将原始 PDF 的路径传递给 PdfReader 构造函数。
- 通过传递 PdfReader 对象来初始化 PdfDocument。
4。从原始 PDF 中获取页面的大小。
- 从包装com.itextpdf.kernel.pdf中导入 PdfPage 。(PDF 页面代表 PDF 中的特定页面)
- 从包中导入矩形。
- PdfDocumen t 类中的方法 getPage(int pageNumber) 返回指定特定页面的 PdfPage 对象。
- PdfPage 类中的方法 getPageSize() 返回特定 PdfPage 对象的矩形对象。
5。从空的 PDF 中获取页面的大小。
- 无法从空的 PDF 中获取页面大小。
- 因此,为了获得大小,我们使用 PdfDocument 类中的 addNewPage() 方法向空 PDF 添加一个新页面。addNewPage()方法返回一个 PdfPage 对象。
- PdfPage 类中的方法 getPageSize() 返回特定 PdfPage 对象的矩形对象。
6。创建原始页面的缩小版本。
- 从包中导入affinitetransform。
- 可以使用(emptyPageWidth/originalPageWidth)/2 计算新的缩放宽度。
- 可以使用(emptyPageHeight/originalPageHeight)/2 计算新的缩放高度。
- affinitetransform 类中的静态方法获取缩放实例(双倍宽度,双倍高度)返回一个具有缩放宽度和缩放高度的 affinitetransform 对象。
7。将原始页面的缩小版本附加到空的 PDF 中。
- 从包中导入 PdfCanvas 。
- 通过传入空页面作为参数来初始化 PdfCanvas 对象。
- 将上面创建的具有缩放尺寸的矩阵添加到空白画布中。
- 使用 PdfPage 类中存在的方法copy asFOrmxobject(PdFdDocument shrinkedDocument)(返回一个PdFpPage 类中的从原始页面复制内容。
- 使用方法添加 XoObject(PdfXoObject XoObject,float x,float y)将复制的页面添加到画布上。****
*8。创建文档。*
- 从包中导入文档 t。****
- 创建一个文档对象,使 PDF 成为可读版本。
- Document 类的一个构造函数接受 PdfDocument 对象作为它的参数。
- 通过将压缩文档作为参数传递来初始化文档对象。
- 创建对象后,文档被关闭,以防止内存泄漏。
*注意:* 外罐必选(点击此处下载)。
以下是 PDF 缩小的实现:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to shrink the contents of a PDF
// Importing the necessary libraries required
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Document;
public class Main {
public static void main(String[] args)
{
// Try catch block is used to handle File Exceptions
try {
// Destination of the empty PDF
String shrunkenPath = "/home/mayur/newGFG.pdf";
// Creating PDF writer object
PdfWriter pdfWriter
= new PdfWriter(shrunkenPath);
// Creating a PdfDocument object for empty pdf
PdfDocument shrunkenDocument
= new PdfDocument(pdfWriter);
// Destination of the original PDF
String originalPath = "/home/mayur/GFG.pdf";
// Creating PDF reader object
PdfReader pdfReader
= new PdfReader(originalPath);
// Creating a PdfDocument object for original
// pdf
PdfDocument originalDocument
= new PdfDocument(pdfReader);
// Opening the first page of the original PDF
PdfPage orignalPage
= originalDocument.getPage(1);
// Getting the height and width of the original
// PDF
Rectangle originalPDFSizes
= orignalPage.getPageSize();
// Adding a new page to the empty PDF
PdfPage emptyPage
= shrunkenDocument.addNewPage();
// Getting the height and width of the empty PDF
Rectangle emptyPDFsizes
= emptyPage.getPageSize();
// Scaling down the original Pdf page
double width = emptyPDFsizes.getWidth()
/ originalPDFSizes.getWidth();
double height = emptyPDFsizes.getHeight()
/ originalPDFSizes.getHeight();
// Calculating the new width and height
double newWidth = width / 2;
double newHeight = height / 2;
// Creating a matrix with new width and new
// height
AffineTransform affineTransform
= AffineTransform.getScaleInstance(
newWidth, newHeight);
// Creating an empty canvas
PdfCanvas canvas = new PdfCanvas(emptyPage);
// Adding the matrix created to the empty canvas
canvas.concatMatrix(affineTransform);
// Copying the content from the original PDF
PdfFormXObject pageCopy
= orignalPage.copyAsFormXObject(
shrunkenDocument);
// Adding the copied page to the canvas
canvas.addXObject(pageCopy, (float)newWidth,
(float)newHeight);
// Creating a Document object to make the PDF
// readable
Document doc = new Document(shrunkenDocument);
// Closing the documents to prevent memory leaks
doc.close();
originalDocument.close();
System.out.println(
"Shrunken PDF successfully created");
}
// Catching any unwanted Exceptions
catch (Exception e) {
System.err.println(e);
}
}
}
*执行前:*
**
原始 PDF**
*执行后:*
**
内容缩小后的 PDF**
版权属于:月萌API www.moonapi.com,转载请注明出处