您好,登錄后才能下訂單哦!
使用JAVA怎么將PDF轉換為HTML文檔?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
引入Maven依賴
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.12</version> </dependency>
工具實現類
package com.frame.utils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; public class PdfConvertHtmlUtil { /** * 日志對象 */ private static Logger logger = LoggerFactory.getLogger(PdfConvertHtmlUtil.class); /** * PDF文檔流轉Png * @param pdfFileInputStream * @return BufferedImage */ public static BufferedImage pdfStreamToPng(InputStream pdfFileInputStream){ PDDocument doc = null; PDFRenderer renderer = null; try { doc = PDDocument.load(pdfFileInputStream); renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); BufferedImage image = null; for (int i = 0; i < pageCount; i++) { if (image != null) { image = combineBufferedImages(image, renderer.renderImageWithDPI(i, 144)); } if (i == 0) { image = renderer.renderImageWithDPI(i, 144); // Windows native DPI } // BufferedImage srcImage = resize(image, 240, 240);//產生縮略圖 } return combineBufferedImages(image); } catch (IOException e) { e.printStackTrace(); }finally { try { if(doc != null){doc.close();} } catch (IOException e) { e.printStackTrace(); } } return null; } /** *BufferedImage拼接處理,添加分割線 * @param images * @return BufferedImage */ public static BufferedImage combineBufferedImages(BufferedImage... images) { int height = 0; int width = 0; for (BufferedImage image : images) { //height += Math.max(height, image.getHeight()); height += image.getHeight(); width = image.getWidth(); } BufferedImage combo = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = combo.createGraphics(); int x = 0; int y = 0; for (BufferedImage image : images) { //int y = (height - image.getHeight()) / 2; g2.setStroke(new BasicStroke(2.0f));// 線條粗細 g2.setColor(new Color(193, 193, 193));// 線條顏色 g2.drawLine(x, y, width, y);// 線條起點及終點位置 g2.drawImage(image, x, y, null); //x += image.getWidth(); y += image.getHeight(); } return combo; } /** * 通過Base64創建HTML文件并輸出html文件 * @param base64 * @param htmlPath html保存路徑 */ public static void createHtmlByBase64(String base64,String htmlPath) { StringBuilder stringHtml = new StringBuilder(); PrintStream printStream = null; try { // 打開文件 printStream = new PrintStream(new FileOutputStream(htmlPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } // 輸入HTML文件內容 stringHtml.append("<html><head>"); stringHtml.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); stringHtml.append("<title></title>"); stringHtml.append("</head>"); stringHtml.append( "<body style=\"\r\n" + " text-align: center;\r\n" + " background-color: #C1C1C1;\r\n" + "\">"); stringHtml.append("<img src=\"data:image/png;base64," + base64 + "\" />"); stringHtml.append("<a name=\"head\" style=\"position:absolute;top:0px;\"></a>"); //添加錨點用于返回首頁 stringHtml.append("<a style=\"position:fixed;bottom:10px;right:10px\" href=\"#head\">回到首頁</a>"); stringHtml.append("</body></html>"); try { // 將HTML文件內容寫入文件中 printStream.println(stringHtml.toString()); } catch (Exception e) { e.printStackTrace(); }finally { if(printStream != null){printStream.close();} } } /** * bufferedImage 轉為 base64編碼 * @param bufferedImage * @return */ public static String bufferedImageToBase64(BufferedImage bufferedImage) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); String png_base64 = ""; try { ImageIO.write(bufferedImage, "png", byteArrayOutputStream);// 寫入流中 byte[] bytes = byteArrayOutputStream.toByteArray();// 轉換成字節 BASE64Encoder encoder = new BASE64Encoder(); // 轉換成base64串 刪除 \r\n png_base64 = encoder.encodeBuffer(bytes).trim() .replaceAll("\n", "") .replaceAll("\r", ""); } catch (IOException e) { e.printStackTrace(); } return png_base64; } }
測試Demo
public static void main(String[] args) { File file = new File("F:\\111\\Files\\MySQL查詢語句大全集錦(經典珍藏).pdf"); String htmlPath = "F:\\111\\Files\\MySQL查詢語句大全集錦(經典珍藏).html"; InputStream inputStream = null; BufferedImage bufferedImage = null; try { inputStream = new FileInputStream(file); bufferedImage = pdfStreamToPng(inputStream); String base64_png = bufferedImageToBase64(bufferedImage); createHtmlByBase64(base64_png,htmlPath); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { if(inputStream != null){inputStream.close();} } catch (IOException e) { e.printStackTrace(); } } }
最終結果 轉換后文件
轉換后的文件內容
文件預覽效果
1. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應用程序;2. 面向對象;3. 分布性,Java是面向網絡的語言;4. 魯棒性,java提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。;5. 安全性,用于網絡、分布環境下的Java必須防止病毒的入侵。6. 體系結構中立,只要安裝了Java運行時系統,就可在任意處理器上運行。7. 可移植性,Java可以方便地移植到網絡上的不同機器。8.解釋執行,Java解釋器直接對Java字節碼進行解釋執行。
關于使用JAVA怎么將PDF轉換為HTML文檔問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。