android用pd4ml实现html转pdf,使用pd4ml 将html转换为pdf html2pdf

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("

验收�?/font>
");

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("");

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

如果觉得这篇文章帮助到你,给作者打赏点咖啡钱吧。

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值