使用pdfbox插件 base64 PNG转PDF

<dependency>
		<groupId>org.apache.pdfbox</groupId>
		<artifactId>pdfbox</artifactId>

		<version>2.0.28</version>
	</dependency>




@Test
public   void updateResData2222() throws IOException {
//这俩个文件里面的格式是data:image/png;base64,UklGRhJyAABXRUJQVlA4IAZyAABw1。。。。。。。
    String base64Image= readFileUsingBufferedReader("C:\\Users\\ddd\\Desktop\\linshi\\2.txt");
    String base64Image2= readFileUsingBufferedReader("C:\\Users\\ddd\\Desktop\\linshi\\4.txt");

    List<String> base64List=new ArrayList<>();
    base64List.add(base64Image);
    base64List.add(base64Image2);
   // 调用方法将 Base64 字符串转换为 PDF 文件
    try {
        convertBase64ToPdf(base64List, "D:\\image\\output.pdf");
        System.out.println("PDF saved successfully.");
    } catch (Exception e) {
        e.printStackTrace();
    }
}


public static String readFileUsingBufferedReader(String filePath) {
    StringBuilder contentBuilder = new StringBuilder();
    try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
        String currentLine;
        while ((currentLine = br.readLine()) != null) {
            contentBuilder.append(currentLine).append("\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return contentBuilder.toString();
}
public static void convertBase64ToPdf(List<String> base64List, String pdfFilePath) throws IOException {




  // File  file=new File("D:\\image\\3.png");
  //  BufferedImage image = ImageIO.read(file);
   // byte[] imageBytes = Files.readAllBytes(Paths.get("D:\\image\\3.png"));

    // 创建 PDF 文档
    try (PDDocument document = new PDDocument()) {
        // 创建一个新的页面

       // 去掉数据 URL 前缀 "data:image/png;base64,"
        for (String base64Image : base64List) {
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);
            if (base64Image.startsWith("data:image/png;base64,")) {
                base64Image = base64Image.substring("data:image/png;base64,".length());
            }
            base64Image = base64Image.replaceAll("\r|\n", "");
            base64Image = base64Image.trim();
            // 解码 Base64 字符串
            byte[] imageBytes = Base64.getDecoder().decode(base64Image);
            PDImageXObject pdImageXObject = PDImageXObject.createFromByteArray(document, imageBytes, "构建图片错误");
            // 创建内容流
            try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
                // 在页面上绘制图像
                contentStream.drawImage(pdImageXObject, 0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
            }
        }
        // 保存 PDF 文件
        document.save(pdfFilePath);
    }
}

期间遇到的问题。
1.就是Base64.getDecoder().decode 解码失败
主要是可能是含有空格啥的。使用 base64Image.replaceAll(“\r|\n”, “”); 就行了。

2.就是文件转的时候出现
FileTypeDetector.detectFileType(byteArray) 报错不支持image 格式。可能原因就是base64的数据照片虽然命名时.png。但是可能实际时wepd格式的。这里去解决一下就行了。

webp 格式在使用ImageIO.read 可能为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值