Java WORD转换PDF 并添加水印 (附赠jar提取链接)

Java WORD转换PDF 并添加水印
直接上代码

实现功能
docx文档转换为PDF
转换之后排版不混乱
使用工具(Jar包)
aspose-words-15.8.0-jdk16.jar(用于PDF转换 )
链接:https://pan.baidu.com/s/1EVfVLsl0jOJzCkvbO1Szqw
提取码:dusq
环境
JDK1.8
代码

  private static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = PdfUtil.class.getClassLoader().getResourceAsStream("License.xml"); // license.xml应放在..\WebRoot\WEB-INF\classes路径下
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * @param wordPath 需要被转换的word全路径带文件名
     * @param pdfPath  转换之后pdf的全路径带文件名
     */
    public static void doc2pdf(String wordPath, String pdfPath) {
        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
            return;
        }
        try {
            long old = System.currentTimeMillis();
            File file = new File(pdfPath); //新建一个pdf文档
            FileOutputStream os = new FileOutputStream(file);
            Document doc = new Document(wordPath); //Address是将要被转化的word文档
            doc.save(os, com.aspose.words.SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
            long now = System.currentTimeMillis();
            os.close();
            System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static boolean addPngWatermark(String InPdfFile, String outPdfFile , String textWatermark){

        try{
            PdfReader reader = new PdfReader(InPdfFile);
            //reader.unethicalreading = true;
            File file = new File(outPdfFile);
            if(!file.exists()){
                //先得到文件的上级目录,并创建上级目录,在创建文件
                file.getParentFile().mkdir();
                try {
                    //创建文件
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
                    outPdfFile));
            //这里的字体设置比较关键,这个设置是支持中文的写法
            BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
                    BaseFont.EMBEDDED);// 使用系统字体
            int total = reader.getNumberOfPages();
            //文字的长度
            int l= textWatermark.length();
            int size=0;
            if(l<=6){
                size=22;
            }
            if(l>6 && l<=11){
                size=15;
            }
            if(l>11){
                size=10;
            }
            if(l>15){
                size=5;
            }
            Font f= new Font(base,size);
            Phrase p = new Phrase(textWatermark, f);
            // transparency
            PdfGState gs1 = new PdfGState();
            // 设置水印透明度
            gs1.setFillOpacity(0.1f);
            PdfContentByte over;
            com.itextpdf.text.Rectangle pagesize;
            for (int i = 1; i <=total; i++) {
                pagesize = reader.getPageSizeWithRotation(i);
                over = stamper.getOverContent(i);
                over.saveState();
                over.setGState(gs1);
                over.setTextMatrix(30, 30);
                over.setColorFill(BaseColor.GRAY);
                for (int y = 0; y < 10; y++) {
                    for (int x = 0; x < 8; x++) {
                        // 水印文字成45度角倾斜
                        ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 80 + 140 * x, 158 * y, -45);
                    }
                }
                over.restoreState();
            }
            stamper.close();
            reader.close();
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
    static void word(HttpServletRequest request){
        String basePath = request.getSession().getServletContext().getRealPath("/upload");

    }

    public static void main(String[] args) {
        long old = System.currentTimeMillis();
        //word 和excel 转为pdf
        String filePaths = "word地址";
        String fileName = "转换名称";
        String pdfPath = "G:/" + fileName + ".pdf";
        String pdfPathWatermark = "存储地址";
        doc2pdf(filePaths, pdfPath);//filePaths需要转换的文件位置 pdfPath为存储位置
        addPngWatermark(pdfPath,pdfPathWatermark,"水印");
        long now = System.currentTimeMillis();
        System.out.println("总共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
    }

License.xml

<License>
    <Data>
        <Products>
            <Product>Aspose.Total for Java</Product>
            <Product>Aspose.Words for Java</Product>
        </Products>
        <EditionType>Enterprise</EditionType>
        <SubscriptionExpiry>20991231</SubscriptionExpiry>
        <LicenseExpiry>20991231</LicenseExpiry>
        <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
    </Data>
    <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值