linux cpu占用率如何看
373
2022-09-30
Java实现Excel文件转PDF(无水印无限制)
目录前言一、jar破解1.项目远程仓库配置2.pom文件引入相关依赖3.代码破解 二、Excel转PDF1.代码实现2.Aspose.License.xml 授权文件总结
前言
java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也不能做出来非常好用,再说谁会不赚钱,花费一年事件去研究java如何实现excel转pdf的,于是我找到了Aspose公司出的aspose-cells的java的jar包来实现。之前写过一篇技术文章,不过后来觉得实现起来有些繁琐,因为aspose-cells没有商业授权,转换出来的pdf都会带文字和图片水印,且转换pdf的页数也会被受限制,之前的逻辑是自己用aspose-cells转换pdf后,又用apache-pdfbox去实现pdf的水印去除。这样不仅浪费了性能,还加长了处理时间。于是这个版想从aspose-cells入手,破除商业版的限制。教程如下。
一、jar破解
1.项目远程仓库配置
aspose-cells 这个需要配置单独的仓库地址才能下载,不会配置的可以去官网直接下载jar引入项目代码中。
2.pom文件引入相关依赖
Javassist是一个开源的分析、编辑和创建Java字节码的类库。
3.代码破解
import javassist.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
public class ExcelJarCrack {
public static void main(String[] args) throws Exception {
String jarPath = "C:\\Users\\liuya\\Desktop\\jar\\aspose-cells-21.8.jar";
crack(jarPath);
}
private static void crack(String jarName) throws NotFoundException, CannotCompileException, IOException {
//这一步是完整的jar包路径
ClassPool.getDefault().insertClassPath(jarName);
CtClass LicenseClass = ClassPool.getDefault().getCtClass("com.aspose.cells.License");
CtMethod[] aMethods = LicenseClass.getDeclaredMethods("a");
for (CtMethod aMethod : aMethods) {
CtClass returnType=aMethod.getReturnType();
if(returnType.getName().equals("boolean")){
aMethod.setBody("{return true;}");
break;
}
}
//将文件名命名成备份文件
File file=new File(jarName);
LicenseClass.writeFile(file.getParent());
disposeJar(jarName);
}
private static void disposeJar(String jarName) {
List
deletes.add("META-INF/37E3C32D.SF");
deletes.add("META-INF/37E3C32D.RSA");
List
replaces.add("com/aspose/cells/License.class");
File oriFile = new File(jarName);
if (!oriFile.exists()) {
System.out.println("######Not Find File:" + jarName);
return;
}
//将文件名命名成备份文件
String bakJarName = jarName.substring(0, jarName.length() - 3) + "cracked.jar";
try {
//创建文件(根据备份文件并删除部分)
JarFile jarFile = new JarFile(jarName);
JarOutputStream jos = new JarOutputStream(new FileOutputStream(bakJarName));
Enumeration entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = (JarEntry) entries.nextElement();
if (!deletes.contains(entry.getName())) {
if(replaces.contains(entry.getName())){
System.out.println("Replace:-------" +entry.getName());
JarEntry jarEntry = new JarEntry(entry.getName());
jos.putNextEntry(jarEntry);
FileInputStream fin = new FileInputStream(oriFile.getParent()+ "/"+entry.getName());
byte[] bytes = readStream(fin);
jos.write(bytes, 0, bytes.length);
}else {
jos.putNextEntry(entry);
byte[] bytes = readStream(jarFile.getInputStream(entry));
jos.write(bytes, 0, bytes.length);
}
} else {
System.out.println("Delete:-------" + entry.getName());
}
}
jos.flush();
jos.close();
jarFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private static byte[] readStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
}
修改为你本机的aspose-cells-21.8.jar路径,然后运行主方法,破解成功后,会再同级文件夹下生成一个aspose-cells-21.8.cracked.jar包,用这个包替换原来的aspose-pdf-21.8.jar包即可。
二、Excel转PDF
1.代码实现
import com.aspose.cells.License;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import java.io.FileOutputStream;
public class PdfUtils {
public static void main(String[] args) {
excelToPdf("C:\\Users\\liuya\\Desktop\\excel\\test.xlsx");
}
/**
* Excel文件转换
* @param excelPath 需要被转换的excel全路径带文件名
* @Return void
*/
public static void excelToPdf(String excelPath) {
License license = new License();
license.setLicense("C:\\Users\\liuya\\oBCYUWTavcDesktop\\jar\\Aspose.License.xml");
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();
//转化用时
long now = System.currentTimeMillis();
System.out.println("EXCEL 转 Pdf 共耗时:" + ((now - old) / 1000.0) + "秒");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.Aspose.License.xml 授权文件
代码如下:
因为jar已破解其核心验证方法,里面的签名可以随便填写,但是格式尽量保持一致,因为验证其他的格式方法还在!
运行成功截图
总结
经测试转换时间在几秒之内,样式没有错乱,只是当Excel的表格宽度,大于pdf的宽度时候,转换后部分内容后不显示。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~