网页:

注意网页标签必须关闭,不可以单个标签

Title

${workOrder.shopNameEn}
E&M Maintenance Report
By GZ XXX M&E Engineering Co .Ltd
${reportDateStr}

网页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 文件相关推荐

  1. 网页html转为pdf,html页面转换成PDF文件

    html页面转换成PDF文件 发布时间:2020-06-14 05:24:50 来源:51CTO 阅读:523 作者:robinmars package pdftest; import java.io ...

  2. 关于springmvc框架的web工程,从.xml到.java再到.jsp显示到网页上的过程,以及jsp静态文件的访问

    作为一个初学者来说解决一个大难题是不容易的,要抓紧记录下来分享给大家才行. 首先,你应该拥有一个配置好的环境和安装好插件的eclipse(需要用到web插件,spring插件和jsp插件),以及tom ...

  3. embed预览pdf_#网页中动态嵌入PDF文件/在线预览PDF内容#

    和 Google Chrome 使用的源自 Foxit 的闭源 PDF 浏览插件不同,PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品. pdf.js 是一个主要用 ...

  4. #网页中动态嵌入PDF文件/在线预览PDF内容#

    摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如下: 代码片段1: 1 <object ty ...

  5. 网页中动态嵌入PDF文件/在线预览PDF内容

    网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html #网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发 ...

  6. html如何快速转pDF,如何快速实现pdf转html网页文件 高能方法帮你解决80%职场难题...

    如何快速实现pdf转html网页文件?在平时的工作中因为一些情况,我们需要将一些PDF文件转换成HTML.然而,这两者的转换有不少人还不知道如何解决.对于一些新手网页编辑或者职场中的小白来说,将pdf ...

  7. win10自带的Edge浏览器打不开PDF文件和网页的解决方法

    最近Microsoft Edge 打不开PDF文件和网页,用了一个简单高效的方法. 1.键盘操作Win+X,或右击[开始]键: 2.选择"命令提示符(管理员)": 3.在弹出的框中 ...

  8. Java 使用iText7生成带页码的PDF文件(同时生成目录,但是不会合并两个PDF)

    一.效果图 1.带页码效果 2.目录效果 前言:Java 使用iText7生成带页码的PDF文件,同时生成目录PDF,但限于水平,暂时还在摸索合并两个PDF.不过看了一下,iText好像有生成目录的代 ...

  9. 使用 pdf.js 在网页中加载 pdf 文件

    在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子政务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...

  10. java 上传文件-生成文件首页缩略图 生成pdf 抓取图片

    转载:https://www.cnblogs.com/start-fxw/p/5853671.html 方法:1.文件转换成pdf(采用openoffice或者jacob)   2.抓取pdf首页图 ...

最新文章

  1. MongoDB与Cassandra的比较
  2. 利用JDK工具进行系统性能监测
  3. c#读取xml中特定节点的值(实例)
  4. POJ 2724 Purifying Machine (二分图匹配)
  5. Angular如何自定义attribute指令
  6. onclick 源码_精读:手写React框架 解析Hooks源码
  7. DBUtils学习笔记
  8. 曾鸣:为什么要让「听得见炮火的士兵」做决定?| 干货
  9. 限制本机访问某一些网站,本人不再花时间看新闻了
  10. sphinx 使用
  11. Discuz代码分析:getgpc($k, $t='GP')获取超全局数组值
  12. 集成光子芯片Micro-comb原理
  13. 2017ccpc哈尔滨站部分简要题解
  14. [SOC]clock与reset设计
  15. OpenCvSharp函数:Dilate膨胀、GetStructuringElement获取形态操作的结构元素、Erode腐蚀
  16. 原理 | 分布式链路跟踪组件 SOFATracer 和 Zipkin 模型转换
  17. PDF阅读软件里面的小手工具打开/关闭
  18. vue大屏展示高度自适应
  19. win10 Asus 家庭版 电脑初始设置相关
  20. 边缘设备、系统及计算杂谈(1)

热门文章

  1. 解决“npm不是内部或外部命令“
  2. 如何让阿三 Windows 10、11 的恢复分区(Recovery Partition)恢复到 “盖茨” 模式
  3. 25个JAVA 机器学习工具包
  4. 基于51单片机机械臂控制系统
  5. 2020年高压电工考试APP及高压电工模拟考试软件
  6. RabbitMQ消息队列之RPC调用
  7. 综合评价与决策方法02——模糊综合评判法
  8. 听8位淘宝工程师聊聊他们眼中的元宇宙 | 1024特辑
  9. Python(爬虫篇)--- 验证码破解【二】滑块验证码
  10. 程序员如何一键批量下载Iconfont图标