使用pd4ml 将html转换为pdf html2pdf
来源:互联网 发布:2016淘宝卖家花呗开通 编辑:程序博客网 时间:2024/09/21 06:37
package com.xhb.jack;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Insets;import java.awt.Rectangle;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.StringReader;import java.net.URL;import javax.imageio.ImageIO;import org.zefer.pd4ml.PD4Constants;import org.zefer.pd4ml.PD4ML;import org.zefer.pd4ml.PD4PageMark;public class PDFUtil{ private int width = 800; private int height = 900; /** * 获取PDF的宽度 * * @return */ public int getWidth() { return width; } /** * 设置PDF的宽度 * * @return */ public void setWidth(int width) { this.width = width; } /** * 获取PDF的高度 * * @return */ public int getHeight() { return height; } /** * 设置PDF的高度 * * @return */ public void setHeight(int height) { this.height = height; } /** * 创建PDF文件 * * @param sourcePath 源文件的路径 * @param desPath 输出的PDF文件路径 * @param watermarkPath 水印的URL路径 * @throws Exception */ public void createPdfFile(String sourcePath, String desPath, String mark) throws Exception { File sourceFile = new File(sourcePath); File desFile = new File(desPath); PD4ML pdf = new PD4ML(); FileOutputStream outFile = new FileOutputStream(desFile); pdf.setHtmlWidth(this.width); pdf.setPageInsetsMM(new Insets(20, 20, 20, 20)); pdf.setPageSizeMM(PD4Constants.A4); pdf.useTTF("java:fonts", true); pdf.setDefaultTTFs("fzst", "fzst", "fzst"); PD4PageMark header = new PD4PageMark(); header.setAreaHeight(-1); // autocompute header.setHtmlTemplate(null); // autocompute pdf.setPageHeader(header); PD4PageMark footer = new PD4PageMark(); footer.setWatermark("file:/" + drawWatermark(mark), new Rectangle(10, 10, width, height), 30); footer.setPagesToSkip(1); footer.setPageNumberAlignment(PD4PageMark.CENTER_ALIGN); pdf.setPageFooter(footer); pdf.enableDebugInfo(); String readerStr = readFile(sourceFile, "utf-8"); // pdf.render(new URL("file:///d:/add2.html"), outFile); pdf.render(new StringReader(readerStr), outFile); } /** * 创建PDF文件 * * @param sourcePath 网址 * @param desPath 输出的PDF文件路径 * @param watermarkPath 水印的URL路径 * @throws Exception */ public void createPdfFile(URL sourcePath, String desPath, String mark) throws Exception { File desFile = new File(desPath); FileOutputStream outFile = new FileOutputStream(desFile); PD4ML pdf = new PD4ML(); pdf.setHtmlWidth(this.width); pdf.setPageInsetsMM(new Insets(20, 15, 20, 15)); pdf.setPageSizeMM(PD4Constants.A4); // pdf.enableTableBreaks(false); pdf.useTTF("java:fonts", true); pdf.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312"); PD4PageMark header = new PD4PageMark(); header.setAreaHeight(-1); // autocompute header.setTitleAlignment(PD4PageMark.RIGHT_ALIGN); // header.setHtmlTemplate("<div style='width:100%;text-align:right;'><font color='red'>验收�?/font></div>"); PD4PageMark footer = new PD4PageMark(); String waterPath = ""; // 水印路径 String systemName = getSystemType(); // 获取当前操作系统类型,根据类型�?择协�? if (systemName.indexOf("windows") != -1) { waterPath = "file:/" + drawWatermark(mark); } else if (systemName.indexOf("linux") != -1) { waterPath = "file://" + drawWatermark(mark); } footer.setWatermark(waterPath, new Rectangle(0, 0, width, height), 30); footer.setPageNumberTemplate("${page}/${total}"); footer.setPageNumberAlignment(PD4PageMark.CENTER_ALIGN); // footer.setHtmlTemplate("<pd4ml:page.break/>"); footer.setPagesToSkip(1); pdf.setPageHeader(header); pdf.setPageFooter(footer); // pdf.adjustHtmlWidth(); //内容向右�? // pdf.generateOutlines(true); // pdf.protectPhysicalUnitDimensions(); pdf.enableDebugInfo(); String readerStr = readFile(sourcePath, "utf-8"); pdf.render(new StringReader(readerStr), outFile); } /** * 读取文件 * @param path 路径 * @param encoding 编码 * @return 字符串 * @throws IOException 如果遇到io异常 */ private String readFile(File path, String encoding) throws IOException { // File f = new File( path ); FileInputStream is = new FileInputStream(path); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayOutputStream fos = new ByteArrayOutputStream(); byte buffer[] = new byte[2048]; int read; do { read = is.read(buffer, 0, buffer.length); if (read > 0) { fos.write(buffer, 0, read); } } while (read > -1); fos.close(); bis.close(); is.close(); return fos.toString(encoding); } /** * 读取文件 for url * @param path 路径 * @param encoding 编码 * @return 文件的字符串 * @throws IOException 如果遇到io异常 */ private String readFile(URL path, String encoding) throws IOException { // DataInputStream dis=new DataInputStream(); InputStream is = path.openStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayOutputStream fos = new ByteArrayOutputStream(); byte buffer[] = new byte[2048]; int read; do { read = bis.read(buffer, 0, buffer.length); if (read > 0) { fos.write(buffer, 0, read); } } while (read > -1); fos.close(); bis.close(); return fos.toString(encoding); } /** * 此方法暂时没用到 * @param mark 备注 * @return 字符串 * @throws FileNotFoundException 文件没有找到的情况下 */ private String drawWatermark(String mark) throws FileNotFoundException { String systemName = getSystemType(); File file = null; if (systemName.indexOf("windows") != -1) { file = new File("c:/temp/watermark.jpg"); } else if (systemName.indexOf("linux") != -1) { file = new File("//opt//temp//watermark.jpg"); } if (file.exists()) { file.delete(); } try { file.createNewFile(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D)image.getGraphics(); // 消除线条锯齿 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 画出矩形 g.setColor(Color.white); g.fillRect(0, 0, width, height); // 配置字体 Font font = new Font("宋体", Font.BOLD, 48); g.setFont(font); // 画字 g.rotate(Math.cos(22)); // 画布旋转22�? g.setColor(Color.gray); g.drawString(mark, -width / 2, height / 2); // 设置透明 // g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // g.drawImage(image,watermarkX,watermarkY, waterImg.getWidth(null), // waterImg.getHeight(null), null); // 设置透明 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.1f)); ImageIO.write(image, "png", bos); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("水印文件创建失败"); } return file.getPath(); } /** * 获取系统类型 * @return 系统类型 */ private String getSystemType() { return System.getProperty("os.name").toLowerCase(); } public static void main(String[] args) { PDFUtil util = new PDFUtil(); try { util.createPdfFile(new URL("file:///D:/workspace/TestJsCall/TestJsCall/bin/Debug/tempPrint.html"), "d:/cd.pdf", "11110000"); } catch (Exception e) { e.printStackTrace(); } }}
本代码使用了pd4ml,整合到我的easyoffice中 整个easyoff侧下载
easyoffice提供了 html转换 pdf word excel的工具类欢迎下载。
http://download.csdn.net/detail/shuaizai88/9851814
如果觉得这篇文章帮助到你,给作者打赏点咖啡钱吧。
阅读全文
0 0
- 使用pd4ml 将html转换为pdf html2pdf
- java使用pd4ml将html转换成pdf
- Html2Pdf:C调用wkhtmltopdf的API来将Html转换为pdf文件
- 使用XPDF将PDF转换为HTML
- iText – 使用Java将HTML转换为PDF
- pd4ml实现HTML转化PDF
- 使用itext转换html2pdf
- 将chm转换为html或pdf
- 使用Java 将html转换PDF
- 使用Aspose.Pdf将PDF转换为JPEG图片格式
- 使用Aspose.Pdf将MemoryStream转换为PDF
- 将CHM文件转换为HTML或PDF
- 将html文件转换为pdf格式的文件
- CSDN博客导出(三) - 将HTML转换为PDF
- CSDN博客导出(三) - 将HTML转换为PDF
- C# 将 HTML 转换为图片或 PDF
- 如何将ipynb转换为html,md,pdf等格式
- 利用TCPDF将html页面转换为PDF格式
- 整合spring的shiro 的简单搭建步骤
- 【R的网络提取】什么值得买批量提取商品信息和价格等数据
- java代码块分析
- 我多年SCI成功投稿经验与大家共享!
- Timeline可展开的时间轴ExpandableListView
- 使用pd4ml 将html转换为pdf html2pdf
- 使用python的Flask实现一个简单RESTful API服务器端
- python笔记(8)----条件、循环及其他语句
- ios开发 loaded the "ViewController" nib but the view outlet was not set.'
- String 常用方法
- 构建微服务实验环境(四):Kubernetes 集群
- 如何查看服务器配置
- python 命名规范
- 学习kotlin第四天