利⽤java实现excel转pdf⽂件
在有些需求当中我们需要抓取字段并且填充到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("l"); //  l应放在..\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, lls.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最强教科书完全版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;
}
}
// 进位取整
il(valueLength);
}
/**
* 根据字符串长度获取⾏⾼
*
* @param str
* @return
*/
public static Float getRowHeight(String str) {
Integer lineCount = (int) (getLength(str) / 64) + 1;
if (ains("\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的值⼀定要设置的⼤⼀⾏,以防出现这种情况!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。