使用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。