Java将图片转化为PDF的方法(1)

  新接到一个任务,需要将原来的tif图片转为PDF存储,并且需要在适合的存储大小下保证PDF清晰度,经过整理,转换方法分为插件和无插件两类,

需要插件一般都借助adobe pdf,wps控件,ImageMagick软件等,因为项目需要跨平台,所以选择无插件方式,经过查阅资料,总结了三种:

1. 使用收费版的aspose.pdf, 功能很强大,提供了丰富API,包括PDF转换,合成,压缩等。

2. 使用开源的ITEXT,最新版本功能很完善,几乎满足所有日常需求推荐。

3. 使用Apache的pdfbox类库

  首先,使用aspose.pdf完成转换,代码如下:

import com.aspose.pdf.*;

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

public class Convert2Pdf {
    //授权
    public static boolean getLicense() {
        try {
            String license2 = "<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>111</Signature>"
                    + "</License>";
            InputStream is2 = new ByteArrayInputStream(license2.getBytes("UTF-8"));
            License asposeLic2 = new License();
            asposeLic2.setLicense(is2);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static void convert(String sourcePath, String targetPath) throws IOException {
        //创建文档
        Document doc = new Document();
        //新增一页
        Page page = doc.getPages().add();
        //设置页边距
        page.getPageInfo().getMargin().setBottom(0);
        page.getPageInfo().getMargin().setTop(0);
        page.getPageInfo().getMargin().setLeft(0);
        page.getPageInfo().getMargin().setRight(0);
        //创建图片对象
        Image image = new Image();
        BufferedImage bufferedImage = ImageIO.read(new File(sourcePath));
        //获取图片尺寸
        int height = bufferedImage.getHeight();
        int width = bufferedImage.getWidth();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "tif", baos);
        baos.flush();
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        image.setImageStream(bais);
        //设置pdf页的尺寸与图片一样
        page.getPageInfo().setHeight(height);
        page.getPageInfo().setWidth(width);
        //添加图片
        page.getParagraphs().add(image);
        //保存
        doc.save(targetPath, SaveFormat.Pdf);
    }
    public static void main(String[] args) {
        String source = "E:/SETUP/1.tif";
        String target = "E:/SETUP/1.pdf";
        if(getLicense()) {
            try {
                convert(source, target);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

posted @ 2020-07-06 20:39  哲雪君!  阅读(15581)  评论(1编辑  收藏  举报