IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 5行java关键代码实现excel转pdf代码实战教程 -> 正文阅读

[Java知识库]5行java关键代码实现excel转pdf代码实战教程

?

前言

? ?上次写了一篇word转pdf实现 java代码实现的文章教程,有粉丝留言,想看excel转pdf的文章,我牢记于心,于是抽空研究了一下,下面是文章教程。

?

excel转pdf实现思路

? ?代码实现主要依赖两个第三方jar包,一个是pdfbox,一个是aspose-cells。pdfbox包完全开源免费,aspose-cells免费版生成有水印。单纯用pdfbox 实现word转pdf的话,实现非常复杂,且样式和原来样式,保持一致的的比例很低。所以,我先用aspose-cells生成了带水印的pdf,再用pdfbox去除aspose-cells生成的水印的,最终得到了一个无水印的pdf。实现代码逻辑基本和上次写的

《JAVA实现无损word转pdf文件完整代码教程》基本一样,不同的地方是,上次是实现知道文职文本水印内容,根据水印内容去替换掉,这次是用这种方法,解析的文本出现的乱码,于是换了一下思路,找出找出文本水印的字体,根据文本水印的特殊字体来匹配替换掉。

pom文件所需依赖

		<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>3.0.0-RC1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.aspose/aspose-cells -->
		<dependency>
			<groupId>com.aspose</groupId>
			<artifactId>aspose-cells</artifactId>
			<version>21.8</version>
		</dependency>

项目远程仓库

??aspose-words 这个需要配置单独的仓库地址才能下载,不会配置的可以去官网直接下载jar引入项目代码中。

<repositories>
		<repository>
			<id>AsposeJavaAPI</id>
			<name>Aspose Java API</name>
			<url>https://repository.aspose.com/repo/</url>
		</repository>
	</repositories>

核心代码实现类

package com.tarzan.reptile.demo;

import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

public class PdfUtils {

    public static void main(String[] args) {
        excelToPdf("C:\\Users\\liuya\\Desktop\\excel\\附件1-2021年洛阳市市直事业单位招聘工作人员职位表.xls");
    }

    /**
     * Excel文件转换
     * @param excelPath 需要被转换的excel全路径带文件名
     * @Return void
     */
    public static void excelToPdf(String excelPath) {
        long old = System.currentTimeMillis();
        try {
            //新建一个pdf文档
            String pdfPath=excelPath.substring(0,excelPath.lastIndexOf("."))+".pdf";
            //Excel文件数据
            Workbook wb = new Workbook(excelPath);
            FileOutputStream fileOS = new FileOutputStream(pdfPath);
            //保存为pdf文件
            wb.save(fileOS, SaveFormat.PDF);
            fileOS.close();
            removeWatermark(new File(pdfPath));
            //转化用时
            long now = System.currentTimeMillis();
            System.out.println("EXCEL 转 Pdf 共耗时:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    //移除文字水印
    public static boolean removeWatermark(File file) {
        try {
            //通过文件名加载文档
            PDDocument document = Loader.loadPDF(file);
            PDPageTree pages = document.getPages();
            Iterator<PDPage> iter = pages.iterator();
            while (iter.hasNext()) {
                PDPage page = iter.next();
                removeFont(page,"FAAACD");
            }
            file.delete();
            document.save(file);
            document.close();
            return true;
        } catch (IOException ex) {
            ex.printStackTrace();
            return false;
        }

    }


    //移除文字水印
    public static void removeFont(PDPage page, String cosName) {
        PDResources resources = page.getResources();
        COSDictionary dict1 = resources.getCOSObject();
        resources.getFontNames().forEach(e -> {
                COSDictionary dict2 = dict1.getCOSDictionary(COSName.FONT);
                if (e.getName().equals(cosName)) {
                    dict2.removeItem(e);
                }
            page.setResources(new PDResources(dict1));
        });
    }





}

结果分析

以《附件1-2021年洛阳市市直事业单位招聘工作人员职位表.xls》文件为列子,转换时长为2.092秒

?原文件excel截图

?生成pdf文件截图

?通过对比,excel原来的样式和转换pdf文件后的样式基本没有变化。

相关文章推荐

JAVA实现对PDF文件加密、解密、暴力破解密码功能https://blog.csdn.net/weixin_40986713/article/details/120350764https://blog.csdn.net/weixin_40986713/article/details/120350764

干货来袭!几行代码实现pdf添加水印和去除水印https://blog.csdn.net/weixin_40986713/article/details/120198982https://blog.csdn.net/weixin_40986713/article/details/120198982

JAVA实现PDF合并、拆分代码工具类https://blog.csdn.net/weixin_40986713/article/details/120065363

? ? ?JAVA实现无损word转pdf文件完整代码教程icon-default.png?t=L892https://blog.csdn.net/weixin_40986713/article/details/120416465

?如果有想要看的相关技术实现的文章,请在评论区留言,博主尽量满足!!!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 11:48:08  更:2021-09-30 11:49:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:56:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码