<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
java處理excel轉pdf一直沒找到什麼好用的免費jar包工具,自己手寫的難度,恐怕高階程式設計師花費一年的事件,也不能做出來非常好用,再說誰會不賺錢,花費一年事件去研究java如何實現excel轉pdf的,於是我找到了Aspose公司出的aspose-cells的java的jar包來實現。之前寫過一篇技術文章,不過後來覺得實現起來有些繁瑣,因為aspose-cells沒有商業授權,轉換出來的pdf都會帶文字和圖片水印,且轉換pdf的頁數也會被受限制,之前的邏輯是自己用aspose-cells轉換pdf後,又用apache-pdfbox去實現pdf的水印去除。這樣不僅浪費了效能,還加長了處理時間。於是這個版想從aspose-cells入手,破除商業版的限制。教學如下。
aspose-cells 這個需要設定單獨的倉庫地址才能下載,不會設定的可以去官網直接下載jar引入專案程式碼中。
<repositories> <repository> <id>AsposeJavaAPI</id> <name>Aspose Java API</name> <url>https://repository.aspose.com/repo/</url> </repository> </repositories>
<!-- https://mvnrepository.com/artifact/com.aspose/aspose-cells --> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose-cells</artifactId> <version>21.8</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.20.0-GA</version> </dependency>
Javassist是一個開源的分析、編輯和建立Java位元組碼的類庫。
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<String> deletes = new ArrayList<>(); deletes.add("META-INF/37E3C32D.SF"); deletes.add("META-INF/37E3C32D.RSA"); List<String> replaces = new ArrayList<>(); 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包即可。
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\Desktop\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(); } } }
程式碼如下:
<License> <Data> <LicensedTo>Aspose Scotland Team</LicensedTo> <EmailTo>billy.lundie@aspose.com</EmailTo> <LicenseType>Developer OEM</LicenseType> <LicenseNote>Limited to 1 developer, unlimited physical locations</LicenseNote> <OrderID>140408052324</OrderID> <UserID>94236</UserID> <OEM>This is a redistributable license</OEM> <Products> <Product>Aspose.Total for Java</Product> </Products> <EditionType>Enterprise</EditionType> <SerialNumber>9a59547c-41f0-428b-ba72-7c4368f151d7</SerialNumber> <SubscriptionExpiry>20221231</SubscriptionExpiry> <LicenseVersion>3.0</LicenseVersion> <LicenseInstructions>http://www.aspose.com/corporate/purchase/license-instructions.aspx</LicenseInstructions> </Data> <Signature>FO3PHsblgDt8F59sMT1l1amyi9qk2V6E8dQkIP7LdTJSxDibNEFu1zOinQbqFfKv/ruttvcxoROkc1tUe0DtO6cP1Zf6J0VemgSY8i/LZECTGszRqJVQRZ0MoVnBhuPAJk5eli7fhVcF8hWd3E4XQ3LzfmJCuaj2NEteRi5Hrfg=</Signature> </License>
因為jar已破解其核心驗證方法,裡面的簽名可以隨便填寫,但是格式儘量保持一致,因為驗證其他的格式方法還在!
執行成功截圖
經測試轉換時間在幾秒之內,樣式沒有錯亂,只是當Excel的表格寬度,大於pdf的寬度時候,轉換後部分內容後不顯示。
到此這篇關於Java實現Excel檔案轉PDF(無水印無限制)的文章就介紹到這了,更多相關Java Excel轉PDF內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45