1、Java与itextpdf实现多张图片合成PDF电子版并跳转目录标签内容页面
2、导入pom
- itextpdf的版本
5.5.13
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
3、Java代码实现
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
/***
* 此实现只是实现全部目录都是一级别,也没必要做太复杂,能点击跳转页面即可
* 多级目录实现可以参考文章:
* https://blog.csdn.net/qq_38749525/article/details/127362432
*/
public class ImageToPdfConverte1 {
public static void main(String[] args) throws Exception {
// 读取图片文件,此图片可以通过路径读取指定文件夹的所有图片进行指定。
java.util.List<String> imageFiles = new ArrayList<>();
imageFiles.add("D:\\test\\image1.jpeg");
imageFiles.add("D:\\test\\image2.jpeg");
imageFiles.add("D:\\test\\image3.jpeg");
imageFiles.add("D:\\test\\image4.jpeg");
imageFiles.add("D:\\test\\image5.jpeg");
String outputPath = "D:\\test\\" + System.currentTimeMillis() + ".pdf"; // 输出PDF文件名
try {
// 创建文档对象,四个角都设置从0开始,不然会前张图片会稍微覆盖36px象数 36.0F
//是此默认方法导致,this(pageSize, 36.0F, 36.0F, 36.0F, 36.0F);
Document document =new Document(PageSize.A4, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputPath));
// 添加目录
document.open();
PdfContentByte cb = writer.getDirectContent();
cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12);
cb.beginText();
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "目录", 300, 780, 0);
cb.endText();
// 创建目录
PdfOutline root = cb.getRootOutline();
// 添加图片到PDF
for (int i = 0; i < imageFiles.size(); i++) {
String imagePath = imageFiles.get(i);
Image image = Image.getInstance(imagePath);
image.setAlignment(Image.MIDDLE);image.scaleToFit(PageSize.A4.getWidth(),PageSize.A4.getHeight())
// 等比例缩放图片以填满PDF页面
image.scaleAbsolute(document.getPageSize());
// 创建新页面并添加图片
//document.newPage();
document.add(image);
// 换行,增加间距
//document.add(new Paragraph("\n"));
Integer pageNum = i + 1;
//目录跳转页面内容设置。
PdfAction action = PdfAction.gotoLocalPage(pageNum, new PdfDestination(PdfDestination.FIT), writer);
//标题目录,可以通过自己的目的读取txt内容设置,我这里没要求练习使用,
String title = String.valueOf(pageNum);
new PdfOutline(root, action, title, false);
}
// 关闭文档
document.close();
System.out.println("PDF生成完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码是为了练习学习记录,是非常简单的一个例子,有兴趣可以拿去用。
网友评论