网页打印与导出word实现在A4纸上相同效果

article/2025/10/7 8:23:09

在工作中遇到这样一个需求,客户要求: 1、实现在浏览器中打印和导出到word中,要求浏览器打印出来的效果和word中打印的效果基本一致。2、打印的内容要自动分页,第一页的顶部有文件头,最后一页的底部有页尾。
在这里插入图片描述

这里记录一下实现的步骤:
首先明确几件事:

  • 电脑屏幕一英寸面积内有72个点
  • 1英寸=2.54厘米 = 72个点(point、磅) 即:1in= 2.54cm= 72pt
  • 在Windows系统的默认采用的是分辨率是96,也就是一英寸96个像素点,这样磅和像素的换算关系是1pt = 96/72 px。
  • A4纸规格尺寸为210mm×297mm
  • word中的 1倍行距,指的是1倍于行网格的大小;CSS中的line-height是当前字体大小为基准来计算。

通过以上计算后可得A4纸96dpi下的分辨率约为794px×1123px,这是我们在制作网页的时候需要的像素。
需求中Word文档取边距为上下2.54cm,左右2.54cm,去掉边距在网页中要打印的内容应为 601px* 930px。
更简单的方法,使用类似photoshop的工具新建文件,直接能够得出以上答案。
在这里插入图片描述
由于网页本身支持pt做单位,之后会用pt为单位实现这个需求,下图为去掉页边距后网页的尺寸
在这里插入图片描述
字体单位大小对照换算表
在这里插入图片描述

前端实现

  • 使用插件html-docx-js和file-saver实现导出word功能
  • 使用媒体查询针对打印样式设置,并针对差异设置打印的样式覆盖掉之前的默认样式。
    css中设置纸张、方向、页边距
    @media print {@page {size: A4 portrait; margin: 2.54cm 2.54cm;}
    }
    

把指定内容置于最后一页的页尾

基本思路是使用dom获取网页内容的高度,单位是像素,我们每页的高度是930px,取余后得到尾页的高度,通过在加入空行<br>来调整尾页高度接近930px(不能超过)。

通过各种尝试,效果基本实现了,不过还有些瑕疵,再调整吧。
未完待续…


http://chatgpt.dhexx.cn/article/FsnKGcqw.shtml

相关文章

网页打印文档,不弹出浏览器打印对话框设计思路

一、需求 客户提出一个功能&#xff0c;在浏览器上点击打印按钮&#xff0c;不弹出浏览器的打印对话框&#xff0c;让打印机直接打印所需内容。 二、过程 在接收到该需求后&#xff0c;就去查询相关资料&#xff0c;查询到一个解决方案&#xff0c;使用ie插件&#xff0c;由于…

网页打印表格

如标题所说就是调用网页打印器来打印表格&#xff0c;先说以下具体实现步骤&#xff1a; 将数据查询出来&#xff08;因为网页的打印器是打印的当前网页的内容&#xff0c;所以需要新建一个页面专门用来打印数据用&#xff09; 查询出来的数据保存到请求中&#xff0c;在把请求…

页面打印不全怎么办html css,win7打印网页显示不全怎么办|win7设置网页打印页面的方法...

‍‍ 有很多win7 32位系统的用户反馈&#xff0c;在使用浏览器的网页打印功能时&#xff0c;发现打印出来的网页显示不全&#xff0c;内容超出了纸张&#xff0c;遇到win7打印网页显示不全怎么办呢&#xff1f;出现打印网页显示不全很有可能是网页打印页面设置出了问题&#xf…

Javascript网页打印大全

目录 普通打印&#xff08;整页打&#xff09;打印去掉/添加页眉页脚 使用外部控件/方法实现多功能打印 打印背景 普通打印&#xff08;整页打&#xff09; window.print(); 打印网页内部分内容&#xff08;自定义&#xff09; 用css控制 media print .a {display:block}…

java.util. 什么意思_java.util中,util是什么意义

展开全部 1. util包的框架 常用的集合类主要636f70793231313335323631343130323136353331333431343630实现两个“super接口”而来&#xff1a;Collection和Map。 1.1 Collection有两个子接口&#xff1a;List和Set List特点是元素有序&#xff0c;且可重复。实现的常用集合类有…

Java.util包简单总结

之前听一位老师讲过&#xff0c;学Java的程序员&#xff0c;lang包和util包至少是要过一遍的。 很惭愧的是&#xff0c;从入门到现在&#xff0c;我还没完整的探究过这两个基础包。 今天借着跟公司小伙伴分享的机会&#xff0c;把util包简单的梳理一遍。由于最近加班很多&…

mysql-Util

将13位的时间戳字符串转换为4位的年的字符串 FROM_UNIXTIME(CONVERT(UPLOAD_TIME/1000 , signed),"%Y") 年结果&#xff1a; 将10位的时间戳字符串转换为4位的年的字符串 FROM_UNIXTIME(CONVERT(UPLOAD_TIME , signed),"%Y") 年结果&#xff1a; 根据A…

Util类简单介绍

集合简单介绍 一. Set集合 1.不包含重复元素、无序的元素集合 且存和取顺序不一致 无索引 2.Set集合的实现类有HashSet和LinkedHashSet Set接口继承于Collection接口 3.Set集合中没有get()方法 只有add(Element e)方法 没有add(key,Element)方法 4. 如&#xff1a;HashSet mySe…

史上最全总结!Util、POJO、domain、entity、model、DAO、DTO、view、mapper、service、controller的作用和区别分析

文章目录 前言工具类层Util 数据层POJO对象domainentitymodelviewDTO总结 数据访问层DAOmapper 业务层service 控制层Controller 前言 做开发项目时&#xff0c;总会遇到这些包&#xff0c;理清他们的层次&#xff0c;非常有助于我们对于项目的理解和建立。 现阶段CSDN上貌似…

vivado case_【vivado(3)】序列检测/状态机

手机上不好看可用电脑看 (1)首先建立一个工程名叫seq_det: 详细步骤可查看: 【vivado(1)】vivado软件的简单使用 【vivado(2)】计数器/testbench仿真 (2)建立一个design source如下所示: 右击design source, 选择add or create design source, 然后next 选择create file, …

vivado dcp生成

dcp与edif (write_edif命令生成) 比较&#xff1a; dcp主要有两个优点&#xff1a;第一个不需要手动生成stub文件&#xff0c;dcp是一个 压缩包里面包含所有文件。 第二个不需要xdc&#xff0c;尤其对于使用ip的设计。同时还可以使用加密功能。 不同阶段产生的dcp也不相同&a…

vivado ip打包归档

一般来说&#xff0c;要保存vivado工程使用的ip只需要xci文档即可。 但xci文档不仅仅是包含对应ip的配置信息&#xff0c;同样记录了一些path路径&#xff0c;以及ip核的属性&#xff08;core container/ooc等&#xff09; 使能core container后,将会以xcix方式保存ip核信息&…

Vivado驱动安装

一、卸载 二、打开Vivado 1 、 2 、 3、 4、 确认即可 5、安装证书 6、安装驱动 三、更新驱动程序

vivado2020.2导入原工程IP

vivado2020.2导入原工程IP 将原工程IP导入新工程中在新工程中添加每个IP的xci文件 将原工程IP导入新工程中 vivado 2022.2的IP在当前工程中.srcs中IP目录中&#xff0c;如下图&#xff1a; 将所需要转移的IP将完整的文件夹复制到新工程同样的目录中。 在新工程中添加每个IP的…

vivado 配置matlab,Matlab vivado

FPGA很多时候是用来做信号处理&#xff0c;而做信号处理都离不开Matlab。如通信中的调制解调、纠错码、各类编解码&#xff0c;这些都离不开Matlab&#xff0c;因为Matlab中simulink有非常丰富的库&#xff0c;方便客户建模和仿真。 以前modelsim 通过simulinx建模后&#xff0…

vivado使用方法

一、新建工程 首先打开vivado2017.4 点击create project 点击next 为新建的工程起名字&#xff0c;路径和名字都不要有中文 起好名字后点击next 起好名字后点击next 选择RTL project&#xff0c;勾选do not specify sources at this time,表示以后再配置资源文件 选…

【vivado UG学习】Synthesis策略学习

目录 1.1 综合方法1.2 使用Sythesis1.2.1 Sythesis设置1.2.2 创建运行策略1.2.3 控制文件编译顺序 1.2 运行Synthesis1.2.1 使用Tcl运行Synthesis1.2.2 RTL synthesis的多线程处理 参考文档 综合是将rtl指定的设计转换为门级表示的过程 1.1 综合方法 Vivado&#xff0c;可以&…

vivado filemgmt 20-2001

这个问题可能和vivado的打开路径有关&#xff0c;最好在工程路径下的shell中打开vivado在选择当前工程&#xff0c; 实测我遇到这个现象就是这个问题&#xff1a; 换到当前工程目录后&#xff1a;vivado在打开的位置都会生成一些log/jou文件等 参考&#xff1a; Xilinx Custo…

vivado 和 modesim 联合仿真快速修改重仿

vivado与modelsim的联合仿真(一)_坚持-CSDN博客_modelsim和vivado 1 编译联合仿真库 tool → compile_simulation_libraries &#xff0c;选择simulator 为 modelsim simulator&#xff0c;填写好 compiled library location(联合库存放地址)&#xff0c;simulator ex…

Vivado设置

1.本文部分素材来源网络&#xff0c;版权归原作者所有&#xff0c;如涉及作品版权问题&#xff0c;请与我联系删除&#xff1b; 2.未经原作者允许不得转载本文内容&#xff0c;否则将视为侵权&#xff1b; 3.转载或者引用本文内容请注明来源及原作者&#xff1b; 4.对于不遵…