跳转至内容
上海创厦网络科技
IT服务专家
上海创厦网络科技上海创厦网络科技
  • 首页
  • 网站建设
  • IT服务
  • 平面设计
  • 网络工程
  • 首页
  • 网站建设
  • IT服务
  • 平面设计
  • 网络工程

html转pdf截图保存功能的实现

您在这里:
  1. 首页
  2. HTML
  3. html转…

使用技术

itext.jar  : 将byte文件输入流转换为图片,pdf等

html2canvas.js :将html页面区域截图为base64编码的图片资源

java+js

1. 准备资源

itext.jar
 www.baidu.com

html2canvas.js
www.baidu.com

2.前端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

//进行截图操作,document.querySelector(“body”) 为要截图的区域
     function test() {
            html2canvas(document.querySelector(“body”), {
                onrendered: function (canvas) {
                    var dataUrl = canvas.toDataURL(‘image/png’);
                    var formData = new FormData(); //模拟表单对象
                    formData.append(“imgData”, convertBase64UrlToBlob(dataUrl)); //写入数据
                    var xhr = new XMLHttpRequest(); //数据传输方法
                    xhr.open(“POST”, “http://localhost:8080/pdf”); //配置传输方式及地址
                    xhr.send(formData);
                    xhr.onreadystatechange = function () { //回调函数
                    };
                }
            });
        }
 
        //格式化图片base64编码转换为byte文件流
        function convertBase64UrlToBlob(urlData){
            //去掉url的头,并转换为byte
            var bytes=window.atob(urlData.split(‘,’)[1]);
            //处理异常,将ascii码小于0的转换为大于0
            var ab = new ArrayBuffer(bytes.length);
            var ia = new Uint8Array(ab);
            for (var s = 0;s//调用截图方法即可

3.后端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

@RequestMapping(value = “/pdf”,method = RequestMethod.POST)
    public void test(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException {
        String filePath = “D:\blog\exportPdf2.pdf”;
        String imagePath = “D:\blog\exportImg2.png”;
        Document document = new Document();
        try{
            Map getMap = request.getFileMap();
            MultipartFile mfile = (MultipartFile) getMap.get(“imgData”); //获取数据
            InputStream file = mfile.getInputStream();
            byte[] fileByte = FileCopyUtils.copyToByteArray(file);
 
            FileImageOutputStream imageOutput = new FileImageOutputStream(new File(imagePath));//打开输入流
            imageOutput.write(fileByte, 0, fileByte.length);//生成本地图片文件
            imageOutput.close();
 
            PdfWriter.getInstance(document, new FileOutputStream(filePath)); //itextpdf文件
            document.open();
            document.add(new Paragraph(“JUST TEST …”));
            Image image = Image.getInstance(imagePath); //itext-pdf-image
            float heigth = image.getHeight();
            float width = image.getWidth();
            int percent = getPercent2(heigth, width);  //按比例缩小图片
            image.setAlignment(Image.MIDDLE);
            image.scalePercent(percent+3);
            document.add(image);
            document.close();
 
        }catch (DocumentException de) {
            System.err.println(de.getMessage());
        }
        catch (Exception e) {
            e.printStackTrace();
 
        }
    }
 
    private static int getPercent2(float h, float w) {
        int p = 0;
        float p2 = 0.0f;
        p2 = 530 / w * 100;
        p = Math.round(p2);
        return p;
    }

4 包名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
 
import javax.imageio.stream.FileImageOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

4 前端截图,访问后端接口,保存截图文件到本地为pdf或者其他格式的文件。

 有兴趣的同学可以把后端改为下载文件到本地

5 项目源码地址

https://github.com/zhangjy520/learn_java/tree/master/boot 

到此这篇关于html转pdf截图保存功能的实现的文章就介绍到这了,更多相关html转pdf截图保存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

Category: HTMLstartupplaza2022年5月30日评论

作者: startupplaza

文章导航

历史的文章历史的文章:html+css实现充电水滴融合特效代码未来的文章未来的文章:利用HTML5+css3+jquery+weui实现仿微信聊天界面功能

Related Posts

当div设置contentEditable=true时,重置其内容后无法光标定位
2022年5月30日
HTML用户注册页面设置源码
2022年5月30日
详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理
2022年5月30日
利用div+css3实现一个背景渐变的button按钮的示例代码
2022年5月30日
html父子页面iframe双向发消息的实现示例
2022年5月30日
在HTML里加载摄像头的方法
2022年5月30日

技术探讨

  • 使用HTML5捕捉音频与视频信息概述及实例
  • HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
  • 详解HTML5中的