📜  使用Java旋转 PDF 文档中的图像(1)

📅  最后修改于: 2023-12-03 15:06:52.502000             🧑  作者: Mango

使用Java旋转PDF文档中的图像

如果您需要旋转PDF文档中的图像,Java提供了多种可用的解决方案。在本文中,我们将介绍如何使用iText 7库进行此操作。

iText 7简介

iText是一个Java库,用于创建和操作PDF文件。iText 7是iText的最新版本,它包括许多新的特性和改进。为了使用iText 7,您需要添加以下依赖项到您的pom.xml文件中:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.16</version>
</dependency>
代码片段

下面的代码片段演示了如何使用iText 7库在Java中旋转PDF文档中的图像。该代码将打开名为“input.pdf”的文件,旋转第一页的图像90度,并将结果保存到名为“output.pdf”的新文件中。该代码还需要iText的图形组件依赖项:

import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.property.TextAlignment;

import java.io.File;
import java.io.IOException;

public class RotateImageInPdf {
    public static void main(String[] args) throws IOException {
        // 指定输入和输出文件
        String inputPath = "input.pdf";
        String outputPath = "output.pdf";

        // 打开PDF文档
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPath), new PdfWriter(outputPath));

        // 获取第一页
        PdfPage page = pdfDoc.getFirstPage();

        // 获取页码字典对象
        PdfDictionary pageDictionary = page.getPdfObject();

        // 获取资源字典对象
        PdfDictionary resources = pageDictionary.getAsDictionary(PdfName.Resources);

        // 获取XObject字典对象
        PdfDictionary xobjects = resources.getAsDictionary(PdfName.XObject);

        // 获取第一张图像
        PdfImageXObject image = (PdfImageXObject) xobjects.values().iterator().next();

        // 获取图像原始大小和旋转后的大小
        float width = image.getWidth();
        float height = image.getHeight();
        Rectangle originalRectangle = new Rectangle(0, 0, width, height);
        Rectangle rotatedRectangle = originalRectangle.rotate();

        // 获取PdfCanvas对象并使用它绘制图像
        PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
        canvas.saveState();
        canvas.concatMatrix(rotatedRectangle.getWidth() / originalRectangle.getWidth(), 0, 0, rotatedRectangle.getHeight() / originalRectangle.getHeight(), 0, 0);
        canvas.addImage(image, 0, 0, image.getWidth(), false);
        canvas.restoreState();

        // 保存并关闭PDF文档
        pdfDoc.close();
    }
}
代码说明

代码的第1~2行导入了iText所需的类。第4行导入了Java的File类,用于指定输入和输出文件的路径。第6~9行通过iText打开PDF文档,并获取第一页的对象。第11~27行获取了第一页的资源字典和XObject字典,从中获取了第一张图像。第30~31行获取了图像的原始大小和旋转后的大小。第33~38行获取PdfCanvas对象并使用它绘制图像。最后一行关闭了PDF文档。

总结

本文介绍了如何使用iText 7库旋转PDF文档中的图像。该代码从PDF文档中获取了第一张图像,并将其旋转了90度。您可以使用此代码作为基础,并在其上进行扩展,以满足您的特定需求。