开发手册 欢迎您!
软件开发者资料库

Java 使用aspose.words将一张多帧(frame)图片转成pdf的方法及示例代码

本文主要介绍Java中,使用aspose.words将一张多帧图片,也就是一个图片中包含多张图片,转成pdf文件,就是每张一个页。以及转换示例代码。

1、Aspose组件下载

Aspose下载地址https://products.aspose.com/words/java
破解版下载地址https://download.csdn.net/download/ahgaoyong/9615854
官方文档地址https://docs.aspose.com/display/wordsjava/Home
官方Demo代码Words-for-Java" rel="nofollow">https://github.com/aspose-words/Aspose.Words-for-Java

2、将多帧图片转成pdf

 /**     * 获取license     *      * @return     */    public static boolean getLicense() {        boolean result = false;        try {            InputStream is = Test.class.getClassLoader().getResourceAsStream("\\license.xml");            License aposeLic = new License();            aposeLic.setLicense(is);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }public static void convertImageToPdf(String inputFileName, String outputFileName) throws Exception{                // 验证License               if (!getLicense()) {                 return;               }// 创建 Aspose.Words.Document 和 DocumentBuilder.// 构建器使向文档添加内容变得很简单。Document doc = new Document();DocumentBuilder builder = new DocumentBuilder(doc);// 使用approriate读取器从磁盘加载图像。ImageInputStream iis = ImageIO.createImageInputStream(new File(inputFileName));ImageReader reader = ImageIO.getImageReaders(iis).next();reader.setInput(iis, false);try{// 获取图像中的帧数。int framesCount = reader.getNumImages(true);// 遍历所有帧。for (int frameIdx = 0; frameIdx < framesCount; frameIdx++){// 如果是多帧图像,则在每个新页面之前插入分段。if (frameIdx != 0)       builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);BufferedImage image = reader.read(frameIdx);// Max page sizedouble maxPageHeight = 1584;double maxPageWidth = 1584;double currentImageHeight = ConvertUtil.pixelToPoint(image.getHeight());double currentImageWidth = ConvertUtil.pixelToPoint(image.getWidth());if (currentImageWidth >= maxPageWidth || currentImageHeight >= maxPageHeight){// Get max image size.double[] size = CalculateImageSize(image, maxPageHeight, maxPageWidth, currentImageHeight,currentImageWidth);currentImageWidth = size[0];currentImageHeight = size[1];}                              //我们希望页面的大小与图像的大小相同。                              //将像素转换为点,将页面大小转换为实际图像大小。PageSetup ps = builder.getPageSetup();ps.setPageWidth(currentImageWidth);ps.setPageHeight(currentImageHeight);//  将图像插入到文档中,并将其定位到的左上角该页面。Shape shape = builder.insertImage(image,RelativeHorizontalPosition.PAGE,0,RelativeVerticalPosition.PAGE,0,ps.getPageWidth(),ps.getPageHeight(),WrapType.NONE);}}finally {if (iis != null) {iis.close();reader.dispose();}}// 将文档保存为PDFdoc.save(outputFileName);}public static double[] CalculateImageSize(BufferedImage img, double containerHeight, double containerWidth,double targetHeight, double targetWidth) throws Exception {// Calculate width and heighttargetHeight = containerHeight;targetWidth = containerWidth;// Get size of an imagedouble imgHeight = ConvertUtil.pixelToPoint(img.getHeight());double imgWidth = ConvertUtil.pixelToPoint(img.getWidth());if (imgHeight < targetHeight && imgWidth < targetWidth){targetHeight = imgHeight;targetWidth = imgWidth;}else{// 计算文档中图像的大小double ratioWidth = imgWidth / targetWidth;double ratioHeight = imgHeight / targetHeight;if (ratioWidth > ratioHeight)targetHeight = (targetHeight * (ratioHeight / ratioWidth));elsetargetWidth = (targetWidth * (ratioWidth / ratioHeight));}double[] size = new double[2];size[0] = targetWidth; // widthsize[1] = targetHeight; // heightreturn (size);}

相关文档:

java aspose.cells Excel(.xls,.xlsx)文件转成csv文件和html文件

java利用aspose组件将word转成pdf 中文乱码问题

java 使用URLConnection下载抓取多个图片合成单个pdf文件