【实用工具类】使用IText实现多图片转PDF文件
【🍔Java全生态技术学习笔记,一起超神吧🍔】:飞机票
“复制粘贴直接用的JAVA工具类”
说明
最近公司有一个需求,想要将企业的营业执照等图片数据全都打包到一个PDF文件当中。由于当时对IText一无所知,所以Gogle了很多资料完成了当时的需求,在此做一下记录以及分享。
需要引入的POM
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
DEMO示例
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.ArrayList;
/**
* @author Eayon
* @ClassName ImgeToPdf
* @Description 使用Itext 将图片转成PDF
* @Copyright 2020 © kuwo.cn
* @date 2020/8/4 20:37
* @Version: 1.0
*/
public class ImgeToPdf {
/**
* 测试
* @Author: Eayon
* @param args
*/
public static void main(String[] args) {
//这个可以放多个图片地址,然后用逗号分开
String imgUrl = "E:\\qqq.jpg,E:\\ttt.jpg";
//PDF文件生成路径
String filepath = "E:\\企业信息.pdf";
new ImgeToPdf().imgOfPdf(filepath,imgUrl);
}
/**
* @Description: 通过图片路径及生成pdf路径,将图片转成pdf
* @Author: Eayon
* @Date: 2020/8/4
*/
public void imgOfPdf(String filepath, String imgUrl) {
try {
//图片list集合
ArrayList<String> imageUrllist = new ArrayList<String>();
String[] imgUrls = imgUrl.split(",");
for (int i=0; i<imgUrls.length; i++) {
imageUrllist.add(imgUrls[i]);
}
//输出pdf文件路径
String pdfUrl = filepath;
//生成pdf
File file = Pdf(imageUrllist, pdfUrl);
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
public static File Pdf(ArrayList<String> imageUrllist, String mOutputPdfFileName) {
new一个pdf文档 PageSize.A4:是设置文档大小的意思 一般都是A4标准
Document document = new Document(PageSize.A4, 0, 0, 0, 0);
try {
PdfWriter.getInstance(document, new FileOutputStream(mOutputPdfFileName)); //pdf写入
//打开文档
document.open();
// 添加PDF文档的某些信息,比如作者,主题等等
//document.addTitle("标题:企业信息");
//document.addAuthor("作者:zhengtai.li@kuwo.cn");
//document.addSubject("主题:企业信息");
// 写入一段文字
document.add(new Paragraph("Test! Test! Test! Test! Test! Test!"));
//循环图片List,将图片加入到pdf中
for (int i = 0; i < imageUrllist.size(); i++) {
//在pdf创建一页
//document.newPage();
//通过文件路径获取image
Image png1 = Image.getInstance(imageUrllist.get(i));
float heigth = png1.getHeight();
float width = png1.getWidth();
int percent = getPercent(heigth, width);
png1.setAlignment(Image.MIDDLE);//Image.ALIGN_CENTER
//设置图片的绝对位置
//png1.setAbsolutePosition(0, 0);
// 表示是图像的比例;
png1.scalePercent(percent);
//将图片添加到文件中
document.add(png1);
}
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
File mOutputPdfFile = new File(mOutputPdfFileName); //输出流
if (!mOutputPdfFile.exists()) {
mOutputPdfFile.deleteOnExit();
return null;
}
return mOutputPdfFile; //反回文件输出流
}
/**
* 计算图片大小(生成的图片小一点)
* @Author: Eayon
* @param h
* @param w
* @return
*/
public static int getPercent(float h, float w) {
int p = 0;
float p2 = 0.0f;
if (h > w) {
p2 = 297 / h * 100;
} else {
p2 = 210 / w * 100;
}
p = Math.round(p2);
return p;
}
/**
* 计算图片大小(生成的图片大一点)
* @Author: Eayon
* @param h
* @param w
* @return
*/
public static int getPercent2(float h, float w) {
int p = 0;
float p2 = 0.0f;
p2 = 530 / w * 100;
p = Math.round(p2);
return p;
}
}
效果
【🍔Java全生态技术学习笔记,一起超神吧🍔】:飞机票