利用iText将多张图处转为一个pdf

项目需要将多张JPG格式的图片转为一个PDF再进行后续处理,百度查资源看博客发现用iText比较简单,也没想到会这么简单,刷新了我的彩虹心,话不多说,直接上code。

项目用的是maven进行管理的,所以最开始需要引入依赖,如下:

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
</dependency>
另外需要引入一个包,用来输出中文
<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
</dependency>

如果需要用到密码设置之类,还需要再引入一个
<dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.54</version>
</dependency>

准备工作做完后就可以开始上手了,直接上一个最终版
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;



/**
 * Created by Administrator on 2017/12/22.
 */
public class JPGTPDF {
    public  static void main(String[] args)throws FileNotFoundException,DocumentException,IOException{
        Document document=new Document(PageSize.A5,50,50,50,50);
        PdfWriter pdfWriter=PdfWriter.getInstance(document,new FileOutputStream("E:/work/test.pdf"));
        document.open();
        //document.setPageSize(PageSize.A4);        //设置页面大小
//        document.add(new Paragraph("Hello World"));
        document.addTitle("this is a title D");
        document.addAuthor("mld");
        document.addSubject("this is a subject D");
        document.addKeywords("Keywords D");
        document.addCreationDate();
        Image image=null;
//        image=Image.getInstance("E:/picSource/20170905100453_3245.jpg");
        File file=new File("E:/picSource");
        File[] fileList=file.listFiles();
        for(int i=0;i<fileList.length;i++){
           image=Image.getInstance("E:/picSource/"+fileList[i].getName());
           Map<String,Float> param=new HashMap<String,Float>();
            param=getHeighWidth(image);
            image.scaleAbsolute(param.get("imageWidth"),param.get("imageHeight"));
            image.setAlignment(Element.ALIGN_CENTER);                      //设置元素居中
            //image.setAlignment(1);                      //设置元素居中
            document.add(image);
        }
        document.close();
    }
    public static Map<String,Float> getHeighWidth(Image image){
        Float imageHeight=image.getScaledHeight();
        Float imageWidth=image.getScaledWidth();
        Map<String,Float> resultParam=new HashMap<String, Float>();
        int i=0;
        while(imageHeight>500||imageWidth>500){
            image.scalePercent(100-i);
            i++;
            imageHeight=image.getScaledHeight();
            imageWidth=image.getScaledWidth();
        }
        resultParam.put("imageWidth",imageWidth);
        resultParam.put("imageHeight",imageHeight);
        return resultParam;
    }

貌似上面丢了个大括号,反正即使是小白也能根据这个过程实现自己的需求。另外,不管什么需求,千万要动手做,光是想是想不出来了。满满的IT自豪感,哈哈。

iTextPDF一个强大的Java库,用于创建、读取和修改PDF文档。如果你想要将PDF转换成图像文件(如PNG或JPEG),你可以利用iTextPDF的一些关键功能。 ### 使用步骤: #### 步骤 1 - 导入依赖 首先,你需要在项目中导入iText的相关依赖。如果使用Maven,可以在`pom.xml`文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>7.1.4</version> <!-- 或者你使用的其他版本 --> </dependency> </dependencies> ``` #### 步骤 2 - 加载 PDF 文档 接下来,你需要加载你想转换为图像的PDF文件。可以使用 `PdfReader` 类来完成这一操作。 ```java import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; try { PdfReader reader = new PdfReader("path_to_your_pdf_file.pdf"); } catch (Exception e) { // Handle exception } ``` #### 步骤 3 - 获取页面并创建 Image 对象 遍历PDF文档的每一页,并从每页中提取数据。之后,可以使用 `Image` 类将每一帧转换为图像文件。 ```java import com.itextpdf.kernel.image.Image; import com.itextpdf.layout.Document; import javax.imageio.ImageIO; for(int i=1; i<=reader.getNumberOfPages(); i++) { Document doc = new Document(reader.getPage(i)); try { Image img = Image.getInstance(doc); String imagePath = "path_to_output_image_" + i + ".jpg"; // 自定义输出路径 ImageIO.write(img.getImage(), "jpg", new File(imagePath)); } catch (Exception e) { // Handle exception } } reader.close(); ``` ### 相关问题: 1. **如何调整图像大小?** 当使用iTextPDFPDF转为图像时,默认会按照PDF页面的比例生成图像。若需自定义尺寸,可在创建`Image`实例时传递宽度和高度参数。 2. **能否将PDF的部分内容提取出来作为图片?** 可以通过指定`PdfReader`时传入页码范围或特定页面索引来只理部分页面内容。 3. **iTextPDF是否支持多种输出格式?** 是的,除了常见的JPG和PNG格式外,iText还支持其他格式,如SVG,可通过调整`ImageIO.write()`方法中的第二个参数来选择输出格式。例如:`ImageIO.write(img.getImage(), "svg", new File(imagePath));`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值