使用Java将Word文档转换为PDF和图片

随着信息技术的发展,在日常工作中常常需要将Word文档转换为PDF或图片格式。这一转换过程有助于文档的共享、打印以及长期保存。本文将介绍如何使用Java来实现Word到PDF及图片的转换,并提供详细的代码示例。

1. 环境准备

在开始之前,确保已安装以下工具和库:

  • Java JDK:确保已安装Java JDK(推荐版本1.8及以上)。
  • Apache POI:用于读取Word文档。
  • PDFBox:用于创建和处理PDF文件。
  • JMagickThumbnailator:用于将PDF转换为图片。

在你的项目中添加这些依赖。例如,使用Maven可以在pom.xml中加入以下依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.24</version>
    </dependency>
    <dependency>
        <groupId>net.coobird</groupId>
        <artifactId>thumbnailator</artifactId>
        <version>0.4.14</version>
    </dependency>
</dependencies>

2. 工作流程

我们将整个过程分为三个步骤:读取Word文档,将其转换为PDF,以及将PDF转换为图片。

flowchart TD
    A[读取Word文档] --> B[转换为PDF]
    B --> C[转换为图片]

3. 代码示例

3.1 读取Word文档并转换为PDF

下面的代码展示了如何使用Apache POI读取Word文档并将其内容输出到PDF中。

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class WordToPDF {

    public void convert(String wordFilePath, String pdfFilePath) throws IOException {
        try (XWPFDocument doc = new XWPFDocument(new FileInputStream(wordFilePath));
             PDDocument pdfDoc = new PDDocument()) {

            PDPage page = new PDPage();
            pdfDoc.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page);
            for (XWPFParagraph paragraph : doc.getParagraphs()) {
                contentStream.beginText();
                contentStream.setFont(PDType1Font.HELVETICA, 12);
                contentStream.newLineAtOffset(25, 750);
                contentStream.showText(paragraph.getText());
                contentStream.endText();
            }
            contentStream.close();
            pdfDoc.save(pdfFilePath);
        }
    }
}

3.2 将PDF转换为图片

接下来,我们将PDF文件转换为图片。下面的代码使用Thumbnailator库处理此任务。

import net.coobird.thumbnailator.Thumbnails;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;

public class PDFToImage {

    public void convert(String pdfFilePath, String imageFilePath) throws IOException {
        try (PDDocument document = PDDocument.load(new File(pdfFilePath))) {
            for (int i = 0; i < document.getNumberOfPages(); i++) {
                BufferedImage image = document.getPage(i).convertToImage();
                Thumbnails.of(image)
                          .size(200, 200)
                          .toFile(new File(imageFilePath + "_page" + (i + 1) + ".png"));
            }
        }
    }
}

4. 整合实例

现在,我们可以创建一个主类,整合上述功能。

public class DocumentConverter {
    public static void main(String[] args) {
        WordToPDF wordToPDF = new WordToPDF();
        PDFToImage pdfToImage = new PDFToImage();

        try {
            String wordFilePath = "document.docx";
            String pdfFilePath = "document.pdf";
            String imageFilePath = "document_image";

            // 先将Word转换为PDF
            wordToPDF.convert(wordFilePath, pdfFilePath);
            System.out.println("Word转换为PDF成功");

            // 再将PDF转换为图片
            pdfToImage.convert(pdfFilePath, imageFilePath);
            System.out.println("PDF转换为图片成功");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 类图

下面是相关类的类图(使用Mermaid语法表示):

classDiagram
    class WordToPDF {
        +void convert(String wordFilePath, String pdfFilePath)
    }

    class PDFToImage {
        +void convert(String pdfFilePath, String imageFilePath)
    }

    class DocumentConverter {
        +static void main(String[] args)
    }

    DocumentConverter --> WordToPDF
    DocumentConverter --> PDFToImage

6. 结论

本文介绍了如何使用Java语言将Word文档转换为PDF及图片格式。通过使用Apache POI、PDFBox和Thumbnailator等库,我们可以方便地实现格式转换。这一系列操作可以帮助我们更好地管理和共享文档,提高工作效率。希望你能在自己的项目中应用这些技术,提升文档处理的灵活性和方便性。