公司提了個小優化:因為有些圖片是分開上傳(十多張),然后需要打印,需要提供一次性能直接打印,而無需每張圖片保存在打印(上傳人員跟打印人員不是同一撥人),所以就希望能把多張圖片全轉換在一個PDF文件里。
這里使用到了個工具類:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency>
總的來說,還是比較簡單:
package com.example.zgz.demo; import com.itextpdf.text.Document; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfWriter; import java.io.File; import java.io.FileOutputStream; /** * @author zhangguangze * @version v1.0 * @project: zgz * @description: 這里描述類的用處 * @copyright: © 2018 * @company: * @date 2018/5/16 14:23 */ public class PdfUtil { private static String FILEPATH = "F:\\testpdf\\pdf\\"; /** * * @param fileName * 生成pdf文件 * @param imagesPath * 需要轉換的圖片路徑的數組 */ public static void imagesToPdf(String fileName, String imagesPath) { try { fileName = FILEPATH+fileName+".pdf"; File file = new File(fileName); // 第一步:創建一個document對象。 Document document = new Document(); document.setMargins(0, 0, 0, 0); // 第二步: // 創建一個PdfWriter實例, PdfWriter.getInstance(document, new FileOutputStream(file)); // 第三步:打開文檔。 document.open(); // 第四步:在文檔中增加圖片。 File files = new File(imagesPath); String[] images = files.list(); int len = images.length; for (int i = 0; i < len; i++) { if (images[i].toLowerCase().endsWith(".bmp") || images[i].toLowerCase().endsWith(".jpg") || images[i].toLowerCase().endsWith(".jpeg") || images[i].toLowerCase().endsWith(".gif") || images[i].toLowerCase().endsWith(".png")) { String temp = imagesPath + "\\" + images[i]; Image img = Image.getInstance(temp); img.setAlignment(Image.ALIGN_CENTER); // 根據圖片大小設置頁面,一定要先設置頁面,再newPage(),否則無效 document.setPageSize(new Rectangle(img.getWidth(), img.getHeight())); document.newPage(); document.add(img); } } // 第五步:關閉文檔。 document.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { String name = "20001543"; String imagesPath = "F:\\testpdf\\image"; imagesToPdf(name, imagesPath); } }