java文档转换和添加水印开发记录,附源码

需求:需要给word添加水印,然后将word转成pdf,

记住:是添加水印然后转换文件格式,这个有坑

文档操作基本网上方案都是spiredoc aspose poi

之前项目文档转换用的spiredoc直接用了,水印之前只是了解过spiredoc可以实现,直接用的spiredoc来添加水印

生产跑了几天发现正常,突然有一次报错了,发现是因为文件大于3页,spiredoc免费版文件转换不能超过3页

然后就把文件转换改成了spiredoc,最终结果是:使用spiredoc添加水印,然后使用aspose来实现文件转换

继续上线,项目跑了几天,一切ok

本地测试,ok

直接上线,生产一直卡在文件转换,添加水印没问题,转换直接报错,说读到文件末尾什么的,经验证,添加水印的文件是存在的

一开始是怀疑文件格式有问题,将生产文件拿到本地,直接用wps等打开发现没有问题

一时不知道如何解决

一直查问题,丝毫没有任何头绪

换各种j版本的jar,都失败

最后直接用生产文件在本地转换发现也是不行

然后就怀疑是spiredoc和aspose之间不兼容

然后就尝试只用aspose,验证成功,证明spiredoc和aspose之间不兼容

package pers.wwz;




import com.aspose.words.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;

public class Word2PdfAsposeUtil2 {
	public static boolean getLicense() {
        boolean result = false;  
        try {  
            InputStream is = Word2PdfAsposeUtil2.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;  
    }



    public static void addWaterMask2() throws Exception {

        //1.有一个源文件
        File f=new File("1.png");
        //2.将一个字节流  这个管怼到源文件上
        FileInputStream fp=new FileInputStream(f);

        Document doc = new Document("1.doc");


        //图片水印
        ImageWatermarkOptions imageWatermarkOptions = new ImageWatermarkOptions();
        imageWatermarkOptions.setScale(1);//设置图片比例
        imageWatermarkOptions.isWashout(false);//设置对图片进行水洗(淡化颜色效果)
        BufferedImage bufferedImage = ImageIO.read(fp);

        doc.getWatermark().setImage(bufferedImage, imageWatermarkOptions);


        doc.save("2.doc");
    }
    public static boolean doc2pdf(String inPath, String outPath) {
    	System.out.println("inPath1234="+inPath);
    	System.out.println("outPath12="+outPath);
        //if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
        //    return false;
       // }
        FileOutputStream os = null;
        try {
            long old = System.currentTimeMillis();
            File file = new File(outPath); // 新建一个空白pdf文档
            os = new FileOutputStream(file);
            Document doc = new Document(inPath); // Address是将要被转化的word文档
            doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,
                                         // EPUB, XPS, SWF 相互转换
            long now = System.currentTimeMillis();
            System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally {
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
    }


    public static void main(String[] args) throws Exception {


        addWaterMask2();


        Word2PdfAsposeUtil2.doc2pdf("2.doc", "2.pdf");


    }
  }

猜你喜欢

转载自blog.csdn.net/wangwenzhe222/article/details/131845828