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

使用技术

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

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

java+js

1. 准备资源

html2canvas.js

www.baidu.com

2.前端代码:

//进行截图操作,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

ia[s] = bytes.charCodeAt(s);

}

return new Blob( [ab] , {type : 'image/png'});

}

3.后端代码:

@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 包名

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 项目源码地址

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值