JavaScript调用系统自带的打印页面

JavaScript调用系统自带的打印页面

export function printPdf(data: BlobPart,) {const blob = new Blob([data], { type: 'application/pdf' })let date = (new Date()).getTime()let ifr = document.createElement('iframe')ifr.style.frameborder = 'no'ifr.style.display = 'none'ifr.style.pageBreakBefore = 'always'ifr.setAttribute('id', 'printPdf' + date)ifr.setAttribute('name', 'printPdf' + date)ifr.src = window.URL.createObjectURL(blob)document.body.appendChild(ifr)doPrint('printPdf' + date)window.URL.revokeObjectURL(ifr.src) // 释放URL 对象
}function doPrint(val) {let ordonnance = document.getElementById(val).contentWindowconsole.log(ordonnance)setTimeout(() => {ordonnance.print()}, 100)
}

这两段代码是用于在网页中打印PDF文件的JavaScript函数。下面是每个函数的详细解释:

printPdf 函数

这个函数接收一个参数 data,这个参数应该是PDF文件的内容,类型为 BlobPartBlobPart 可以是 BlobFile 或者 ArrayBuffer 等类型,这里用于创建一个新的 Blob 对象,该对象代表PDF文件。

  1. 创建Blob对象

    const blob = new Blob([data], { type: 'application/pdf' })
    

    这行代码创建了一个新的 Blob 对象,其中包含PDF数据,并指定了MIME类型为 application/pdf

  2. 生成时间戳

    let date = (new Date()).getTime()
    

    获取当前时间的时间戳,用于生成唯一的ID。

  3. 创建iframe元素

    let ifr = document.createElement('iframe')
    

    创建一个 iframe 元素,用于在其中加载PDF文件。

  4. 设置iframe属性

    ifr.style.frameborder = 'no'
    ifr.style.display = 'none'
    ifr.style.pageBreakBefore = 'always'
    ifr.setAttribute('id', 'printPdf' + date)
    ifr.setAttribute('name', 'printPdf' + date)
    

    设置 iframe 的样式和属性,使其不可见,并且在页面中不会显示边框。同时,使用时间戳生成唯一的ID和名称。

  5. 设置iframe的src属性

    ifr.src = window.URL.createObjectURL(blob)
    

    使用 Blob 对象创建一个对象URL,并将其设置为 iframesrc 属性,这样 iframe 就会加载PDF文件。

  6. 将iframe添加到文档中

    document.body.appendChild(ifr)
    

    iframe 添加到文档的 body 中。

  7. 调用打印函数

    doPrint('printPdf' + date)
    

    调用 doPrint 函数,传入 iframe 的ID,用于打印PDF文件。

  8. 释放URL对象

    window.URL.revokeObjectURL(ifr.src)
    

    释放之前创建的对象URL,以释放内存。

doPrint 函数

这个函数接收一个参数 val,这个参数应该是 iframe 的ID。

  1. 获取iframe内容窗口

    let ordonnance = document.getElementById(val).contentWindow
    

    通过ID获取 iframe 元素,并获取其内容窗口。

  2. 打印PDF

    setTimeout(() => {ordonnance.print()
    }, 100)
    

    使用 setTimeout 延迟100毫秒后调用 iframe 内容窗口的 print 方法,以打印PDF文件。

总结

这两段代码的主要目的是在网页中创建一个隐藏的 iframe,用于加载PDF文件,并自动调用打印功能。这种方法可以在不显示PDF文件的情况下直接打印PDF内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】快排之三路划分

目录 一、前言 二、 快排性能的关键点分析 三、 三路划分基本思想 四、 思路分析 五、提醒 六、代码实现 一、前言 继续对快速排序的深入优化进行探讨 二、 快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后,key对数组的分割。 如果每次选key都能…

Kafka面试题解答(一)

1.kafka消息发送的流程? 生产者:在消息发送的过程中涉及到了两个线程:main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator(默认32m)。main线程将消息发送RecordAccumulator,sender线程不断地从R…

如何使用 XML Schema

如何使用 XML Schema XML Schema,也称为XSD(XML Schema Definition),是一种用于定义XML文档结构和内容的语言。它提供了一种强大的方式来描述XML文档中允许的元素、属性和数据类型。使用XML Schema,可以确保XML文档符合预定义的结构,这对于数据交换、数据验证和应用程序…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…

Oracle 数据库创建导入

注意:本教程中的有些命令您可能并不熟悉,但没关系,只需按照说明一步一步创建示例数据库即可。在之后的教程中,会详细介绍每个命令。 1.创建新用户并授予权限 1.1.打开 首先,启动 SQL plus 程序的命令行:…

[数组二分查找] 0081. 搜索旋转排序数组||

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 81. 搜索旋转排序数组 II - 力扣(LeetCode) 2. 题目大意 描述:一个按照升序排列的整数数组 nums,在位置的某个下标 k 处进行了旋转操作。 &#xff…

为centos7分配ip

前提: 安装好centos7 编辑文件 进入编辑模式[dmdbalocalhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改 BOOTPROTOstatic DNBOOTyes IPADDR192.168.152.11 NETMASK255.255.255.0 GATEWAY192.168.152.2 DNS18.8.8.8 点击esc .输入“:wq” 保存退…

【Unity/QFramework】QFramework学习笔记

文章目录 基础流程示例程序【PointGame】ArchitectureStoragePlayerPrefsStorage : IStorage ModelGameModel : AbstractModel, IGameModel ControllerGame : MonoBehaviour, IControllerEnemy : MonoBehaviour, IControllerMissArea : MonoBehaviour, IController CommandStar…

内网安全-代理技术-socket协议

小迪安全网络架构图: 背景:当前获取window7 出网主机的shell。 1.使用msf上线,查看路由 run autoroute -p 添加路由: run post/multi/manage/autoroute 使用socks模块开启节点,作为流量跳板 msf6 exploit(multi/ha…

GaussDB部署架构

GaussDB部署架构 云数据库GaussDB管理平台(TPOPS)基于B/S架构开发,由Web、管控Service、管控Agent三部分组成,软件结构如图1所示。 图1 各节点部署架构 Web:作为用户接入子系统,用于将用户在Web下发的操作…

如何使用.bat实现电脑自动重启?

1、在电脑桌面新建一个记事本文档,将如下内容写进去: echo off shutdown /r /t 02、然后,保存一下,再把桌面此文件重命名为电脑重启.bat 3、双击此程序,可以立刻重启电脑。 PS:① 此程序会不保存任何当前…

YOLOv11融合CVPR[2024]自适应扩张卷积FADC模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Frequency-Adaptive Dilated Convolution for Semantic Segmentation》 一、 模块介绍 论文链接:https://arxiv.org/abs/2403.05369 代码…

简单叙述 Spring Boot 启动过程

文章目录 1. 准备阶段:应用启动的入口2. 创建 SpringApplication 对象:开始启动工作3. 配置环境(Environment):识别开发环境与生产环境4. 启动监听器和初始化器:感知启动的关键事件5. 创建 ApplicationCont…

[算法初阶]埃氏筛法与欧拉筛

素数的定义&#xff1a; 首先我们明白&#xff1a;素数的定义是只能整除1和本身&#xff08;1不是素数&#xff09;。 我们判断一个数n是不是素数时&#xff0c;可以采用试除法&#xff0c;即从i2开始&#xff0c;一直让n去%i&#xff0c;直到i*i<n c语言: #include<…

Python 数据文件读写教程

Python 数据文件读写教程 在数据科学和软件开发中&#xff0c;文件的读写操作是至关重要的。Python 作为一门功能强大的编程语言&#xff0c;提供了多种方式来处理文件&#xff0c;包括文本文件、CSV 文件、JSON 文件等。在本教程中&#xff0c;我们将深入探讨 Python 中的数据…

CSS多列布局:打破传统布局的束缚

你是否曾为如何让页面中的文字内容更加美观、易读而烦恼&#xff1f;传统的单列布局虽然简单&#xff0c;但有时并不能满足我们对页面布局的多样化需求。别担心&#xff0c;CSS 多列布局能轻松帮你解决这个问题&#xff01; 一、什么是 CSS 多列布局&#xff1f; 多列布局&am…

在uniapp当中隐藏掉默认tabbar并且使用自己的tabbar

1. 修改配置 "tabBar": {"custom": true,"selectedColor": "#ffdead","list": [{"pagePath": "pages/index/index","text": "首页"}] },//在引入自定义Tabbar组件的时候在载入的时…

新手小白学习docker第九弹-----高级篇start-Dockerfile

docker目录 1 Dockerfile是什么2 Dockerfile能干嘛3 如何书写Dockerfile3.1 Dockerfile构建过程解析3.2 小总结3.3 Dockerfile的基本知识3.5 保留字FROMMAINTAINERRUN 有两种方式EXPOSEWORKDIRENVUSERVOLUMEADDCMDENTRYPOINT 4 后记 1 Dockerfile是什么 Dockerfile顾名思义就是…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 &#xff08;向上调整&#xff09;代码 &#xff08;向下调整&#xff09;代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

Autosar CP DDS规范导读

Autosar CP DDS 主要用途 数据通信 中间件协议&#xff1a;作为一种中间件协议&#xff0c;DDS实现了应用程序之间的高效数据通信&#xff0c;能够在不同的软件组件和ECU之间传输数据&#xff0c;确保数据的实时性和可靠性。跨平台通信&#xff1a;支持在AUTOSAR CP平台上的不同…