日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现PDF生成(Word文档转Pdf)

發(fā)布時間:2023/12/10 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现PDF生成(Word文档转Pdf) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

準備工作

1, 準備模板,模板為Word 文檔,當修改好想要的格式后,保存為Pdf格式。
2,準備軟件(Adobe Acrobat 9 Pro), 需要編輯PDF,如哪里需要添加文字,哪里需要添加圖片

軟件部分

1.點擊表單,啟動表單向?qū)?- 現(xiàn)有文檔, 一直下一步打開需要編輯的PDF
2.進入該頁面,右鍵,文本框劃出,選擇你需要的樣式等

軟件部分需要注意的

1,如圖中的框內(nèi)的Key,需要和Java代碼的Key一致,下面會講到。
2.框框的底部不會真的在你的橫線上(橫線是Word文檔就已經(jīng)畫好的)
3.插入圖片也是拉個文本框

Java 代碼

這個是別人的,下面我自己做了些優(yōu)化

復(fù)制代碼 package wp.util;import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map;import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; /*** Created by wangpeng on 2018/02/01.*/ public class PdfUtils {// 利用模板生成pdf public static void pdfout(Map<String,Object> o) {// 模板路徑 String templatePath = "C:/mytest.pdf";// 生成的新文件路徑 String newPDFPath = "C:/testout1.pdf";PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {BaseFont bf = BaseFont.createFont("c://windows//fonts//simsun.ttc,1" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);Font FontChinese = new Font(bf, 5, Font.NORMAL);out = new FileOutputStream(newPDFPath);// 輸出流reader = new PdfReader(templatePath);// 讀取pdf模板 bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字類的內(nèi)容處理Map<String,String> datemap = (Map<String,String>)o.get("datemap");form.addSubstitutionFont(bf);for(String key : datemap.keySet()){String value = datemap.get(key);form.setField(key,value);}//圖片類的內(nèi)容處理Map<String,String> imgmap = (Map<String,String>)o.get("imgmap");for(String key : imgmap.keySet()) {String value = imgmap.get(key);String imgpath = value;int pageNo = form.getFieldPositions(key).get(0).page;Rectangle signRect = form.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();//根據(jù)路徑讀取圖片Image image = Image.getInstance(imgpath);//獲取圖片頁面PdfContentByte under = stamper.getOverContent(pageNo);//圖片大小自適應(yīng)image.scaleToFit(signRect.getWidth(), signRect.getHeight());//添加圖片image.setAbsolutePosition(x, y);under.addImage(image);}stamper.setFormFlattening(true);// 如果為false,生成的PDF文件可以編輯,如果為true,生成的PDF文件不可以編輯stamper.close();Document doc = new Document();Font font = new Font(bf, 32);PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {System.out.println(e);} catch (DocumentException e) {System.out.println(e);}}public static void main(String[] args) {Map<String,String> map = new HashMap();map.put("name","張三");map.put("creatdate","2018年1月1日");map.put("weather","晴朗");map.put("sports","打羽毛球");Map<String,String> map2 = new HashMap();map2.put("img","c:/50336.jpg");Map<String,Object> o=new HashMap();o.put("datemap",map);o.put("imgmap",map2);pdfout(o);} }

我自己的,加入了一些優(yōu)化,看不懂的就結(jié)合起來看一下

package com.yekj.ps01.utils;import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.itextpdf.text.*; import com.itextpdf.text.Font; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import com.yekj.ps01.config.OssConfig; import com.yekj.ps01.service.db.DBOperationI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;import java.awt.*; import java.io.*; import java.net.URL; import java.util.Date; import java.util.HashMap; import java.util.Map;/*** @author ZXY* @date 2021年3月1日14:13:47* @description 生成PDf* @param* @param*/ @Service public class PdfUtils {private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);// 利用模板生成pdfpublic Map<String , Object> pdfout2(Map<String,Object> o,String pdfName,String orederId) {// 模板路徑String templatePath = "D:\\localA\\src\\main\\resources\\static\\pdfTemplate\\testdriver.pdf";String newPDFPath = "C:\\Users\\Administrator\\Desktop/ttttdd.pdf";//String templatePath = "/var/testDriver/pdf/testdriver.pdf";// 生成的新文件路徑//String newPDFPath = "/var/testDriver/pdf/pdfTemplate/"+pdfName;PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {BaseFont bf = BaseFont.createFont("templates/font/simsun.ttc,1" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);Font FontChinese = new Font(bf, 5, Font.NORMAL);out = new FileOutputStream(newPDFPath);// 輸出流reader = new PdfReader(templatePath);// 讀取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字類的內(nèi)容處理Map<String,String> datemap = (Map<String,String>)o.get("datemap");form.addSubstitutionFont(bf);for(String key : datemap.keySet()){String value = datemap.get(key);form.setField(key,value);}//圖片類的內(nèi)容處理Map<String,String> imgmap = (Map<String,String>)o.get("imgmap");for(String key : imgmap.keySet()) {try {String value = imgmap.get(key);logger.info("獲取PDF圖片 key 為: {} , 值為:",key, value);String imgpath = value;int pageNo = form.getFieldPositions(key).get(0).page;Rectangle signRect = form.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();String replace = "";try {//使用你們的地址OSSClient ossClient = new OSSClient("http://oss-cn-12453456.com","LTAI5tHRWiezWS7AKgEpkHGb", "klI71IqG6eAYo9w0GbZOR3BBE6Bbpv");GeneratePresignedUrlRequest generatePresignedUrlRequest ;// 設(shè)置URL過期時間為1小時Date expiration = new Date(new Date().getTime() + 3600 * 1000);// 正式環(huán)境generatePresignedUrlRequest =new GeneratePresignedUrlRequest("caftdt-prod", "123456789/"+imgpath);generatePresignedUrlRequest.setExpiration(expiration);URL urls = ossClient.generatePresignedUrl(generatePresignedUrlRequest);String string = urls.toString();//正式環(huán)境replace = string.replace("http://1234.cn");}catch (Exception ex){ex.printStackTrace();logger.error("轉(zhuǎn)換PDF獲取圖片地址鏈接錯誤 :{} ",ex);}Image image = Image.getInstance(replace);//獲取圖片頁面PdfContentByte under = stamper.getOverContent(pageNo);//圖片大小自適應(yīng)image.scaleToFit(signRect.getWidth(), signRect.getHeight());//處理簽名旋轉(zhuǎn)if (key.equals("userImg")){//旋轉(zhuǎn)圖片image.setRotationDegrees(90);}//添加圖片image.setAbsolutePosition(x, y);under.addImage(image);}catch (Exception ex){ex.printStackTrace();logger.error("PDF圖片處理錯誤 :{} ,錯誤為: {}",key,ex.getMessage());}}stamper.setFormFlattening(true);// 如果為false,生成的PDF文件可以編輯,如果為true,生成的PDF文件不可以編輯stamper.close();Document doc = new Document();Font font = new Font(bf, 32);PdfCopy copy = new PdfCopy(doc, out);doc.open();//改成這樣就不會只顯示一頁了。PdfImportedPage importPage = null;///循環(huán)是處理成品只顯示一頁的問題for (int i=1;i<=reader.getNumberOfPages();i++){importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);copy.addPage(importPage);}doc.close();} catch (IOException e) {e.printStackTrace();logger.error("PDF 生成時內(nèi)部異常: {}",e);} catch (DocumentException e) {e.printStackTrace();logger.error("PDF 異常了: {}",e);}return null;} }**這里需要特別注意,這里的Key,必須要和軟件里面的Key一致不然會寫入的時候沒有值**map2.put("imgA",imgA);map2.put("imgB",imgB);//用戶簽字圖片map2.put("userImg",userImg);Map<String,Object> o=new HashMap();logger.info("PDF 圖片信息處理完畢 " );o.put("datemap",map);o.put("imgmap",map2);pdf.pdfout(o, pdfName, testId);

總結(jié)

以上是生活随笔為你收集整理的Java实现PDF生成(Word文档转Pdf)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲色图国产精品 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 国产乱码精品1区2区3区 | 成人无码精品1区2区3区免费看 | 在线观看日韩 | 国模视频在线 | 久久色中文字幕 | 久久久久久久一区二区三区 | 国产一区免费在线观看 | 亚洲午夜精品在线 | 欧美黑人又粗又大又爽免费 | 91视频插插插 | 亚洲涩涩视频 | 欧美大片在线看免费观看 | 亚洲欧美视频一区二区 | 日韩一级在线播放 | 一本黄色片 | 久久九九国产精品 | 鲁一鲁一鲁一鲁一av | 成人免费看片' | 日本午夜电影网站 | 国内自拍第三页 | 波多野结衣电车痴汉 | 在线免费看a | 中文字幕色图 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 亚洲天堂手机版 | 亚洲精品电影院 | www.日韩视频 | 男女啪啪在线观看 | 97碰碰碰| 天天干天天插 | 欧美 日韩 国产精品 | h色视频在线观看 | 亚洲黄色网络 | 日韩在线观看你懂的 | 中文字幕精品久久久 | 国产99久久精品 | 久久国产91 | 天天影视插插插 | 无套白嫩进入乌克兰美女 | 黄色免费网站在线观看 | 制服丝袜先锋影音 | jizz免费观看 | 日本边添边摸边做边爱 | 美女国产精品 | 成人免费精品 | 成人欧美一区二区三区小说 | 精品久久久影院 | 91天天爽 | 97人妻人人澡人人爽人人精品 | 毛片大片 | 免费的理伦片在线播放 | 蜜桃91精品入口 | 日本一级理论片在线大全 | 国产污在线观看 | 五月六月婷婷 | 林雅儿欧洲留学恋爱日记在线 | 久久久全国免费视频 | 在线能看的av | 亚洲射射射 | mm1313亚洲国产精品无码试看 | 3p视频在线 | 99色热| 伊人网亚洲 | 国产毛毛片 | 伊人五月综合 | 69社| 久久国产精品久久久久久电车 | 拔插拔插海外华人永久免费 | 韩国av在线免费观看 | wwwxxx在线播放 | 国产调教视频 | 日本一本视频 | 深夜福利91 | 香蕉久久视频 | 日韩午夜免费 | 日本视频不卡 | 日韩精品久久久久久免费 | 大香伊人久久 | 玖玖精品在线视频 | 欧美极品少妇xxxxⅹ喷水 | 久久久久久不卡 | 女人18毛片一区二区三区 | 成人在线视频一区二区 | 亚洲国产成人一区二区 | 国产一区不卡 | 欧美日韩中文字幕视频 | 美女大bxxxxn内射 | 东京av男人的天堂 | 波多野结衣亚洲一区二区 | 国产美女喷水 | 青草99 | 最新日本中文字幕 | 又黄又爽的视频在线观看 | 日本视频h | 亚洲精品一区二区在线观看 | 国产在线观看免费av | 95香蕉视频 |