Angular 与PDF之二:打印预览的实现

这篇具有很好参考价值的文章主要介绍了Angular 与PDF之二:打印预览的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

angular显示pdf,Angular,angular

如何在angular中实现打印和预览pdf的功能, 使用print.js这个包就可实现这个功能

Print.js介绍

Print.js可以打印pdf文件,html元素,图片。官网 https://printjs.crabbly.com/

Print.js使用

首先新建一个angular项目,在项目里下载print.js

npm install print-js –save

下载好了之后在组件里引入它

import { Component } from '@angular/core';
import printJS from 'print-js';

先来试试打印和预览pdf文件

准备一个pdf文件,然后在ts文件里写下这些代码

import { Component } from '@angular/core';
import printJS from 'print-js';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  onPrint() {
    printJS({
      // 文件的路径
      printable: 'assets/pdf/test.pdf',
      // 文件的类别
      type: 'pdf'
    })
  }
}

html文件

<div>
  <h1>打印预览pdf</h1>
  <button (click)="onPrint()">预览</button>
</div>

启动项目打开页面,点击按钮

angular显示pdf,Angular,angular

成功了

接下来打印预览一下图片

准备一张图片,在ts里写下这个代码

onPrint() {
    // 打印pdf文件
    // printJS({
    //   // 文件的路径
    //   printable: 'assets/pdf/test.pdf',
    //   // 文件的类别
    //   type: 'pdf'
    // })

    // 打印图片
    printJS({
      // 文件的路径
      printable: 'assets/img/d048a0bba045f6f2869e233bc46e0a76.jpg',
      // 文件的类别
      type: 'image'
    })
  }

然后到页面点击预览按钮

angular显示pdf,Angular,angular

也完成了

最后是打印预览html元素

先在ts里写下这些代码

import { Component, ViewChild, ElementRef } from '@angular/core';
import printJS from 'print-js';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  
  @ViewChild('tablelist') tablelist: ElementRef;
  data = [
    {
      name: '张三',
      age: '18',
      gender: '男'
    },
    {
      name: '李四',
      age: '19',
      gender: '男'
    },
    {
      name: '王五',
      age: '20',
      gender: '女'
    }
  ]
  onPrint() {
    // 打印html元素
    printJS({
      // 元素的id或者元素本身
      printable: 'list',
      // 类别
      type: 'html'
    })
  }
}

 然后是html

<div>
  <h1>打印预览pdf</h1>
  <table id="list" #tablelist>
    <thead>
      <tr>
        <th>名字</th>
        <th>性别</th>
        <th>年龄</th>
      </tr>
    </thead>
    <tbody>
      <tr *ngFor="let item of data">
        <td>{{ item.name }}</td>
        <td>{{ item.gender }}</td>
        <td>{{ item.age }}</td>
      </tr>
    </tbody>
  </table>
  <button (click)="onPrint()">预览</button>
</div>

最后是css

table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,th {
  padding: 0;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
  empty-cells: show;
  border: 1px solid #cbcbcb;
}
table caption {
  color: #000;
  font: italic 85%/1 arial,sans-serif;
  padding: 1em 0;
  text-align: center;
}
table td,table th {
  border-left: 1px solid #cbcbcb;
  border-width: 0 0 0 1px;
  font-size: inherit;
  margin: 0;
  overflow: visible;
  padding: .5em 1em;
}
table thead {
  background-color: #e0e0e0;
  color: #000;
  text-align: left;
  vertical-align: bottom;
}
table td {
  background-color: transparent;
}

 打开页面看下效果

angular显示pdf,Angular,angular

表格是这样的

预览一下

angular显示pdf,Angular,angular

表格是成功出来的,但是样式丢失了,css的样式没有生效,这种情况下我们可以结合一个包解决 html2canvas

下载 npm install html2canvas

下载完了引入组件

import html2canvas from 'html2canvas';

 修改下ts代码

onPrint() {
    html2canvas(this.tablelist.nativeElement, {
      useCORS: true,
      width: this.tablelist.nativeElement.scrollWidth,
      height: this.tablelist.nativeElement.scrollHeight
    }).then((canvas) => {
      printJS({
        printable: canvas,
        type: 'html'
      })
    })
  }

打开页面预览一下

angular显示pdf,Angular,angular成功了

但是这种方法不能自定义样式,如果想要自定义样式的话,可以通过printjs里的css选项

先在src/assets文件夹下新建一个css文件夹,再在css文件夹下新建一个print.css文件,写下这些样式

* {

  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;

}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,th {
  padding: 0;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
  empty-cells: show;
  border: 1px solid #cbcbcb;
}
table caption {
  color: #000;
  font: italic 85%/1 arial,sans-serif;
  padding: 1em 0;
  text-align: center;
}
table td,table th {
  border-left: 1px solid #cbcbcb;
  border-width: 0 0 0 1px;
  font-size: inherit;
  margin: 0;
  overflow: visible;
  padding: .5em 1em;
}
table thead {
  background-color: #0000ff;
  color: #000;
  text-align: left;
  vertical-align: bottom;
}
table td {
  background-color: transparent;
}

这些样式和之前表格的样式一样,只是把表头的背景颜色改成蓝色

修改下onPrint方法

onPrint() {
    printJS({
      printable: 'list', // html元素的id
      type: 'html', // 类别
      css: '/assets/css/print.css' // css文件的路径
    })
  }

打开页面预览一下

angular显示pdf,Angular,angular

成功 除了css这个选项,printjs还有style这个选项,这个选项就是直接把css样式写在style选项里,修改下onPrint 方法

onPrint() {
    printJS({
      printable: 'list', // html元素的id
      type: 'html', // 类别
      // css: '/assets/css/print.css' // css文件的路径
      style: `
        * {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
      
        }
        table {
          border-collapse: collapse;
          border-spacing: 0;
        }
        td,th {
          padding: 0;
        }
        table {
          border-collapse: collapse;
          border-spacing: 0;
          empty-cells: show;
          border: 1px solid #cbcbcb;
        }
        table caption {
          color: #000;
          font: italic 85%/1 arial,sans-serif;
          padding: 1em 0;
          text-align: center;
        }
        table td,table th {
          border-left: 1px solid #cbcbcb;
          border-width: 0 0 0 1px;
          font-size: inherit;
          margin: 0;
          overflow: visible;
          padding: .5em 1em;
        }
        table thead {
          background-color: #0000ff;
          color: #000;
          text-align: left;
          vertical-align: bottom;
        }
        table td {
          background-color: transparent;
        }
      `
    })
  }

打开页面预览一下

angular显示pdf,Angular,angular

效果和css选项是一样的

这两个选项也能搭配使用

修改下onPrint方法

onPrint() {
    printJS({
      printable: 'list', // html元素的id
      type: 'html', // 类别
      css: '/assets/css/print.css', // css文件的路径
      style: `
        table thead {
          background-color: red;
        }
      `
    })
  }

在css里 表头的背景色是蓝色,然后在style里把它改成红色,预览下看下效果

angular显示pdf,Angular,angular

生效了 文章来源地址https://www.toymoban.com/news/detail-615947.html

到了这里,关于Angular 与PDF之二:打印预览的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#和pdf.js实现分片预览pdf

    源码如下: 源代码github地址: https://github.com/LeoMingGit/dotNetPractiseCollect/blob/master/%E5%88%86%E7%89%87%E9%A2%84%E8%A7%88pdf/FileStoreController.cs

    2024年02月12日
    浏览(36)
  • vue-pdf实现pdf文件在线预览

    在日常的工作中在线预览 PDF 文件的需求是很多的,下面介绍一下使用 vue-pdf 实现pdf文件在线预览 使用 npm 安装 vue-pdf npm install vue-pdf 使用 vue-pdf 显示 PDF 文件 此时页面中就会显示我们提供的 PDF 文件了,但是此时只显示了 PDF 文件的第一页 按页显示 PDF 文件 使用 vue-pdf 能满足

    2024年02月13日
    浏览(46)
  • 前端实现pdf预览

    前言:项目中之前pdf预览是客户端andrio实现的,现在需要前端H5自己实现预览功能,项目是基于vue的H5项目,记录一下pdf预览功能实现的过程和问题 一、利用iframe实现pdf预览 1、实现过程 将pdf路径设置给iframe的src属性 2、遇到的问题 电脑上测试正常,但是安卓端会出现空白页

    2024年02月13日
    浏览(33)
  • Vue中使用pdf.js实现在线预览pdf文件流

    以下是在Vue中使用pdf.js实现在线预览pdf文件流的步骤: 在需要使用的组件中,使用以下代码引入pdf.js: 使用pdf.js的 getDocument() 方法加载pdf文件流。可以将文件流作为Blob对象传递给该方法。例如,可以使用axios从服务器获取pdf文件流: 在 loadPdf() 方法中,使用 getDocument() 方法

    2024年02月09日
    浏览(67)
  • Java实现PDF导出/预览

            网上有很多关于PDF导出的文章,但是个人感觉实现的过于复杂,又是模板又是html的,有的还需要字体模板的支持,本片文章只是实现简单的PDF表格导出,可以实现PDF动态表格导出/预览,这类文章网上很少,就给你们整理一篇吧! 实现思路:本地创建PDF文件 --》打开

    2024年02月16日
    浏览(51)
  • 内嵌 iframe 实现PDF预览

    效果图如下: 代码如下:

    2024年02月12日
    浏览(57)
  • vue实现pdf预览功能

    背景:材料上传之后点击预览实现在浏览器上预览的效果 效果如下: 实现代码如下: //预览和下载操作 后台返回的流文件格式

    2024年02月13日
    浏览(42)
  • 前端实现PDF预览【vue】

    前言:项目中提出这样一个需求,在移动端H5页面预览pdf功能。pdf文件由后端返回的一个地址,前端实现展示预览pdf文件 在此仅提供两种方法: 一、使用iframe标签通过src属性直接展示pdf文件         坑点:兼容比较差,PC端能正常展示,移动端会出现空白的问题 二、使用第

    2024年01月16日
    浏览(52)
  • vue 实现 pdf 预览功能

    Vue.js 是一种用于构建用户界面的渐进式框架。它具有以下特点: 易学易用:Vue.js 的 API 设计简单直观,使得开发者可以快速上手。 响应式数据绑定:Vue.js 使用了响应式的数据绑定机制,当数据发生变化时,页面会自动更新。 组件化开发:Vue.js 支持组件化开发,将界面拆分

    2024年02月12日
    浏览(40)
  • 微信小程序实现PDF预览功能——pdf.js(含源码解析)

    前言 前一段时间遇到了一个需求,关于 pdf 文件的预览,客户要求如下: 只能在微信小程序内预览,不能调起本地浏览器预览; 需要让用户强制阅读 10s 后才算阅读完成,进而进行下一步操作; 用户不能下载预览的 pdf 文件; 因为一些原因(此处省略一万字🐎),这个项目

    2023年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包