public void testWordToPDF(HttpServletResponse response) throws Exception { String FILE_NAME = "E:\\1111.docx"; InputStream inputStream = new FileInputStream(FILE_NAME); InputStream is = DocxToPdf.docToPdf(inputStream); InputStream aa = PdfWaterMark.addWaterMark(is, "admin", 10); //將XWPFDocument文件變為MultipartFile String reportName = "企業123"; MultipartFile multipartFile = inputStreamToCommonsMultipartFile(aa, reportName + ".pdf"); String fileName = multipartFile.getOriginalFilename(); File file = new File("E:\\"+fileName); OutputStream out = null; try{ //獲取文件流,以文件流的方式輸出到新文件 out = new FileOutputStream(file); byte[] ss = multipartFile.getBytes(); for(int i = 0; i < ss.length; i++){ out.write(ss[i]); } }catch(IOException e){ e.printStackTrace(); }finally { if (out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
/** * * @param is 輸入流 * @return */ public static InputStream docToPdf(InputStream is) { try { WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(is); Mapper fontMapper = new IdentityPlusMapper(); if(PhysicalFonts.get("SimSun") == null){ PhysicalFonts.addPhysicalFonts("SimSun", WordUtils.class.getResource("/simsun.ttc")); } fontMapper.put("隸書", PhysicalFonts.get("LiSu")); fontMapper.put("宋體", PhysicalFonts.get("SimSun")); fontMapper.put("微軟雅黑", PhysicalFonts.get("Microsoft Yahei")); fontMapper.put("黑體", PhysicalFonts.get("SimHei")); fontMapper.put("楷體", PhysicalFonts.get("KaiTi")); fontMapper.put("新宋體", PhysicalFonts.get("NSimSun")); fontMapper.put("仿宋", PhysicalFonts.get("FangSong")); fontMapper.put("幼圓", PhysicalFonts.get("YouYuan")); fontMapper.put("方正小標宋簡體", PhysicalFonts.get("SimHei")); fontMapper.put("仿宋_GB2312", PhysicalFonts.get("SimHei")); wordMLPackage.setFontMapper(fontMapper); FastByteArrayOutputStream os = new FastByteArrayOutputStream(); FOSettings foSettings = Docx4J.createFOSettings(); foSettings.setWmlPackage(wordMLPackage); Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL); return os.getInputStream(); } catch (Exception e) { log.error("word轉pdf失敗==", e); throw new RuntimeException("word轉pdf失敗"); } }
/** * pdf生成水印 * @param is 字節輸入流 * @param WaterMarkContent 水印文案 * @param numberOfPage 每頁需要插入的條數 * @throws Exception */ public static InputStream addWaterMark(InputStream is, String WaterMarkContent, int numberOfPage)throws Exception { PdfReader reader = new PdfReader(is); FastByteArrayOutputStream os = new FastByteArrayOutputStream(); PdfStamper stamper = new PdfStamper(reader, os); PdfGState gs = new PdfGState(); //設置字體 BaseFont font = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 設置透明度 gs.setFillOpacity(0.4f); int total = reader.getNumberOfPages() + 1; PdfContentByte content; for (int i = 1; i < total; i++) { content = stamper.getOverContent(i); content.beginText(); content.setGState(gs); //水印顏色 content.setColorFill(BaseColor.LIGHT_GRAY); //水印字體樣式和大小 content.setFontAndSize(font, 35); //插入水印 循環每頁插入的條數 for (int j = 0; j < numberOfPage; j++) { content.showTextAligned(Element.ALIGN_CENTER, WaterMarkContent, 300, 200 * (j + 1), 30); } content.endText(); } stamper.close(); return os.getInputStream(); }
<!--word 轉 pdf --> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>${docx4j.version}</version> </dependency> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-export-fo</artifactId> <version>${export.fo.version}</version> </dependency>
參考鏈接:
https://blog.csdn.net/qq_26772309/article/details/127018051
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
vivo小布同學怎么喚醒?1/4點擊小布再打開手機設置界面,然后點擊Breeno選項。2/4點擊語音在小布設置界面然后點擊Breeno語音選項。3/4你選擇沉睡在新界面再點上方語音操控選項。4/4自動打開功能在新界面再開啟語音喚醒功能,即可結束。vivo手機怎么打開語音助手?伴隨著科學技術的高速發展,我們的手機更新換代很快地,新的功能,新的使用層出不窮,有些時候一些使用技巧我們都需要慢慢慢慢才能能...
二級路由器設置教程?1. 我們登錄到第二路由器頁面。2. 然后單擊路由器設置按鈕進入設置頁面。3. 在設置頁面中,單擊LAN端口設置。4. 進入LAN設置頁面后,我們選擇手動設置。5. 進入手動設置頁面后,我們將路由器的LAN地址更改為其他網段。6. 更改完成后,單擊保存按鈕。然后將WAN端口設置為與主路由器連接。二級路由wan口如何設置?不要設置靜態,實現二級路由器的構造:第一個路由器的廣域網端...
如何在ppt中插入滾動的圖片和音樂?是什么樣子滾動的圖片,滾動的音樂是指從幻燈片開始一直播放到幻燈片結束??自動播放的話這在PPT中最普通啦,自定義動畫中直接設置動畫的開始時間,一般給對象添加動畫后默認的是點擊鼠標開始動畫,然后你可以自己改成從上一項開始,也可以自己定義動畫從什么時間開始播放~~ PPT如何使多張圖片在一張幻燈片中循環滾動播放?使PPT中一張幻燈片中的多張圖片循環播放的步驟:1、選...