首页 > 其他分享 >打印pdf 前端请求数据并打印pdf文件

打印pdf 前端请求数据并打印pdf文件

时间:2023-04-18 17:45:22浏览次数:45  
标签:并打印 File get 打印 iframe new pdf id

1、参考

vue接收后端传来的pdf文件流,前端调用预览PDF

2、原理

3、代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>pdf</title>
</head>
<div>
    <input style="display:none" id="pdf_id" type="text" value="9715" />
    <input style="display:none" id="nowUrl" type="text" value="http://127.0.0.1:46111" />
    <input onclick="f111_print()" type="button" value="打印" />
    <input onclick="f222_create()" type="button" value="生成" />

    <input style="display:none" id="pdf_id" type="text" value="7890">
    <input style="display:none" id="nowUrl" type="text" value="https://www.baidu.com/">
</div>

<body>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://www.layuicdn.com/layui-v2.5.6/layui.all.js"></script>

<script>
    let request_url_prefix = "http://127.0.0.1:46111";
    $(function () {
        // request_url_prefix = $("#nowUrl").val();
        // console.log("request_url_prefix", request_url_prefix);
        // showOk("aa");
        show_warn("bbbb");
    })

    function f111_print() {
        let pdf_id = $("#pdf_id").val();
        $.ajax({
            type: 'get',
            url: request_url_prefix + '/dialog/get_medical_record_data_is_ok?id=' + pdf_id,
            dataType: "json",
            success: function (obj) {
                console.log("get_medical_record_data_is_ok ", obj);
                if (obj.code == "01") {
                    showOk("正在处理中");
                    print_medical_record_pdf(pdf_id);
                } else {
                    alert(obj.message);
                }
            }
        })
    }

    function f222_create() {
        create_pdf($("#pdf_id").val());
    }

    function print_medical_record_pdf(id) {
        var url = request_url_prefix + "/dialog/get_medical_record_data?id=" + id;
        var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);
        // xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.responseType = "arraybuffer";  // 返回类型blob
        xhr.onload = function () {
            console.log("get_medical_record_data", this.response);
            const binaryData = [];
            binaryData.push(this.response);
            let pdfUrl = window.URL.createObjectURL(
                new Blob(binaryData, { type: "application/pdf" })
            );
            if (pdfUrl) {
                handle_print(pdfUrl);
            }
        };
        xhr.send()
    }

    function handle_print(pdf_url) {
        if (document.getElementById("print-iframe")) {
            document.body.removeChild(document.getElementById("print-iframe"));
        }
        //判断iframe是否存在,不存在则创建iframe
        let iframe = document.getElementById("print-iframe");
        if (!iframe) {
            iframe = document.createElement("IFRAME");
            iframe.style = 'display: none';
            let doc = null;
            iframe.setAttribute("src", pdf_url);
            iframe.setAttribute("id", "print-iframe");
            document.body.appendChild(iframe);
            doc = iframe.contentWindow.document;
            doc.close();
            iframe.contentWindow.focus();
        }
        iframe.contentWindow.print();
    }

    function create_pdf(id) {
        $.ajax({
            type: 'post',
            url: request_url_prefix + '/dialog/exportPdf?id=' + id,
            dataType: "json",
            success: function (obj) {
                console.log("create_pdf ", obj);
                if (obj.code == "01") {
                    alert(obj.message)
                } else {
                    alert(obj.message)
                }
            }
        })
    }
    function show_warn(msg) {
        layer.msg("<span style='color: #000;'>" + msg + "</span>", { icon: 7, time: 2000 });
    }
    function showOk(msg) {
        layer.msg("<span style='color: #000'>" + msg + "</span>", { icon: 6, time: 2000 });
    }

    function showError(msg) {
        layer.msg("<span" + msg + "</span>", { icon: 2, time: 2000 });
    }
</script>


</html>

4、java

    @CrossOrigin
    @GetMapping("/get_medical_record_data_is_ok")
    @ResponseBody
    public Result get_medical_record_data_is_ok(Integer id, HttpServletResponse response) {
        Result result = new Result();
        try {
            if (redisTemplate.opsForValue().get(treatmentPdf.getRedisKey(id)) != null) {
                return new Result("02", "正在生成中,请稍后");
            }
            System.out.println(" ===== get_medical_record_data 接收到的id=" + id);
            String folder = treatmentPdf.getMedicalRecordFolder();
            File file = new File(folder + File.separator + IDMake.createId() + ".html");
            String absolutePath = file.getParentFile().getAbsolutePath();
            String pdfName = FileUtil.getTreatmentPdfName(id);
            String pdfUrl = absolutePath + File.separator + pdfName;
            // 判断该路径下的文件是否存在
            File filePdf = new File(pdfUrl);
            if (!filePdf.exists()) {
                return new Result("02", "请先点击生成");
            }
            return new Result("01", "可以下载打印");
        } catch (Exception e) {
            LogbackUtil.getErrorLogger().error(e.getMessage(), e);
            return new Result("02", "下载失败 " + e.getMessage());
        }
    }

    @CrossOrigin
    @GetMapping("/get_medical_record_data")
    public Result get_medical_record_data(Integer id, HttpServletResponse response) {
        Result result = new Result();
        try {
            if (redisTemplate.opsForValue().get(treatmentPdf.getRedisKey(id)) != null) {
                return new Result("02", "正在生成中,请稍后");
            }
            System.out.println(" ===== get_medical_record_data 接收到的id=" + id);
            String folder = treatmentPdf.getMedicalRecordFolder();
            File file = new File(folder + File.separator + IDMake.createId() + ".html");
            String absolutePath = file.getParentFile().getAbsolutePath();
            String pdfName = FileUtil.getTreatmentPdfName(id);
            String pdfUrl = absolutePath + File.separator + pdfName;
            // 判断该路径下的文件是否存在
            File filePdf = new File(pdfUrl);
            if (!filePdf.exists()) {
                return new Result("02", "请先点击生成");
            }
            FileInputStream fis = new FileInputStream(filePdf);
            response.setContentType("application/pdf");
            //response.setHeader("content-Disposition", "attachment;filename=" + pdfName);
            //response.setContentType("blob");
            ServletOutputStream out = response.getOutputStream();
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len = fis.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
            fis.close();
            out.close();
        } catch (Exception e) {
            LogbackUtil.getErrorLogger().error(e.getMessage(), e);
            return new Result("02", "下载失败 " + e.getMessage());
        }
        return result;
    }

    //获取诊疗单病例信息
    @GetMapping("/getDiseaseMessage")
    public String getDiseaseMessage(String id) {
        String html = "";
        try {
            //第四种方案使用resourceLoader下载
            ResourceLoader resourceLoader = new DefaultResourceLoader();
            org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:/pdfFolder/diseaseTemplate.html");
//            File file = resource.getFile();
            InputStream inputStream = resource.getInputStream();
            String folder = System.getProperty("user.dir");
            String htmlId = IDMake.createId();
            File file = new File(folder + File.separator + htmlId + ".html");
            FileUtils.copyInputStreamToFile(inputStream, file);
            html = service.exportHtmlPDF(file, id);
            file.delete();
            inputStream.close();
            // System.out.println("生成的html====" + html);
        } catch (Exception e) {

            e.printStackTrace();
        }
        return html;
    }

标签:并打印,File,get,打印,iframe,new,pdf,id
From: https://www.cnblogs.com/kikyoqiang/p/17330479.html

相关文章

  • 打印机 三星 激光打印机 scx3401
    https://support.hp.com/cn-zh/drivers/selfservice/samsung-scx-3401-laser-multifunction-printer-series/16462412开关键不太好按,注意一下开机的时候,按一下就可以了,不需要长按关机的时候,需要长按3秒左右放a4纸的时候,需要放进去一点。具体可以直接看一下打印机是怎么把纸搞......
  • js将后端返回的文件流导出,并自定义下载文件名(pdf导出)
    这里调接口时记得加上responseType:'blob'/***@description:下载文件*@param{string}data文件流*@param{string}filename文件名*@return{*}*/exportfunctiondownloadFile(data:string,filename:string){constblob=newBlob([data])const......
  • 《c#慢跑》打印机
    工具Spire.PDFfor.NET原文链接:https://www.zhihu.com/tardis/bd/art/482045596主要参考的是获取纸张的部分代码,即10、中的2、。工具Spire.PDFfor.NET获取方法1、通过官网下载。在程序中添加引用Spire.Pdf.dll,dll文件在安装路径下的bin文件夹中。2、通过Nuget网站下......
  • java笔试题目——要求:仅打印出a=100,b=200,请写出method方法的代码
    //题目:publicclassTest{publicstaticvoidmain(String[]args){inta=10;intb=10;method(a,b);//需要在method方法被调用之后,仅打印出a=100,b=200,请写出method方法的代码。System.out.println("a="+a);S......
  • 计算机算法设计与分析(第5版)PDF
    《计算机算法设计与分析(第5版)》是2018年电子工业出版社出版的图书,作者是王晓东。整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法。网络上许多的算法文章都出自于这本书,该书成为了很多开发者学习算法的典藏,网上一直找不到这本书第五......
  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • python 批量打印证书(保存未调试)
    importosfromPILimportImage,ImageDraw,ImageFontimportxlrd#要求录入学校信息的证书defzs_school(size,left,height,n,c,m1,d1,m2,d2,t):newfont=ImageFont.truetype(font="Songti.ttc",size=size)draw.text((600,height),n,font=newfont......
  • C#-斑马打印机Helper(COM/LPT/DRV/ZPL/EPL)_适用于标签、票据、条码打印
      原文:http://www.zzvips.com/article/207824.html、https://blog.csdn.net/sqzhao/article/details/524889391、ZebraHelperusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingSystem.Diagnostics;usingSyst......
  • cups+ippserver+cups4j 进行ipp 打印测试
    cups是一个打印标准,ippserver属于一个测试mock的ipp服务(基于软件的),cups4j是cups的一个客户端环境准备具体配置参考github,实际配置来自ippsample的测试配置version:"3"services:ippserver:image:dalongrong/ippserverhostname:ippse......
  • 前端pdf一次下载多个echarts图表
    //需下载pdf,html2canvas模块savePDF:function(){letobj1=document.getElementById("pieChart");letobj2=document.getElementById("homepage-bandwidth-container");letobj3=document.getElementById("homepage-iops-container");le......