最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)Excel文件轉(zhuǎn)PDF(無水印無限制)

 更新時間:2022年06月08日 16:33:36   作者:洛陽泰山  
這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)Excel文件轉(zhuǎn)PDF的效果,并可以無水印、無限制。文中的示例代碼講解詳細,需要的可以參考一下

前言

java處理excel轉(zhuǎn)pdf一直沒找到什么好用的免費jar包工具,自己手寫的難度,恐怕高級程序員花費一年的事件,也不能做出來非常好用,再說誰會不賺錢,花費一年事件去研究java如何實現(xiàn)excel轉(zhuǎn)pdf的,于是我找到了Aspose公司出的aspose-cells的java的jar包來實現(xiàn)。之前寫過一篇技術(shù)文章,不過后來覺得實現(xiàn)起來有些繁瑣,因為aspose-cells沒有商業(yè)授權(quán),轉(zhuǎn)換出來的pdf都會帶文字和圖片水印,且轉(zhuǎn)換pdf的頁數(shù)也會被受限制,之前的邏輯是自己用aspose-cells轉(zhuǎn)換pdf后,又用apache-pdfbox去實現(xiàn)pdf的水印去除。這樣不僅浪費了性能,還加長了處理時間。于是這個版想從aspose-cells入手,破除商業(yè)版的限制。教程如下。

一、jar破解

1.項目遠程倉庫配置

aspose-cells 這個需要配置單獨的倉庫地址才能下載,不會配置的可以去官網(wǎng)直接下載jar引入項目代碼中。

<repositories>
        <repository>
            <id>AsposeJavaAPI</id>
            <name>Aspose Java API</name>
            <url>https://repository.aspose.com/repo/</url>
        </repository>
    </repositories>

2.pom文件引入相關(guān)依賴

        <!-- 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是一個開源的分析、編輯和創(chuàng)建Java字節(jié)碼的類庫。 

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<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 {
            //創(chuàng)建文件(根據(jù)備份文件并刪除部分)
            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轉(zhuǎn)PDF

1.代碼實現(xiàn)

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文件轉(zhuǎn)換
     * @param excelPath 需要被轉(zhuǎn)換的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文件數(shù)據(jù)
            Workbook wb = new Workbook(excelPath);
            FileOutputStream fileOS = new FileOutputStream(pdfPath);
            //保存為pdf文件
            wb.save(fileOS, SaveFormat.PDF);
            fileOS.close();
            //轉(zhuǎn)化用時
            long now = System.currentTimeMillis();
            System.out.println("EXCEL 轉(zhuǎn) Pdf 共耗時:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

2.Aspose.License.xml 授權(quán)文件

代碼如下:

<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已破解其核心驗證方法,里面的簽名可以隨便填寫,但是格式盡量保持一致,因為驗證其他的格式方法還在!

運行成功截圖

總結(jié)

經(jīng)測試轉(zhuǎn)換時間在幾秒之內(nèi),樣式?jīng)]有錯亂,只是當(dāng)Excel的表格寬度,大于pdf的寬度時候,轉(zhuǎn)換后部分內(nèi)容后不顯示。

到此這篇關(guān)于Java實現(xiàn)Excel文件轉(zhuǎn)PDF(無水印無限制)的文章就介紹到這了,更多相關(guān)Java Excel轉(zhuǎn)PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用攔截器獲取請求的入?yún)⒉⑵滢D(zhuǎn)化為Java對象詳解

    如何使用攔截器獲取請求的入?yún)⒉⑵滢D(zhuǎn)化為Java對象詳解

    這篇文章主要介紹了如何使用攔截器獲取請求的入?yún)⒉⑵滢D(zhuǎn)化為Java對象的相關(guān)資料,文中介紹了兩種實現(xiàn)的方法,并給出了詳細的代碼示例,需要的朋友可以參考下
    2025-02-02
  • Spring中的@ExceptionHandler異常攔截器

    Spring中的@ExceptionHandler異常攔截器

    這篇文章主要介紹了Spring中的@ExceptionHandler異常攔截器,Spring的@ExceptionHandler可以用來統(tǒng)一處理方法拋出的異常,給方法加上@ExceptionHandler注解,這個方法就會處理類中其他方法拋出的異常,需要的朋友可以參考下
    2024-01-01
  • 設(shè)置JavaScript自動提示-Eclipse/MyEclipse

    設(shè)置JavaScript自動提示-Eclipse/MyEclipse

    自動提示需要2個組件,分別是:ext-4.0.2a.jsb2||spket-1.6.16.jar,需要的朋友可以參考下
    2016-05-05
  • SpringBoot Redis實現(xiàn)接口冪等性校驗方法詳細講解

    SpringBoot Redis實現(xiàn)接口冪等性校驗方法詳細講解

    這篇文章主要介紹了SpringBoot Redis實現(xiàn)接口冪等性校驗方法,近期一個老項目出現(xiàn)了接口冪等性校驗問題,前端加了按鈕置灰,依然被人拉著接口參數(shù)一頓輸出,還是重復(fù)調(diào)用了接口,通過復(fù)制粘貼,完成了后端接口冪等性調(diào)用校驗
    2022-11-11
  • Springboot如何使用filter對request body參數(shù)進行校驗

    Springboot如何使用filter對request body參數(shù)進行校驗

    這篇文章主要介紹了Springboot如何使用filter對request body參數(shù)進行校驗,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Servlet實現(xiàn)簡單的用戶登錄功能實例代碼

    Servlet實現(xiàn)簡單的用戶登錄功能實例代碼

    這篇文章主要給大家介紹了關(guān)于利用Servlet實現(xiàn)簡單的用戶登錄功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Object.wait()與Object.notify()的用法詳細解析

    Object.wait()與Object.notify()的用法詳細解析

    以下是對java中Object.wait()與Object.notify()的用法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Java中的遞增i++與++i的實現(xiàn)原理詳解

    Java中的遞增i++與++i的實現(xiàn)原理詳解

    這篇文章主要介紹了Java中的i++與++i的實現(xiàn)原理詳解,在Java中,i++是一種常見的遞增操作符,用于將變量i的值增加1,它是一種簡潔且方便的方式來實現(xiàn)循環(huán)和計數(shù)功能,i++可以用于各種情況,本文來看一下其實現(xiàn)原理,需要的朋友可以參考下
    2023-10-10
  • 如何基于Jenkins構(gòu)建Jmeter項目

    如何基于Jenkins構(gòu)建Jmeter項目

    這篇文章主要介紹了如何基于Jenkins構(gòu)建Jmeter項目,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Spring Cloud入門系列服務(wù)提供者總結(jié)

    Spring Cloud入門系列服務(wù)提供者總結(jié)

    這篇文章主要介紹了Spring Cloud入門系列之服務(wù)提供者總結(jié),服務(wù)提供者使用Eureka Client組件創(chuàng)建 ,創(chuàng)建完成以后修改某文件,具體操作方法及實例代碼跟隨小編一起看看吧
    2021-06-06

最新評論

绥芬河市| 平舆县| 尖扎县| 夏河县| 天峨县| 晋中市| 东安县| 陕西省| 西藏| 建德市| 元阳县| 阿克苏市| 泰来县| 琼中| 潼南县| 固安县| 修水县| 凌源市| 吐鲁番市| 泌阳县| 盈江县| 景德镇市| 襄城县| 碌曲县| 定南县| 容城县| 麦盖提县| 武胜县| 广州市| 射洪县| 宜春市| 龙川县| 紫金县| 桂阳县| 政和县| 江北区| 定日县| 疏勒县| 建瓯市| 哈密市| 永年县|