在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案。

1:excel转pdf出现乱码:

    第一次excel转pdf是成功的,第二次开始后面皆是乱码,是因为我的pdf转excel方法出现的问题,解决办法是采用java自身底层的方法(详见下方代码)。

public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("license.xml"); //  license.xml应放在..\WebRoot\WEB-INF\classes路径下
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {               
            e.printStackTrace();
        }
        return result;
    }
    
    
    public static void excelTransferPdf(String excelPath,String pdfPath) {
        if (!getLicense()) {
            System.out.println("license faile");
            return;
        }
        
        try {     
            Workbook wb = new Workbook(excelPath);
            FileOutputStream fileOS = new FileOutputStream(new File(pdfPath));
            wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
            fileOS.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2:excel转pdf出现折行。

  excel转pdf出现折行的情况非常常见,因为在程序运行过程中很多字段是抓取的,你无法判断你的excel转成pdf会有几页,所以这个时候你就不要随意设置excel的预览格式,将excel的单元格式设置自动换行。

3:抓取字段显示结果不完整:。

  当你未设置单元格大小而又没有设置单元格自动换行,比如你的A18单元格里面的字段超过了单元格的长度你还没有设置单元格大小而又没有设置单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打印出来的pdf文件A18单元格超出单元格外的内容是不予显示的,此时你要么将抓取字段填充在C18单元格内要么将更改A18单元格格式

4:excel转PDF字段内容无故中间部分换行:

  这是我碰到的最坑的一个地方,这个时候你只需要在excel单元格里面设置自动换行即可,无需代码强行自动换行(强行换行有可能只出现多行数据只显示一行)。同时你需要如下代码:

/**
     * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为1,英文字符长度为0.5
     *
     * @param String
     *            s 需要得到长度的字符串
     * @return int 得到的字符串长度
     */
    public static double getLength(String s) {
        double valueLength = 0;
        if (s == null) {
            return 0;
        }
        String chinese = "[\u4e00-\u9fa5]";
        // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
        for (int i = 0; i < s.length(); i++) {
            // 获取一个字符
            String temp = s.substring(i, i + 1);
            // 判断是否为中文字符
            if (temp.matches(chinese)) {
                // 中文字符长度为2
                valueLength += 2;
            } else {
                // 其他字符长度为1
                valueLength += 1;
            }
        }
        // 进位取整
        return Math.ceil(valueLength);
    }

/**
     * 根据字符串长度获取行高
     *
     * @param str
     * @return
     */
    public static Float getRowHeight(String str) {

Integer lineCount = (int) (getLength(str) / 64) + 1;
        if (str.contains("\n")) {
            Integer tempLineCount = 1;
            String[] lines = str.split("\n");
            for (String line : lines) {
                Integer everyLineCount = (int) (getLength(line) / 64) + 1;
                tempLineCount += everyLineCount;
            }
            lineCount = lineCount >= tempLineCount ? lineCount : tempLineCount;
        }
        Float rowHeight = (float) (lineCount * 20);
        return rowHeight;
    }

你需要先获取抓取的字符串的长度,然后通过这个方法计算行高,再将excel需要填充的该行用Java代码设置行高(行高单位是像素),但是如果出现我上面说的字段内容无故中间部分换行,那么你获取的行高就会不足,这个时候你需要改动这个地方----->>>>Float rowHeight = (float) (lineCount * X);  x的值一定要设置的大一行,以防出现这种情况!

转载于:https://www.cnblogs.com/lg-wxf/p/9474427.html

利用java实现excel转pdf文件相关推荐

  1. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  2. Java 将 Excel 转换为 PDF 文件

    持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 今天这是篇粗糙的文章,文字也较少,整理了个Java将Excel 转换为 PDF 文件的工具类.(还比较 ...

  3. java实现excel转pdf文件

    引入依赖pom.xml <dependency><groupId>com.aspose.cells</groupId><artifactId>aspos ...

  4. JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法

    OFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行. java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库 ...

  5. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  6. java利用apache pdfbox工具裁剪PDF文件

    java利用apache pdfbox工具裁剪PDF文件 一.导入apache pdfbox工具jar包 maven仓库导入工具包 <dependency><groupId>o ...

  7. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

    将Office文件转换为PDF文件,提取Office文件中的所有图片 1.Office系列---将Office文件(Word.PPT.Excel)转换为PDF文件 1.1 基于Office实现的解决方 ...

  8. java实现写字板对pdf文件签名

    java实现写字板对pdf文件签名 思路 首先明白写字板签名完输出的是base64的图片,剩下的就是将此图片插入到pdf文件中,实现此步骤的技术很多,可以用itex5但是为了实现与其他数据一起动态插入 ...

  9. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

最新文章

  1. TFS2008 + Windows2003 + Sql2005 安装注意事项
  2. 2019 CES展上最受外媒体关注的中国机器人产品及技术
  3. Selenium3自动化测试——21.数据驱动应用
  4. pstack 安装linux_pstack命令_Linux pstack 命令用法详解:显示每个进程的栈跟踪
  5. python全局变量在程序执行的全过程有效_PYTHON使每个过程都可以访问全局变量
  6. 离散元 python_离散元在土木工程领域的应用前景如何?
  7. 基于Hadoop 2.6.0运行数字排序的计算
  8. GhostBSD 19.04 发布,注重安全与稳定性的 FreeBSD 发行版
  9. 如何使用导入平面文件向导将平面文件导入SQL Server数据库
  10. 类中添加log4j日志
  11. 《算法笔记》和《算法笔记上机训练指南》学习笔记汇总
  12. idea进入方法快捷键详情大全(idea快捷键大全最新设置)
  13. 信息论与编码_学术动态 | “中大网络信息理论与编码研讨会”成功举办
  14. 接口测试中POST方法该怎么测?4种数据提交方式,测试用例设计和测试工具操作步骤全讲清
  15. SDRAM控制器设计(9)用读写FIFO优化及仿真验证
  16. No.44-VulnHub-Pegasus: 1-Walkthrough渗透学习
  17. aur打包linux微信,ArchLinux微信、TIM安装与乱码解决方法
  18. java具名参数_Spring jdbc具名参数使用方法详解
  19. C语言中常见的转义字符总结
  20. extract($_POST, EXTR_SKIP)讲解

热门文章

  1. xampp mysql 备份_Linux Xampp计划任务自动备份Mysql数据库和所有网站
  2. js将docx转换为html,js 将word转换Html
  3. 后端:50 个 经典 Spring 面试题,值得收藏!
  4. SQL数据库面试题以及答案!
  5. 前端:JSON.stringify() 的 5 个秘密特性
  6. 程序员效率:如何合理的分解任务
  7. java quartz 跳过_Java Quartz计划作业-禁止同时执行作业
  8. android sdk eclipse没导入,Android—新的eclipse导入SDK出错解决办法
  9. myjdbc链接数据库.增删改查
  10. session中存放一个对象,只修改对象的属性,不将修改后的对象存放session,发现session中存放的对象也发生改变!