首页 > 文章列表 > Java如何实现PDF文件的格式转换?

Java如何实现PDF文件的格式转换?

java PDF HTML
217 2023-05-04

Java如何实现PDF转HTML/Word/Excel/PPT/PNG

从 Maven 下载 Aspose.PDF

通过将以下配置添加到 pom.xml, 您可以直接从基于Maven的项目 轻松地使用Aspose.PDF for Java 。

<repository>

    <id>AsposeJavaAPI</id>

    <name>Aspose Java API</name>

    <url>https://repository.aspose.com/repo/</url>

</repository>

<dependency>

    <groupId>com.aspose</groupId>

    <artifactId>aspose-pdf</artifactId>

    <version>22.4</version>

</dependency>

核心代码实现(单类)

 import com.aspose.pdf.Document;

import com.aspose.pdf.SaveFormat;

import com.aspose.pdf.devices.PngDevice;

import com.aspose.pdf.devices.Resolution;

 

import java.io.*;

 

public class PDFHelper3 {

 

    public static void main(String[] args) throws IOException {

        pdf2image("C:\\Users\\liuya\\Desktop\\pdf\\示例文件.pdf");

    }

 

 

    //转word

    public static void pdf2word(String pdfPath) {

        long old = System.currentTimeMillis();

        try {

            String wordPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".docx";

            FileOutputStream os = new FileOutputStream(wordPath);

            Document doc = new Document(pdfPath);

            doc.save(os, SaveFormat.DocX);

            os.close();

            long now = System.currentTimeMillis();

            System.out.println("Pdf 转 Word 共耗时:" + ((now - old) / 1000.0) + "秒");

        } catch (Exception e) {

            System.out.println("Pdf 转 Word 失败...");

            e.printStackTrace();

        }

    }

 

    //转ppt

    public static void pdf2ppt(String pdfPath) {

        long old = System.currentTimeMillis();

        try {

            String wordPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".ppt";

            FileOutputStream os = new FileOutputStream(wordPath);

            Document doc = new Document(pdfPath);

            doc.save(os, SaveFormat.Pptx);

            os.close();

            long now = System.currentTimeMillis();

            System.out.println("Pdf 转 PPT 共耗时:" + ((now - old) / 1000.0) + "秒");

        } catch (Exception e) {

            System.out.println("Pdf 转 PPT 失败...");

            e.printStackTrace();

        }

    }

 

    //转excel

    public static void pdf2excel(String pdfPath) {

        long old = System.currentTimeMillis();

        try {

            String wordPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".xlsx";

            FileOutputStream os = new FileOutputStream(wordPath);

            Document doc = new Document(pdfPath);

            doc.save(os, SaveFormat.Excel);

            os.close();

            long now = System.currentTimeMillis();

            System.out.println("Pdf 转 EXCEL 共耗时:" + ((now - old) / 1000.0) + "秒");

        } catch (Exception e) {

            System.out.println("Pdf 转 EXCEL 失败...");

            e.printStackTrace();

        }

    }

 

    //转html

    public static void pdf2Html(String pdfPath) {

        long old = System.currentTimeMillis();

        try {

            String htmlPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".html";

            Document doc = new Document(pdfPath);

            doc.save(htmlPath,SaveFormat.Html);

            long now = System.currentTimeMillis();

            System.out.println("Pdf 转 HTML 共耗时:" + ((now - old) / 1000.0) + "秒");

        } catch (Exception e) {

            System.out.println("Pdf 转 HTML 失败...");

            e.printStackTrace();

        }

    }

 

    //转图片

    public static void pdf2image(String pdfPath) {

        long old = System.currentTimeMillis();

        try {

            Resolution resolution = new Resolution(300);

            String dataDir=pdfPath.substring(0,pdfPath.lastIndexOf("."));

            File imageDir = new File(dataDir+"_images");

            imageDir.mkdirs();

            Document doc = new Document(pdfPath);

            PngDevice pngDevice = new PngDevice(resolution);

            for (int pageCount = 1; pageCount <= doc.getPages().size(); pageCount++) {

                OutputStream imageStream = new FileOutputStream(imageDir+"/"+pageCount+".png");

                pngDevice.process(doc.getPages().get_Item(pageCount), imageStream);

                imageStream.close();

            }

            long now = System.currentTimeMillis();

            System.out.println("Pdf 转 PNG 共耗时:" + ((now - old) / 1000.0) + "秒");

        } catch (Exception e) {

            System.out.println("Pdf 转 PNG 失败...");

            e.printStackTrace();

        }

    }

 

 

}

运行方法,idea里右键运行,如果要做成web系统可以将代码封装程web服务,调用方法就行。

转换文件结果

以一个十四的pdf文件转化为例,大部分转换时间在10-12s,只有转ppt花费的时间久一点需要20s.可能pdf里面不是表格类的内容,所以转换excel文件后,样式差别会有点大,其他文件转换后样式和之前是保持一样的。