【Vue】如何实现打印功能:Printjs插件

前言

客户需求: 表单支持在线打印
实现思路: 百度…百度…百度之后,printjs 这款插件比较满足需求,无需下载,无需写打印模板,并且兼容Element-ui中el-form表单的打印。


一、Print.js介绍

Print.js官网

Print.js 主要是为了帮助我们直接在我们的应用程序中打印 PDF 文件,无需离开界面,也无需使用嵌入。 对于用户无需打开或下载 PDF 文件而只需打印它们的特殊情况。
支持“pdf”、“html”、“image”和“json”四种打印文档类型。默认为“pdf”。

PrintJS参数配置表

参数默认值描述
printablenull文档来源:pdf 或图片 url、html 元素 id 或 json 数据对象。
type‘pdf’可打印类型。可用的打印选项有:pdf、html、image、json 和 raw-html。
headernull用于与 HTML、图像或 JSON 打印的可选标题。它将被放置在页面顶部。此属性将接受文本或原始 HTML。
headerStyle‘font-weight: 300;’要应用于标题文本的可选标题样式。
maxWidth800最大文档宽度(以像素为单位)。根据需要更改此设置。在打印 HTML、图像或 JSON 时使用。
cssnull应用于正在打印的 html 的 css 文件 URL。值可以是具有单个 URL 的字符串或具有多个 URL 的数组。
stylenull自定义样式的字符串。应用于正在打印的 html。
scanStylestrue设置为 false 时,库将不会处理应用于正在打印的 html 的样式。在使用 css 参数时很有用。
targetStylenull默认情况下,库仅在打印 HTML 元素时处理某些样式。此选项允许您传递要处理的样式数组。例如:[‘padding-top’, ‘border-bottom’]
targetStylesnull与 targetStyle 相同,但是,这将处理任意范围的样式。例如:[‘border’, ‘padding’],将包括’border-bottom’、‘border-top’、‘border-left’、‘border-right’、‘padding-top’等。也可以通过 [’*'] 来处理所有样式。
ignoreElements[ ]传入打印父 html 元素时应忽略的 html id 数组。使其不打印。
propertiesnull打印 JSON 时使用。这些是对象属性名称。
gridHeaderStyle‘font-weight: bold;’打印 JSON 数据时网格标题的可选样式。
gridStyle‘border: 1px solid lightgray; margin-bottom: -1px;’打印 JSON 数据时网格行的可选样式。
repeatTableHeaderTRUE打印 JSON 数据时使用。设置为 false 时,数据表标题将仅显示在第一页。
showModalnull启用此选项可在检索或处理大型 PDF 文件时显示用户反馈。
modalMessageRetrieving Document…’当 showModal 设置为 true 时向用户显示的消息。
onLoadingStartnull加载 PDF 时要执行的功能
onLoadingEndnull加载 PDF 后要执行的功能
documentTitleDocument’打印 html、图像或 json 时,这将显示为文档标题。
fallbackPrintablenull打印 pdf 时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开 pdf。这允许您传递要打开的不同pdf文档,而不是在printable中传递的原始文档。如果您在备用pdf文件中注入javascript,这可能很有用。
onPdfOpennull打印 pdf 时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开 pdf。可以在此处传递回调函数,该函数将在发生这种情况时执行。在某些情况下,如果要处理打印流、更新用户界面等,它可能很有用。
onPrintDialogClosenull在浏览器打印对话框关闭后执行的回调函数。
onErrorerror => throw error发生错误时要执行的回调函数。
base64false在打印作为 base64 数据传递的 PDF 文档时使用。
honorMarginPadding (已弃用)true这用于保留或删除正在打印的元素中的填充和边距。有时这些样式设置在屏幕上很棒,但在打印时看起来很糟糕。您可以通过将其设置为 false 来将其删除。
honorColor (已弃用)false若要以彩色打印文本,请将此属性设置为 true。默认情况下,所有文本都将以黑色打印。
font(已弃用)TimesNewRoman’打印 HTML 或 JSON 时使用的字体。
font_size (已弃用)12pt’打印 HTML 或 JSON 时使用的字体大小。
imageStyle(已弃用)width:100%;’打印图像时使用。接受具有要应用于每个图像的自定义样式的字符串。

二、安装/引入

方法1.下载print.js

  1. 从官网下载print.js,将下载的 print.js 放入项目utils文件夹
  2. 可以全局引入即(在main.js中引入),也可以在需要的文件里面引入import Print from './utils/print'

方法2.使用npm安装print插件

  1. 安装print-jsnpm install print-js --save
  2. 可以全局引入即(在main.js中引入),也可以在需要的文件里面引入 import Print from 'print-js'

三、使用-“html”类型

在表单页面中调用打印方法

<template>
  <div class="app-container">
    <div id="printFrom">
      <el-form :ref="formRef" :model="form" :rules="validateRules">
      ...
      </el-form>
      <el-button type="info" @click="handlePrint(printData)">打印</el-button>
    </div>
  </div>
</template>

<script>

export default {
  data() {
    return {
      formRef: 'form',
      validateRules: [],
      printData: {
        printable: 'printFrom',
        header: '申请表',
        ignore: ['no-print']
      }
    }
  },
   handlePrint(params) {
     printJS({
       printable: params.printable, // 'printFrom', // 标签元素id
       type: params.type || 'html',
       header: params.header, // '表单',
       targetStyles: ['*'],
       style: '@page {margin:0 10mm};', // 可选-打印时去掉眉页眉尾
       ignoreElements: params.ignore || [], // ['no-print']
       properties: params.properties || null
     })
   }
 }
}
</script>

点击打印按钮,弹出打印预览界面,右边栏调整打印界面。
假设出现打印不全的问题,可以通过缩放来进行设置,数值越小,缩放的越小。在这里插入图片描述

四、其他Type示例

1.pdf

printJS('docs/printjs.pdf')
// 或
printJS({printable:'docs/printjs.pdf', type:'pdf', showModal:true})

2.image单个图像

printJS('images/print-01-highres.jpg', 'image')
// 或
printJS({printable: 'images/print-01-highres.jpg', type: 'image', header: 'My cool image header'})

3.image多个图像

printJS({
printable: ['images/print-01-highres.jpg', 'images/print-02-highres.jpg', 'images/print-03-highres.jpg'],
type: 'image',
header: 'Multiple Images',
imageStyle: 'width:50%;margin-bottom:20px;'
})

4.json

 someJSONdata = [
    {
       name: 'John Doe',
       email: 'john@doe.com',
       phone: '111-111-1111'
    },
    {
       name: 'Barry Allen',
       email: 'barry@flash.com',
       phone: '222-222-2222'
    },
    {
       name: 'Cool Dude',
       email: 'cool@dude.com',
       phone: '333-333-3333'
    }
 ]
 
printJS({
    printable: someJSONdata,
    properties: ['name', 'email', 'phone'],
    type: 'json',
    gridHeaderStyle: 'color: red;  border: 2px solid #3971A5;',
    gridStyle: 'border: 2px solid #3971A5;'
})

更多示例请参考Print.js官网


总结

以上便是printjs插件的使用场景,希望对大家有所帮助。

  • 7
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
jQuery打印插件 jQuery.print是一个用于打印页面特定部分的插件 用法 导入jQuery后将其包含在HTML中,如: < script type = “ text / JavaScript ” src = “ path / to / jquery.print.js ” > </ script > 使用它像: $(“#myElementId ”)。print(/ * options * /); 要么 $。print(“#myElementId ” / *,options * /); 您可以提交选项对象,如: $(“#myElementId ”)。print({ globalStyles : 是的, mediaPrint : false, stylesheet : null, noPrintSelector : “。 no -print ”, iframe : 是的, append : null, 前置: null, manualCopyFormValues : true, 延期: $。延期(), 超时: 750, title : null, doctype : ' <!doctype html> ' }); 目前,此插件支持以下选项: globalStyles 默认: true 可接受的值:布尔值 功能:是否应包含父文档中的样式 mediaPrint 默认: false 可接受的值:布尔值 功能:是否应包含带有media ='print'的链接标签; 由globalStyles选项覆盖 样式表 默认: null 可接受的值:URL字符串 功能:要包括的外部样式表的URL noPrintSelector 默认: ".no-print" 可接受的值:任何有效 jQuery-selector 功能:要从打印中排除的项目的选择器 IFRAME 默认值:true,如果传递no-vaild iframe选择器,则创建隐藏的iframe 可接受的值:任何有效jQuery-selector或布尔值 功能:是否从iframe打印而不是弹出窗口; 可以将jQuery-selector现有iframe作为值 附加/添加 默认: null 可接受的值:任何有效jQuery-selector或HTML文本 功能:在选定内容之前(前置)或之后(追加)添加自定义HTML manuallyCopyFormValues 默认: true 可接受的值:布尔值 功能:是否应将用户更新的表单输入值复制到打印的标记上(这可以通过手动迭代每个表单元素来完成) 延期的 默认: $.Deferred() 可接受的值:任何有效的jQuery.Deferred对象 功能:一旦调用print函数就解析的jQuery.Deferred对象。可用于设置回调 - 请参阅wiki 超时 默认: 750 可接受的值:以毫秒为单位的时间 setTimeout 功能:在创建新窗口/ iframe之前更改等待内容等加载内容的最大时间量,如果新窗口/ iframe 的load事件尚未触发,则作为后备 标题 默认值:null,使用主页标题 可接受的值:任何单行字符串 功能:更改打印的标题 DOCTYPE 默认: '<!doctype html>' Acceptable-Values:任何有效的doctype字符串 功能:将doctype添加到打印的文档框架中

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值