最近在搞毕设,遇到一个问题,纪念踩坑两天。。。

需求:前端Vue使用jsPDF生成一个PDF文件,在不经过用户操作的情况下直接上传服务器保存。

坑: 必须用字节流传输,否则汉字图片无法显示。字节流与字符流的区别见我之前的博客。

先上端代码

finalSub(){
      this.pdf = new jsPDF("", "pt", "a4");
      // fonts support
      this.pdf.addFileToVFS("font.ttf", font);
      this.pdf.addFont("font.ttf", "ali", "normal");
      this.pdf.addFont("font.ttf", "ali", "bold");
      this.pdf.setFont("ali");
          var datauri = this.pdf.output('dataurlstring');
          var base64  = datauri.split("base64,")[1];
          var data={'data':base64};
          finalSave(data)
          .then(res=>{
            if(res.data.code==0){
              alert("本年度报告存档成功");
            }else{
              alert("存档失败");
          }).catch(err=>{
            alert(res.data.message);

值得注意的是,网上很多代码里面对于base64的字符串获取方法都是pdf.output("dataurlstring").substring(28);,这个是有问题的,很多时候对于我们个人来讲base64加密子串未必从28开始,比如我的就是从51开始,所以采用分割字符串的形式比较稳妥。

另外jsPDF提供的方法output可以输出不同的信息,此处参数为dataURLstring含义是将pdf文件的信息以url字符串的形式输出,将这个字符串传到后端即可。

@PostMapping("finalSave")
    public JsonResult finalSave(@RequestBody HashMap<String, String> u){
        BufferedOutputStream bos=null;
        try {
            Date date = new Date(); // 创建日期格式化对象,在获取格式化对象时可以指定风格
            DateFormat df = new SimpleDateFormat("yyyy");
            String str = df.format(date);
            File f =new File(str+".pdf");
            if(!f.exists()){
                f.createNewFile();
            bos = new BufferedOutputStream(new FileOutputStream(f));
            byte[] b = Base64.getDecoder().decode(u.get("data"));
            bos.write(b);
        } catch (IOException e) {
            e.printStackTrace();
            return new JsonResult(ResultCode.FALSE,true);
        }finally {
            try {
                bos.flush();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
        return new JsonResult(ResultCode.SUCCESS,true);

测试满足需求。

最近在搞毕设,遇到一个问题,纪念踩坑两天。。。需求:前端Vue使用jsPDF生成一个PDF文件,在不经过用户操作的情况下直接上传服务器保存。坑:必须用字节流传输,否则汉字图片无法显示。字节流与字符流的区别见我之前的博客。先上端代码finalSub(){ this.pdf = new jsPDF("", "pt", "a4"); // fon... * @param html { String } DOM树 * @param isOne { Boolean } 是否为单页 默认 否(false) * @return 文件 {pdf格式} setPrint(html,isOne) { let html = document.getElementById("doa_print_pdf_content 这里代码引入了html2canvas和jspdf //需要 npm i html2Canvas 和 npm i jspdf 在这里将getPdf 这个函数挂载到Vue的原型上,最后return一个promise对象(包含了resolve的base64Pdf,以便于处理),在局部组件内可进行.then以进行上传后端等操作。 插件代码如下 import html2Canvas from 'html2canvas' import JsPDF from 'jspdf' 利用jsPDF把图片转成pdf格式保存本地 参考地址:jsPDF:https://rawgit.com/MrRio/jsPDF/master/docs/jsPDF.html 利用jsPDF吧图片转成pdf: Npm install jsPDF 引入jsPDF import {jsPDF} from ‘jspdf’ const recordPdf = new jsPDF('p','cm','a4') result.forEach( (item,index)=>{
jspdf中有一个方法 将pdf转base64 var buffer = PDF.output("datauristring");// 转base64 var myfile = dataURLtoFile(buffer, title) //转文件 var formdata = new FormData() formdata.append('file', myfile) 如果...
output在新的窗口显示在本页面插入文件名称设置 使用jspdf生成的pdf文档,网上一般都是如何下载到本地中,使用save()方法,但是现在并不想下载,而是直接显示在页面中。 output 查找了官方文档,发现可以使用output方法: output(type, options) → {string|window|ArrayBuffer|Blob|jsPDF|null|undefined} 源码: jspdf.js, line 3010 生成PDF文档。 若类型参数未定义,则输出是以字符串作为.
最近在公司里实习作项目,项目中有一个优化需求,就是将指定的jsp页面导出为pdf文件输出。因为之前从未了解过相关方面只知识,所以在查了一番资料后,发现大家写的都很散,不是很清楚,甚至有的代码执行不出来,不能输出。总之,遇见了各种各样的问题。 在查资料的过程中,我看到了两种较为常用的方法,就是itext和jspdf。但是博主对itext没有怎么研究,主要是因为似乎比较复杂,没怎么看。相对来说,js...
function createPDFObject(imgData) { //默认a4纸张 $("#containerHtml").css("margin-top","100px"); var doc = new jsPDF('p', 'pt',"a4"); var pdfTitle = "{{ sur...
Selective Cross-City Transfer Learning for Traffic Prediction via Source City Region Re-Weighting笔记 GISer_study: 想请问一下run_crosstres_rt和run_crosstres的区别是什么 java eclipse 提示 用户“sa”登录失败的一种解决办法 m0_66120999: 什么教程啊,都找不到在哪里 JSPDF生成文件直接上传服务器保存 我们毕业项目也要用到 汇编语言ASSUME ,Missing or unreachable CS Masob: 正解1111111111 使用Ewomail开源版搭建自己的邮箱服务器 xiao485: 说的一点不清楚,对小白来说一头雾水,第一步进去就退不出来啦。 Selective Cross-City Transfer Learning for Traffic Prediction via Source City Region Re-Weighting笔记 Strassen矩阵乘法 Selective Cross-City Transfer Learning for Traffic Prediction via Source City Region Re-Weighting笔记 Strassen矩阵乘法