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.xdnf.cn/news/14036.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)

会议地点 悉尼会场:澳大利亚悉尼-悉尼科技大学空中科技大学功能中心,沃特尔(Aerial UTS Function Centre, Wattle Room) 具体地址:Building 10, Level 7, 235 Jones Street, Ultimo, New South Wales, 2007, AU 郑州…

从零开始快速构建Vue3项目

一、技术选型 组件大类 具体插件 vue3插件 相关插件开发文档 基础架构搭建 初始项目搭建、打包构件工具:vite开始 | Vite路由管理及菜单权限封装vue-router介绍 | Vue Router状态管理Pinia介绍 | Pinia 中文文档API请求及异常封装axiosUI框架 element-uihttps…

spring cloud 入门笔记1(RestTemplate,Consul)

最大感受: spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot,各个模块之间,不再是通过导包什么的,调用而是通过网路进行各个模块之间的调用 工具一:RestTemplate 在Java代码中发送HTTP请…

从虚构到现实!FAME助力模型编辑走向实际应用

论文:FAME: Towards Factual Multi-Task Model Editing 链接:https://arxiv.org/abs/2410.10859项目:https://github.com/BITHLP/FAME 前言 大语言模型中丰富的知识使得其在如智能助理,法律顾问,医疗咨询等多个领域中…

无需Photoshop即可在线裁剪和调整图像大小的工具

Bitmind是一个灵活且易于使用的批量图像本地化处理器,经过抓包看,这个工具在浏览器本地运行,不会上传图片到服务器,所以安全性完全有保证。 它可以将图像调整到任何特定尺寸,并在必要时按比例裁剪。 这是一个在线工具…

计算两个结构的乘法

在行列可自由变换的平面上,2点结构有3个 3点结构有6个 计算2*2 2a1*2a14a6 2a1*2a24a8 2a1*2a34a12 显然2a1*2a14a6因为这3个结构都分布在同一列上,就是整数乘法。2a1*2a2的结果有2种写法,一种外形像2a1细节为2a2,一种外形为2…

短剧项目全流程花费项目详解:从软件采购到OSS流量

一、引言 随着网络视频的兴起,短剧项目作为一种新兴的内容形式,受到了广泛关注。然而,短剧项目运营过程中涉及诸多费用,本文将对短剧项目的各项花费进行明细分析,以帮助相关从业者更好地规划预算和控制成本。 二、软…

Vector Optimization – Vector Mask Register

文章目录 Vector优化 – Vector掩码寄存器 Vector优化 – Vector掩码寄存器 One of the reasons for low levels of vectorization is the presence of conditionals (IF statements) inside loops. IF statements introduce control dependencies into a loop. 矢量化水平低的…

冗余连接2 hard题 代随C#写法

此题在卡码网109与力扣685题亦有记载 有一说一C#写法我没咋搞懂 就看明白了思路 这里贴一个答案待后续我醒悟了再来看罢 难就难在对整体数据结构classUnion(并查集)的理解不熟并且 对于输入输出这个迭代过程理解上也比较吃力 109. 冗余连接II 题…

MySQL:CRUD

MySQL表的增删改查(操作的是表中的记录) CRUD(增删改查) C-Create新增R-Retrieve检查,查询U-Update更新D-Delete删除 新增(Create) 语法: 单行数据全列插入 insert into 表名[字段一,字段…

【stable diffusion部署】手把手教你从0基础入门Stable Diffusion

前言 在开始学之前,我想提前说一下,我所理解的AI绘画的本质,就是手替,人提出方案,AI帮你完成具体的作画过程。 写这篇文章的初衷,网上的Stable Diffusion教程太多了,但是我真正去学的时候发现…

前端单元测试框架 引入说明

1. 背景: 2. 如何选择: 2.1. 流行框架 Jest:由Facebook开源的JavaScript测试框架,应用于脸书系以及 ReactJs 系Mocha:适用于 NodeJs 和 浏览器、简易、灵活、有趣的JavaScript 测试框架Jasmine:BDD&#…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代,SEO(搜索引擎优化)已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面,提高在搜索引擎结果页面上的排名,从而获得更多的自然流量。有效的SEO策略能够让您在激…

MacBook不额外安装软件,怎样投屏到安卓手机上?

提起iPhone或MacBook的投屏,人们总会想到airplay功能。但离开了苹果生态,其他品牌的手机电脑就未必配备airplay功能了。 如果想要将MacBook的电脑屏幕共享到安卓手机或平板上,到底要怎样做?需要安装什么软件吗? 不需要…

自定义面板,高效的游戏性能分析利器

为了更有效地聚焦并解决性能问题,UWA报告采用了分模块监控策略,确保每个模块独立成章,各司其职。然而,随着对性能分析需求的不断升级,我们已经意识到,在深入分析某些跨模块的性能瓶颈或优化点时&#xff0c…

2024第四次随堂测验参考答案

从第四次开始答案会以c语言提供&#xff0c;自行了解&#xff0c;学习 6-1 报数 报数游戏是这样的&#xff1a;有n个人围成一圈&#xff0c;按顺序从1到n编好号。从第一个人开始报数&#xff0c;报到m&#xff08;<n&#xff09;的人退出圈子&#xff1b;下一个人从1开始报…

CTF杂项基本题目思路(图片文件隐写-压缩文件-流量取证)

一、文件隐写 1.当遇到文件类型未知的文件时怎么办&#xff1f; ①linux系统可以使用file命令查看文件的类型&#xff0c;格式&#xff1a;file 文件名 ②使用winhex或者010editor查看文件头&#xff0c;从而判断文件的类型&#xff0c;①中file命令的本质也是查看文件的文件…

sa-token使用及与spring-security的对比

sa-token相关资料地址 官网: https://sa-token.cc/ gitee: https://gitee.com/dromara/sa-token github: https://github.com/dromara/sa-token 快速开始: https://sa-token.cc/doc.html#/ sa-token典型应用 这里我直接拿SpringBoot_v2&#xff08;springboot的开源后台脚手…

MySQL:left join后用on与where的区别

一、前言 前几天项目中&#xff0c;写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条&#xff0c;奈何发现还是有两条。在此记录一下&#xff0c;on与where的区别。 二、ON 原始数据展示 SELECT t1.*,t2.* FROM t_test_staff t1 left join t_te…

ANX9833FN-AA-R ANX9833 ANALOGIX QFN48 VGA视频转换器件

ANX9833概述:ANX9833是VGA显示接口适配器集成电路设计一个显示端口1.2/1.1源连接到一个VGA显示。与芯片上的单片机和记忆,ANX9833不需要任何外部配置或设置。它自动引导VGA显示接口适配器的输出,有效地处理所有类型的遗产显示器、投影仪,和电视。ANX9833提供Gbps带宽在两车道到…