package com.emr.util;


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