美文网首页
Java与itextpdf实现多张图片合成PDF电子版并跳转目录

Java与itextpdf实现多张图片合成PDF电子版并跳转目录

作者: 爱学习的蹭蹭 | 来源:发表于2023-08-10 22:29 被阅读0次

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();
        }
    }
}

以上代码是为了练习学习记录,是非常简单的一个例子,有兴趣可以拿去用。

相关文章

网友评论

      本文标题:Java与itextpdf实现多张图片合成PDF电子版并跳转目录

      本文链接:https://www.haomeiwen.com/subject/boizpdtx.html