马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.Comparator;
- import com.itextpdf.io.image.ImageDataFactory;
- import com.itextpdf.kernel.pdf.PdfDocument;
- import com.itextpdf.kernel.pdf.PdfWriter;
- import com.itextpdf.layout.Document;
- import com.itextpdf.layout.element.Image;
- import com.itextpdf.text.PageSize;
- import jodd.util.NaturalOrderComparator;
- /**
- * 文件夹下的图片合并成pdf文件
- *
- */
- public class ImagesToPdf {
- public static void main(String[] args) {
- String imageFolderPath = "D:\\pic\";
- String outputPdfPath = "D:\\pic\\output.pdf";
- try {
- convertImagesToPdf(imageFolderPath, outputPdfPath);
- System.out.println("PDF created successfully.");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @SuppressWarnings("unchecked")
- public static void convertImagesToPdf(String imageFolderPath, String outputPdfPath) throws IOException {
- // 创建PDF文档
- PdfWriter writer = new PdfWriter(new FileOutputStream(outputPdfPath));
- PdfDocument pdfDoc = new PdfDocument(writer);
- Document document = new Document(pdfDoc);
- // 获取文件夹中的所有文件
- File folder = new File(imageFolderPath);
- File[] listOfFiles = folder.listFiles();
- if (listOfFiles != null) {
- // 按照文件名排序
- // Arrays.sort(listOfFiles, Comparator.comparing(File::getName));
- // 使用Collator进行中文排序
- // Collator collator = Collator.getInstance(Locale.CHINA);
- // Arrays.sort(listOfFiles, Comparator.comparing(File::getName, collator));
- // 使用自然排序
- // Arrays.sort(listOfFiles, Comparator.comparing(File::getName, StringUtils.getNaturalComparator()));
- // 使用自然排序
- Arrays.sort(listOfFiles, Comparator.comparing(File::getName, new NaturalOrderComparator()));
- boolean firstImage = true; // 标记是否为第一张图片
- for (File file : listOfFiles) {
- if (file.isFile() && isImageFile(file)) {
- // 将图片添加到PDF文档
- Image img = new Image(ImageDataFactory.create(file.getAbsolutePath()));
- img.setAutoScale(true); // 自动缩放图片以适应页面
- // img.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight()); // 调整图片尺寸以适应A4页面
- // 设置图片的边距为0
- img.setMargins(-30, -30, -30, -30);
- if (!firstImage) {
- // 如果不是第一张图片,添加新页面
- document.add(new com.itextpdf.layout.element.AreaBreak());
- } else {
- firstImage = false; // 标记为非第一张图片
- }
- document.add(img);
- }
- }
- }
- // 关闭文档
- document.close();
- }
- private static boolean isImageFile(File file) {
- String fileName = file.getName().toLowerCase();
- return fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") ||
- fileName.endsWith(".png") || fileName.endsWith(".bmp") || fileName.endsWith(".gif");
- }
- }
复制代码 上面的代码,图片无法整个覆盖页面。如果图片的文件名是数字的话,也可以使用以下方式:
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.imageio.ImageIO;
- import org.apache.pdfbox.pdmodel.PDDocument;
- import org.apache.pdfbox.pdmodel.PDPage;
- import org.apache.pdfbox.pdmodel.PDPageContentStream;
- import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
- import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
- public class ImgToPdf {
- public static void main(String[] args) throws IOException {
- // Create a new PDF document
- PDDocument document = new PDDocument();
- try {
- // Get list of image files to merge
- List<File> imageFiles = getListOfImageFiles();
- for (File imageFile : imageFiles) {
- // Create a new page in the document
- PDPage page = new PDPage();
- document.addPage(page);
- // Load the image file and add it to the page
- PDImageXObject image = LosslessFactory.createFromImage(document, ImageIO.read(imageFile));
- PDPageContentStream contentStream = new PDPageContentStream(document, page);
- contentStream.drawImage(image, 0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
- contentStream.close();
- }
- // Save the merged PDF document
- document.save("output.pdf");
- } finally {
- document.close();
- }
- }
- private static List<File> getListOfImageFiles() {
- List<File> list = new ArrayList<>();
- for (int i = 1; i <= 7; i++) {
- File file = new File("D://pic/" + i + ".png");
- list.add(file);
- }
- return list;
- }
- }
复制代码 修改后:
- import org.apache.pdfbox.pdmodel.PDDocument;
- import org.apache.pdfbox.pdmodel.PDPage;
- import org.apache.pdfbox.pdmodel.PDPageContentStream;
- import org.apache.pdfbox.pdmodel.common.PDRectangle;
- import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
- import jodd.util.NaturalOrderComparator;
- import java.io.File;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.Comparator;
- public class ImagesToPdf {
- public static void main(String[] args) {
- String inputFolder = "D:\\pic\";
- String outputPdf = "D:\\pic\\output.pdf";
-
- try {
- convertImagesToPdf(inputFolder, outputPdf);
- System.out.println("PDF created successfully with all images!");
- } catch (IOException e) {
- System.err.println("Error creating PDF: " + e.getMessage());
- e.printStackTrace();
- }
- }
- public static void convertImagesToPdf(String imageFolder, String outputPdf) throws IOException {
- // 创建PDF文档
- PDDocument document = new PDDocument();
-
- File folder = new File(imageFolder);
- File[] imageFiles = folder.listFiles();
-
- if (imageFiles != null) {
- // 按文件名排序
- // Arrays.sort(imageFiles, Comparator.comparing(File::getName));
- Arrays.sort(imageFiles, Comparator.comparing(File::getName, new NaturalOrderComparator()));
- for (File imageFile : imageFiles) {
- if (isImageFile(imageFile)) {
- // 创建新页面
- PDPage page = new PDPage(PDRectangle.A4);
- document.addPage(page);
-
- // 加载图片
- PDImageXObject image = PDImageXObject.createFromFile(imageFile.getAbsolutePath(), document);
-
- // 计算图片缩放比例以适应页面
- float scale = Math.min(
- PDRectangle.A4.getWidth() / image.getWidth(),
- PDRectangle.A4.getHeight() / image.getHeight()
- );
-
- float scaledWidth = image.getWidth() * scale;
- float scaledHeight = image.getHeight() * scale;
-
- // 计算居中位置
- float x = (PDRectangle.A4.getWidth() - scaledWidth) / 2;
- float y = (PDRectangle.A4.getHeight() - scaledHeight) / 2;
-
- // 添加图片到页面
- try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
- contentStream.drawImage(image, x, y, scaledWidth, scaledHeight);
- }
- }
- }
- }
-
- // 保存PDF
- document.save(outputPdf);
- document.close();
- }
- private static boolean isImageFile(File file) {
- String name = file.getName().toLowerCase();
- return name.endsWith(".jpg") || name.endsWith(".jpeg") ||
- name.endsWith(".png") || name.endsWith(".bmp") ||
- name.endsWith(".gif");
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |