界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器(二)

如今当用户需要处理PDF文件时,通常不得不下载应用程序或者浏览器插件,控制用户如何与PDF交互并不是一件容易的事。如果我们提供PDF作为内容,用户可以下载它并使用浏览器或PDF本身提供的控件进行交互。然而,一些企业可能希望控制用户使用PDF的方式,以提供更好的体验或在某些条件下限制下载。

构建这样的解决方案需要在后端和前端都付出巨大的努力,然而如果有一种方法可以让您在Angular PDF Viewer中用几行代码来管理PDF交互呢?Kendo UI for Angular PDFViewer可以帮助大家解决上述的一些问题,它以最佳的方式应用到每个合适的场景中。

P.S:Kendo UI for Angular是专用于Angular开发的专业级Angular组件,这些组件是专门为Angular构建的,没有任何jQuery依赖项。

在上文中(点击这里回顾>>),我们为大家介绍了构建PDF阅读器的基本设置、布局和PDF查看器构建等,本文将继续介绍如何处理Kendo UI PDF阅读器事件!

Kendo UI for Angular 2024 Q1新版下载(Q技术交流:726377843)

处理Kendo UI PDF Viewer事件

我们有几个挑战需要解决:

  • 当用户接受条款和条件时,从工具栏启用下载选项。
  • 保存并存储用户访问的最后一个页面。
  • 当用户达到页面限制时显示支付模式。

您觉得工作太多了吗?Kendo UI PDF Viewer使用事件侦听器和几行代码简化了这个过程。

使用Kendo UI PDFViewer工具栏

默认情况下,Kendo PDFViewer显示工具栏中的所有选项。然而我们想要更多的控制,并希望当用户同意条款和条件显示下载按钮。

Kendo UI PDF Viewer允许我们通过提供PDFListViewerTool键数组来定义工具栏中的选项列表,可以在reader.service.ts中指定这个列表,并在其后面添加一个包含所需工具栏选项的新数组。

最后实现一个allowDownload方法,将“download”键添加到工具栏选项数组中。这样当用户接受条款和条件时,“download”选项就可用了。

最后的代码看起来是这样:

import { Injectable } from '@angular/core';
import {PDFViewerTool} from "@progress/kendo-angular-pdfviewer";

export class ReaderService {
public assetURL = 'http://localhost:4200/assets/';

private currentPage: number = 0 ; // Initialize with the default page
private storageKey: string = 'book-page';

//list of new list of options
public toolbar: PDFViewerTool[] = ['search', 'selection', 'print', 'pager'];

savePage(page: number) {
localStorage.setItem(this.storageKey, page.toString());
}

getPage() {
const savedPage = localStorage.getItem(this.storageKey) || this.currentPage;
return +savedPage;
}

allowDownload(acceptTerms: boolean) {
if (acceptTerms) {
this.toolbar.push('download');
} else {
this.toolbar.pop();
}
}
}

接下来,声明一个名为toolbarOptions的新变量,并绑定readerService.toolbar:

toolbarOptions = this.readerService.toolbar;

然后将kendo-pdfviewer组件中的tools属性链接到toolbarOptions:

<kendo-pdfviewer
[tools]="toolbarOptions"
[saveFileName]="bookName"
[url]="pdfAssetUrl">
</kendo-pdfviewer>

保存更改后,您将注意到工具栏现在只显示前四个选项,由toolbarOptions指定。

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器

为了仅在用户同意这些条款时显示“download”选项,我们需要采取几个步骤。

首先创建一个名为acceptTerms的变量,使用Angular的ngModel和ngModelChange事件,我们就可以调用一个名为activateDownload的新方法,这个方法将触发我们服务中的allowdownload方法来更新工具栏选项。

export class AppComponent {
....
acceptTerms: boolean = false;

activateDownload() {
this.readerService.allowDownload(this.acceptTerms);
}
}

在app.component.html文件中,我们可以使用ngModel来绑定acceptTerms变量,并通过(ngModelChange)事件来监听变化。当用户与复选框交互时,此事件将触发activateDownload方法。

<input [(ngModel)]="acceptTerms" id="acceptTerms" type="checkbox" (ngModelChange)="activateDownload()"/>

保存更改,现在当选中“Agree with the Terms of Download”复选框时,“Download”选项应该出现在工具栏中,当您取消选中它时,它应该消失。

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器

现在可以控制工具栏了!接下来,让我们深入研究Kendo UI PDF Viewer的事件处理功能。

保存和加载事件

Kendo UI PDF Viewer提供了两个方便的事件:load和pageChange,我们将把这些事件附加到reader.service中的方法上,来加载或保存相关信息。

为此打开app.component.ts并创建一个名为saveCurrentPage的方法,该方法接受PDFViewerPageChangeEvent作为参数,此事件对象包含有关PDF中当前页面的信息。

saveCurrentPage($event: PDFViewerPageChangeEvent) {
this.readerService.savePage($event.currentPage);
}

在HTML文件中,将pageEvent与saveCurrentPage方法关联起来,并将PDF查看器的高度设置为600像素。

<kendo-pdfviewer
[tools]="toolbarOptions"
[saveFileName]="bookName"
[url]="pdfAssetUrl"
style="height: 600px;"
(pageChange)="saveCurrentPage($event)">
</kendo-pdfviewer>

保存更改后,服务将在本地存储中存储book-page键。

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器

要在用户加载PDF时跳转到特定的页面,并访问Kendo UI for Angular PDFViewer,我们可以使用Angular的ViewChild装饰器,这允许访问组件并监听加载事件。

首先向Kendo UI PDF Viewer组件添加一个模板引用,然后用一个名为loadPage()的新方法链接加载事件。

<kendo-pdfviewer
#pdfViewer
[tools]="toolbarOptions"
[saveFileName]="bookName"
[url]="pdfAssetUrl"
style="height: 600px;"
(pageChange)="saveCurrentPage($event)"
(load)="loadPage()"
>
</kendo-pdfviewer>

在app.component.ts中,声明一个与模板引用同名的ViewChild pdfViewer来访问PDFViewerComponent引用和bookPage来存储来自服务的getPage:

@ViewChild('pdfViewer') pdfViewer!: PDFViewerComponent;
bookPage = this.readerService.getPage();

添加loadPage方法,该方法利用pdfViewer的scrollToPage函数导航到readerService.getPage返回的页面。

loadPage() {
this.bookPage = this.readerService.getPage();
this.pdfViewer.scrollToPage(this.bookPage);
}

保存更改,PDF将跳转到您查看的最后一页。

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器

显示Paywall

为了锦上添花,我们希望在用户达到页面限制时阻塞UI,并阻止他们移动到下一页。

打开app.component.html,首先将只在选择图书时显示kendo-pdf-viewer和paywall,在ng-container中添加一个*ngIf指令来监视bookName。此外,使用另一个*ngIf指令来显示基于showMessageWall变量的paywall。

<ng-container *ngIf="bookName">
...

<div class="pay-wall" *ngIf="showMessageWall">
<h1>You reach limit to read </h1>

<button (click)="showMessageWall = false"> close</button>
</div>
</ng-container>

在app.component.ts中,添加两个新变量:

pageLimit = 2;
showMessageWall = false;

添加一个新方法来验证currentPage是否超过pageLimit,如果为true,则将showMessageWall设置为true,并使用scrollToPage方法跳转回pageLimit。

private canReadMore(currentPage: number) {
if (currentPage > this.pageLimit) {
this.pdfViewer.scrollToPage(this.pageLimit);
this.showMessageWall = true;
} else {
this.showMessageWall = false;
}
}

最后在saveCurrentPage函数中调用此方法,以便在每次用户更改页面时触发它。

saveCurrentPage($event: PDFViewerPageChangeEvent) {
const { currentPage } = $event;
this.readerService.savePage(currentPage);
this.canReadMore(currentPage);
}

继续保存它们,在那之后我们看到整个工作流程如预期的那样运行:Kendo UI for Angular PDFViewer加载、工具栏自定义,以及当页面达到限制时出现的paywall。

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器

总结

我们已经演示了Kendo UI for Angular PDFViewer如何为您节省时间和精力,借助工具栏自定义和事件处理等开箱即用的功能,您可以用最少的代码快速构建功能丰富的PDF查看器。保存用户偏好和集成paywall功能为您的应用程序增加了一层额外的复杂性,增强了用户体验。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql去除重复数据

需求描述 doc表有很多重复的title,想去除掉重复的记录 表结构 CREATE TABLE doc (id INT PRIMARY KEY,title VARCHAR(255),content TEXT );去重SQL -- 创建临时表 CREATE TEMPORARY TABLE temp_doc AS SELECT * FROM doc WHERE 10;-- 插入唯一的记录&#xff08;每个title最…

idea中快速找到当前git地址

idea中快速找到当前git地址 然后双击就可以看到地址了

哪有异地组网的工具?

不同地区的电脑与电脑、设备与设备、电脑与设备之间的信息远程通信&#xff0c;一直是企业和个人面临的难题。通过使用天联组网的解决方案&#xff0c;这个问题将迎刃而解。 天联组网解决方案 天联组网是一种可以实现不同地区之间电脑、设备及其之间的信息远程通信的解决方案。…

QT-demo:0轴分布图表

版本&#xff1a;5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库&#xff1a; pip install PyQt5 matplotlib创建和显示图表&#xff1a; import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…

关于在子线程中获取不到HttpServletRequest对象的问题

这篇文章主要分享一下项目里遇到的获取request对象为null的问题&#xff0c;具体是在登录的时候触发的邮箱提醒&#xff0c;获取客户端ip地址&#xff0c;然后通过ip地址定位获取定位信息&#xff0c;从而提示账号在哪里登录。 但是登录却发现获取request对象的时候报错了。 具…

香橙派OrangePI AiPro测评

实物 为AI而生 打开盒子 截图电源开机进入 作为一个AI产品,必须有一个人机交互的界面才行。大家都在跑算法,于是我就开始进行整理着手整理搭建Qt的环境。 1、下载源码 wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz待…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(2)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 哈希函数与哈希 之 哈希桶解决哈希冲突 的相关内容。 如果看到最后…

使用 Python 和 jieba 实现中文文本中的人名和公司名提取

在处理中文文本时&#xff0c;经常需要从中提取出人名和公司名称。比如在文本分析、信息提取和自然语言处理&#xff08;NLP&#xff09;等领域&#xff0c;这些任务都非常常见。本文将介绍如何使用wxPython创建一个简单的桌面应用程序&#xff0c;从一段中文长文中提取人名和公…

150.二叉树:二叉树的后序遍历(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

电脑下载了caj却打不开文献?使用CAJ阅读器,支持caj转word

如果电脑下载了CAJ文件却打不开文献&#xff0c;这通常是因为没有安装合适的阅读器。CAJ文件是中国知网的一种专用全文阅读格式&#xff0c;需要使用专门的CAJ阅读器&#xff08;CAJViewer&#xff09;来打开和阅读。 首先&#xff1a;使用CAJ阅读器 请确保你已经正确安装了CA…

【机器学习】解锁AI密码:神经网络算法详解与前沿探索

&#x1f440;传送门&#x1f440; &#x1f50d;引言&#x1f340;神经网络的基本原理&#x1f680;神经网络的结构&#x1f4d5;神经网络的训练过程&#x1f686;神经网络的应用实例&#x1f496;未来发展趋势&#x1f496;结语 &#x1f50d;引言 随着人工智能技术的飞速发…

【python】生成对抗网络(GAN):理论与PlugLink实践

【python】生成对抗网络&#xff08;GAN&#xff09;&#xff1a;理论与PlugLink实践 本文将介绍一种流行的图像生成技术——生成对抗网络&#xff08;GAN&#xff09;&#xff0c;并结合PlugLink平台&#xff0c;展示如何将这一技术应用于实际项目中。简单来说&#xff0c;它…

查看远程桌面连接登录不上服务器,远程桌面连接登录不上服务器是什么情况?怎么解决?

在信息技术领域&#xff0c;远程桌面连接&#xff08;RDP&#xff09;是一种重要的远程管理工具&#xff0c;它允许管理员或用户从远程位置访问和控制服务器或计算机。然而&#xff0c;在实际操作中&#xff0c;远程桌面连接不上服务器的情况时有发生&#xff0c;这通常是由多种…

excel数据丢失怎么办?表格文件恢复的3个方法

Excel作为一个常用的表格文件&#xff0c;我们在工作中经常都需要用到它。最令人崩溃的事就是有时候我们辛辛苦苦用Excel完成了工作&#xff0c;但是突然发现Excel数据丢失。这可怎么办呢&#xff1f;如何找回丢失的Excel数据&#xff1f;下面小编就分享几种恢复办法。 方法一&…

【LLM第7篇】transformer跟bert、gpt、大模型的联系

上一篇讲了transformer的原理&#xff0c;接下来&#xff0c;看看它的衍生物们。 Transformer基本架构 Transformer模型主要由两部分组成&#xff1a;编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;。编码器负责处理输入序列&#xff0c;将其…

如何使用OCR批量提取短剧和电视剧内的字幕?

为什么使用光字符识别 (OCR) 提取视频字幕&#xff1f; 视频字幕提取是将视频中的字幕转换为 SRT 格式文本的过程。传统方法是使用自动语音识别 (ASR) 技术&#xff0c;但对于某些类型的视频&#xff08;例如短剧、电视剧、电影、访谈等节目&#xff09;&#xff0c;由于这类型…

想让企业“火力全开”?找六西格玛培训公司就对了!

在如今的市场环境中&#xff0c;企业面临着不断变化的挑战和无限的可能。要在这场竞争中独领风骚&#xff0c;实现稳健的增长&#xff0c;六西格玛作为一种以数据驱动的管理理论&#xff0c;提供了实际可行的解决方案。六西格玛培训公司&#xff0c;作为这一领域的专家&#xf…

maven聚合工程整合springboot+mybatisplus遇到的问题

前言&#xff08;可以直接跳过看下面解决方法&#xff09; 项目结构 两个module&#xff1a; yema-terminal-boot 是springboot项目&#xff0c;子包有&#xff1a;controller、service、dao 等等。属于经典三层架构。那么&#xff0c;该module可以理解为是一个单体项目&…

如何关闭MySQL凌晨12点自动弹窗?

要关闭 MySQL 在凌晨 12 点自动弹窗的行为&#xff0c;首先需要确定弹窗的具体原因。 打开“任务计划程序”&#xff1a; 按 Win R&#xff0c;输入 taskschd.msc&#xff0c;然后按 Enter。 在左侧导航栏中&#xff0c;选择“任务计划程序库”。 查找与 MySQL 相关的任务&…

嵌入式进阶——矩阵键盘

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 矩阵按键原理图按键状态检测单行按键状态检测多行按键状态检测 状态记录状态优化循环优化 矩阵按键 矩阵键盘是一种常见的数字输入…