java通過PDF模板填寫PDF表單,包括圖片
阿新 • • 發佈:2018-11-09
需要用到的java包:
itext.jar、iTextAsian.jar的JAR包。這個包裡面定義了與中文輸出相關的一些檔案。
編寫的表單如下:
import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; /** * pdf工具類 * @author MOSHUNWEI * @since 2018-02-01 */ public class PDFUtil { /** * 根據模板生成pdf * @param data Map(String,Object) * @return */ public static boolean createPDF(String path,Map<String, Object> data) { PdfReader reader = null; AcroFields s = null; PdfStamper ps = null; ByteArrayOutputStream bos = null; try { reader = new PdfReader("D:\\test.pdf"); bos = new ByteArrayOutputStream(); ps = new PdfStamper(reader, bos); s = ps.getAcroFields(); /** * 使用中文字型 使用 AcroFields填充值的不需要在程式中設定字型,在模板檔案中設定字型為中文字型 Adobe 宋體 std L */ BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false); /** * 設定編碼格式 */ s.addSubstitutionFont(bfChinese); // 遍歷data 給pdf表單表格賦值 for (String key : data.keySet()) { s.setField(key,data.get(key).toString()); } // 如果為false那麼生成的PDF檔案還能編輯,一定要設為true ps.setFormFlattening(true); /** * 新增圖片 */ String imgpath="D:/n5.jpg"; int pageNo = s.getFieldPositions("img").get(0).page; Rectangle signRect = s.getFieldPositions("img").get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); // 讀圖片 Image image = Image.getInstance(imgpath); // 獲取操作的頁面 PdfContentByte under = ps.getOverContent(pageNo); // 根據域的大小縮放圖片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 新增圖片 image.setAbsolutePosition(x, y); under.addImage(image); @SuppressWarnings("resource") FileOutputStream fos = new FileOutputStream("d:\\shouju_fb.pdf"); fos.write(bos.toByteArray()); return true; } catch (IOException | DocumentException e) { System.out.println("讀取檔案異常"); e.printStackTrace(); return false; }finally { try { bos.close(); ps.close(); reader.close(); } catch (IOException | DocumentException e) { System.out.println("關閉流異常"); e.printStackTrace(); } } } public static void main(String[] args) { Map<String, Object> data = new HashMap<String, Object>(); data.put("id", "12312321"); data.put("name", "小帥哥"); data.put("sex", "男"); data.put("age", "21"); PDFUtil.createPDF("D:/n5.jpg",data); } }
還有相應的編輯pdf表單的工具,預設用Adobe Acrobat。