当前位置:王中王鉄算盘开奖结果 > 新闻资讯 > 利用java实现excel转pdf文件

利用java实现excel转pdf文件

文章作者:新闻资讯 上传时间:2019-11-01

在微微需求个中大家供给抓取字段何况填充到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应放在..WebRootWEB-INFclasses路径下
            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的值应当要设置的大大器晚成行,避防现身这种场所!

 

本文由王中王鉄算盘开奖结果发布于新闻资讯,转载请注明出处:利用java实现excel转pdf文件

关键词: