<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 可能为空。