java html网页生成pdf文件,html 网页生成pdf 文件
网页:
注意网页标签必须关闭,不可以单个标签
Title
网页controller
/**
* 网页报表首页
*/
@RequestMapping(value = "/first_page/{workOrderId}")
public String firstPage(@PathVariable Integer workOrderId , Model model){
WorkOrder workOrder = workOrderService.selectById(workOrderId);
model.addAttribute("workOrder",workOrder);
SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy", Locale.ENGLISH);
String reportDateStr = sdf.format(workOrder.getAppointTimeStart());//使用预约日期
model.addAttribute("reportDateStr",reportDateStr);
return PREFIX + "workOrder_firstPage.html";
}
网页连接必须当成外接api开放
前端pdf生成按钮
js:
利用pdfjs 产生pdf预览界面
WorkOrderDetail.printReceipt = function () {
var workOrderId = $("#workOrderId").text();
window.open('/static/js/plugins/pdfjs/web/viewer.html?file=' + encodeURIComponent(Feng.ctxPath + "/workOrder/print_receipt/"+ workOrderId,"pdf"));
};
controller:
/**
* 完工记录pdf
*/
@Permission
@RequestMapping(value = "/print_receipt/{workOrderId}")
@ResponseBody
public void printReceipt(@PathVariable Integer workOrderId){
workOrderService.printReceipt(workOrderId);
}
pom.xml : 需要引入的包
com.itextpdf
itextpdf
5.5.6
com.itextpdf.tool
xmlworker
5.5.6
com.itextpdf
itext-asian
5.2.0
org.jsoup
jsoup
1.10.1
serviceImpl 接口就省略不放上来
1: 代码没有写完,感觉效果不是太理想就放弃了
2: 可以把获取打印网页html,保存本地html 文件,再重启读取html文件,生成pdf 文件后,再删除html文件的的过程, 改成直接append 拼接html的string然后直接生成pdf文件
3: 后续可以利用document 的 add page 增加页面,
/**
* 完工记录pdf入口,
*/
public boolean printReceipt(Integer workOrderId){
//html预览title
WorkOrder workOrder = this.selectById(workOrderId);
String title = workOrder.getShopNameCh() + "-完工记录.pdf";
int port = serverProperties.getPort();
//首页生成pdf文件
try {
URL url = new URL("http://localhost:" + port + "/workOrder/first_page/" + workOrderId);
File file = createPdfByUrl(url);
showReceiptOrder(file , title);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return true;
}
/**
* 利用网页url 创建单个pdf文件
* @param url
* @return
*/
private File createPdfByUrl(URL url){
//pdf 路径
String fileName = String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".pdf";
String picSavePath = gunsProperties.getFileUploadPath();
String subFile = "workOrderPdf"+ "/";
String realPath = ServerUtils.createShopPictureUploadPath(picSavePath+subFile) + fileName;
File file = new File(realPath);
//html路径
String htmlFileName = String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".HTML";
String htmlPath = ServerUtils.createShopPictureUploadPath(picSavePath+subFile) + htmlFileName;
PdfWriter writer = null;
try {
//第一步,创建一个 iTextSharp.text.Document对象的实例:
Rectangle pageSize = new Rectangle(720, 540); //这只页面大小
Document document = new Document(pageSize);
// 测试页面大小
// PdfReader reader = new PdfReader(picSavePath + subFile + "xxxx店-完工记录-.pdf");
// Document document2 = new Document(reader.getPageSize(1));
// reader.close();
// document2.close();
//第二步,为该Document创建一个Writer实例:
FileOutputStream fos = new FileOutputStream(realPath);
writer = PdfWriter.getInstance(document, fos);
//第三步,打开当前Document
document.open();
//第四步,为当前Document添加内容:
//document.add(new Paragraph("Hello World"));
if(convertUrlToHtml(url , htmlPath) == false){
throw new GunsException(BizExceptionEnum.CREATE_HTML_FILE_ERROR);
}
FileInputStream fis = new FileInputStream(htmlPath);
XMLWorkerHelper.getInstance().parseXHtml(writer, document, fis);
//第五步,关闭Document
document.close();
fis.close();
fos.close();
new File(htmlPath).delete(); // 删除html文件
if(ToolUtil.isEmpty(file)){
throw new GunsException(BizExceptionEnum.CREATE_PDF_ERROR);
}
return file;
} catch (DocumentException e) {
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}finally {
writer.close();
}
}
/**
* 把url 上的html 保存为本地html文件
* @param url
* @param htmlPath
* @return
*/
public boolean convertUrlToHtml(URL url , String htmlPath){
try {
File htmlFile = new File(htmlPath);
InputStream is;//接收字节输入流
FileOutputStream fos = new FileOutputStream(htmlFile);//字节输出流
is = url.openStream();
BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲
BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲
int length;
byte[] bytes = new byte[1024*20];
while((length = bis.read(bytes, 0, bytes.length)) != -1){
fos.write(bytes, 0, length);
}
bos.close();
fos.close();
bis.close();
is.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* pdf文件前端展示
* @param file
* @param httpTitleName
*/
private void showReceiptOrder(File file ,String httpTitleName){ // httpTitleName = "xx店-完工记录.pdf"
try{
FileInputStream fileInputStream = new FileInputStream(file);
HttpServletResponse response = HttpKit.getResponse();
response.setHeader(
"Content-Disposition",
"attachment;fileName="
+ new String( httpTitleName.getBytes("utf-8"),"ISO8859-1")
);
response.setContentType( "multipart/form-data");
OutputStream outputStream = response.getOutputStream();
IOUtils.write(IOUtils.toByteArray(fileInputStream), outputStream);
fileInputStream.close();
outputStream.flush();
outputStream.close();
}catch (IOException e){
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}finally {
System.out.println("成功显示文件!");
}
}
效果如下:
html 文件
看上去效果还可以,
但是生成的pdf文件
其实这个还要考虑中文直接,导入simsun 宋体包,还有考虑把图片改成base64格式才可以读取, 由于对应的html文件,无法读取js,以及大部分的css效果,如果对报表要求比较严格,内容比较多,样式调整就非常麻烦
java html网页生成pdf文件,html 网页生成pdf 文件相关推荐
- 网页html转为pdf,html页面转换成PDF文件
html页面转换成PDF文件 发布时间:2020-06-14 05:24:50 来源:51CTO 阅读:523 作者:robinmars package pdftest; import java.io ...
- 关于springmvc框架的web工程,从.xml到.java再到.jsp显示到网页上的过程,以及jsp静态文件的访问
作为一个初学者来说解决一个大难题是不容易的,要抓紧记录下来分享给大家才行. 首先,你应该拥有一个配置好的环境和安装好插件的eclipse(需要用到web插件,spring插件和jsp插件),以及tom ...
- embed预览pdf_#网页中动态嵌入PDF文件/在线预览PDF内容#
和 Google Chrome 使用的源自 Foxit 的闭源 PDF 浏览插件不同,PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品. pdf.js 是一个主要用 ...
- #网页中动态嵌入PDF文件/在线预览PDF内容#
摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如下: 代码片段1: 1 <object ty ...
- 网页中动态嵌入PDF文件/在线预览PDF内容
网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html #网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发 ...
- html如何快速转pDF,如何快速实现pdf转html网页文件 高能方法帮你解决80%职场难题...
如何快速实现pdf转html网页文件?在平时的工作中因为一些情况,我们需要将一些PDF文件转换成HTML.然而,这两者的转换有不少人还不知道如何解决.对于一些新手网页编辑或者职场中的小白来说,将pdf ...
- win10自带的Edge浏览器打不开PDF文件和网页的解决方法
最近Microsoft Edge 打不开PDF文件和网页,用了一个简单高效的方法. 1.键盘操作Win+X,或右击[开始]键: 2.选择"命令提示符(管理员)": 3.在弹出的框中 ...
- Java 使用iText7生成带页码的PDF文件(同时生成目录,但是不会合并两个PDF)
一.效果图 1.带页码效果 2.目录效果 前言:Java 使用iText7生成带页码的PDF文件,同时生成目录PDF,但限于水平,暂时还在摸索合并两个PDF.不过看了一下,iText好像有生成目录的代 ...
- 使用 pdf.js 在网页中加载 pdf 文件
在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子政务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...
- java 上传文件-生成文件首页缩略图 生成pdf 抓取图片
转载:https://www.cnblogs.com/start-fxw/p/5853671.html 方法:1.文件转换成pdf(采用openoffice或者jacob) 2.抓取pdf首页图 ...
最新文章
- MongoDB与Cassandra的比较
- 利用JDK工具进行系统性能监测
- c#读取xml中特定节点的值(实例)
- POJ 2724 Purifying Machine (二分图匹配)
- Angular如何自定义attribute指令
- onclick 源码_精读:手写React框架 解析Hooks源码
- DBUtils学习笔记
- 曾鸣:为什么要让「听得见炮火的士兵」做决定?| 干货
- 限制本机访问某一些网站,本人不再花时间看新闻了
- sphinx 使用
- Discuz代码分析:getgpc($k, $t='GP')获取超全局数组值
- 集成光子芯片Micro-comb原理
- 2017ccpc哈尔滨站部分简要题解
- [SOC]clock与reset设计
- OpenCvSharp函数:Dilate膨胀、GetStructuringElement获取形态操作的结构元素、Erode腐蚀
- 原理 | 分布式链路跟踪组件 SOFATracer 和 Zipkin 模型转换
- PDF阅读软件里面的小手工具打开/关闭
- vue大屏展示高度自适应
- win10 Asus 家庭版 电脑初始设置相关
- 边缘设备、系统及计算杂谈(1)
热门文章
- 解决“npm不是内部或外部命令“
- 如何让阿三 Windows 10、11 的恢复分区(Recovery Partition)恢复到 “盖茨” 模式
- 25个JAVA 机器学习工具包
- 基于51单片机机械臂控制系统
- 2020年高压电工考试APP及高压电工模拟考试软件
- RabbitMQ消息队列之RPC调用
- 综合评价与决策方法02——模糊综合评判法
- 听8位淘宝工程师聊聊他们眼中的元宇宙 | 1024特辑
- Python(爬虫篇)--- 验证码破解【二】滑块验证码
- 程序员如何一键批量下载Iconfont图标