界面组件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依赖项。

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

场景

为一所大学开发一个应用程序,管理部门希望为学生提供以下功能:

  • 加载PDF不需要插件
  • 把读过的最后一页保存起来
  • 只有在接受条款和条件后才能启用下载
设置项目

为了满足大学的需求,我们使用Kendo UI for Angular PDFViewer,这个组件提供了大量的功能,当与Angular集成时可提供一个全面的解决方案。

首先,用命令ng new elearning-platform设置Angular应用。

ng new elearning-platform
cd elearning-platform
npm install

Kendo UI提供了一个schematics命令来注册它的Angular PDF Viewer。

ng add @progress/kendo-angular-pdfviewer
i Using package manager: npm
√ Found compatible package version: @progress/kendo-angular-pdfviewer@14.0.0.
√ Package information loaded.
The package @progress/kendo-angular-pdfviewer@14.0.0 will be installed and executed.
Would you like to proceed? Yes
√ Packages successfully installed.
UPDATE src/app/app.module.ts (515 bytes)
UPDATE package.json (1708 bytes)
UPDATE angular.json (3165 bytes)
√ Packages installed successfully.
UPDATE src/main.ts (259 bytes)
UPDATE tsconfig.app.json (294 bytes)
UPDATE tsconfig.spec.json (300 bytes)

我们已经设置好了,现在开始为用户和PDF Viewer定义布局和界面。

布局和PDF查看器

首先从app.component.html中删除默认的HTML,添加以下HTML元素:

  • 用于选择PDF(选项:angular.pdf和signals.pdf)的下拉列表。
  • 一个复选框,同意下载条款和条件。
<h1>Welcome to E-learning Platform</h1>
<h2>You can read online and save the state, also download the book (if you agree with the terms)</h2>

<select>
<option value="angular.pdf">Angular</option>
<option value="signals.pdf">Signals</option>
</select>

<label for="acceptTerms">
Do you agree with the terms of download?
</label>

<input id="acceptTerms" type="checkbox" />

要添加kendo-pdfviewer和“paywall”横幅,请在导入部分导入PDFViewerModule模块。

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import {PDFViewerModule} from "@progress/kendo-angular-pdfviewer";

@Component({
selector: 'app-root',
standalone: true,
imports: [CommonModule, RouterOutlet, PDFViewerModule],
templateUrl: './app.component.html',
styleUrl: './app.component.css'
})
export class AppComponent {
title = 'elearning-platform';
}

接下来,添加kendo-pdfviewer和pay-wall元素,这些元素应该只在用户从下拉列表中选择一个选项时出现。为了简化,将它们封装在一个ng容器中。

<ng-container>
<kendo-pdfviewer >
</kendo-pdfviewer>
<div class="pay-wall">
<h1>You reach limit to read </h1>
<button>Close</button>
</div>
</ng-container>

保存后,布局应该是这样的:

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

我们现在有了一个没有任何交互的布局,在继续之前先在assets目录中创建两个PDF文件——名称与下拉菜单中显示的一致(angular.pdf和signals.pdf)。

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

阅读器服务

其中一个主要特性是能够在用户返回平台时记住他们离开的地方,这意味着当用户打开PDF时,他们应该被带到在上次会话中离开的确切页面。

实现这一点的最简单方法是在浏览器中使用本地存储,然而为了减少app.component中的代码量,我们将创建一个服务来封装保存和存储页码的逻辑。

要生成这个服务,使用Angular CLI命令ng g s services/reader。

ng g s services/reader
CREATE src/app/services/reader.service.spec.ts (357 bytes)
CREATE src/app/services/reader.service.ts (135 bytes)

打开reader.service.ts文件,执行如下操作:

  • 将PDF文件的资产URL指定为 http://localhost:4200/assets/。
  • 添加storageKey和initialPage变量。
  • 实现两个方法,savePage和getPage。我们将把这些方法连接到pdf-kendo-viewer事件来保存和加载页面。
public assetURL = 'http://localhost:4200/assets/';
private currentPage: number = 1;
private storageKey: string = 'book-page';

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

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

reader.service有了第一个版本,让我们将它与HTML标记和Kendo UI PDF查看器连接起来。

将资产绑定到Kendo PDF查看器

现在我们已经准备好了ReaderService,下一步是启用第一个交互并显示PDF。为此,我们需要在app.component.ts文件中工作,并注入ReaderService。

下面是我们将要介绍的内容:

  • 将ReaderService注入组件。
  • 初始化pdfAssetUrl和bookName变量。
  • 创建一个selectBook方法,根据从下拉列表中选择的图书更新pdfAssetUrl。
  • 将pdfAssetUrl和bookName绑定到PDF查看器。

首先,导入ReaderService,并使用Angular的依赖注入将其注入到组件中。

import { Component, inject } from '@angular/core';
import { ReaderService } from './services/reader.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
title = 'elearning-platform';
readerService = inject(ReaderService);
....

接下来,让我们声明必要的变量并实现selectBook方法。在这个方法中,我们将通过组合readerService来更新readerService.assetUrl和bookName。

方法如下:

export class AppComponent {
title = 'elearning-platform';
readerService = inject(ReaderService);
pdfAssetUrl = '';
bookName!: string;
selectBook() {
this.pdfAssetUrl = `${this.readerService.assetURL}${this.bookName}`;
}
}

我们如何将这些变量与方法联系起来,并对变化做出反应?Angular提供了几种方法来监听事件并对变化做出反应,为了响应select元素中的change方法,我们可以使用(change)事件并将其链接到selectBook函数。

如何将选择元素的值链接到bookName变量?别担心,Angular提供了ngModel,它是FormsModule的一部分,它通过双向数据绑定帮助我们对变化做出反应。

<select (change)="selectBook()" [(ngModel)]="bookName">
<option value="angular.pdf">Angular</option>
<option value="signals.pdf">Signals</option>
</select>

接下来,我们希望响应更改,以便将PDF加载到kendo-pdfviewer组件中。为了实现这一点,我们绑定了url和saveFileName属性。

saveFileName属性允许我们在用户单击下载工具栏时定义文件的名称。

url属性是将PDF绑定到组件的几种方法之一,在本例中,我们提供存储PDF的URL。

最后的代码看起来像:

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

保存更改,然后重新加载页面并与下拉菜单交互来加载不同的PDF。

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

是的,我们已经成功加载了PDF!但是,仍然有一些功能需要完成,例如保存页面位置和控制下载选项。篇幅有限,未完待续下期见~

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

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

相关文章

PN结击穿与电容效应分析

PN结是半导体器件中的一个基本结构&#xff0c;它由P型半导体和N型半导体紧密接触并相互结合在一起形成。P型半导体富含空穴&#xff08;正电荷载体&#xff09;&#xff0c;是通过掺入受主杂质原子得到的&#xff1b;而N型半导体富含自由电子&#xff08;负电荷载体&#xff0…

『春招实习』2023年3月春招实习求职经历

『春招实习』2023年3月春招实习求职经历 简介货拉拉一面杭州吉里一面传墨科技一面 简介 3月初我便开始陆续投递简历&#xff0c;直观的感受就是【投递的太晚了】&#xff0c;很多公司很早就开始招聘实习生了。 但是自己一直在担心没准备好&#xff0c;所以就想着再准备一天就投…

Covalent Network(CQT)为 Arbitrum 生态提供 250 万美元的资助,以促进 Web3 的创新与发展

Covalent Network&#xff08;CQT&#xff09;作为 Web3 领先的“数据可用性”层&#xff0c;宣布将提供 250 万美元的资金以支持 Arbitrum 生态项目&#xff0c;包括 Arbitrum One、Nova、Orbit 或 Stylus。此举旨在通过提供资源和帮助&#xff0c;推动利用 Arbitrum 网络上 C…

第二证券|股票w是什么意思?

字母W开头是指在科创板上市&#xff0c;发行人具有表决权差异组织的&#xff0c;即同股不同权的股票。上市后不再具有表决权差异组织的&#xff0c;该特别标识撤销。 科创板其他一些特别的字母标识&#xff1a; 1、发行人尚未盈余的&#xff0c;其股票或存托凭据的特别标识为…

windows10为什么微信可以上网浏览器无法上网?

windows10为什么微信可以上网浏览器无法上网&#xff1f; 问题描述解决办法 问题描述 打开电脑学习时&#xff0c;微信可以上网&#xff0c;浏览器无法上网&#xff0c;如何解决&#xff1f; 解决办法 1.控制面板->网络和Internet 2.Internet选项 3.Internet属性->连…

SQLI-labs-第十三关和第十四关

知识点&#xff1a;POST方式的单引号和括号闭合错误,报错注入 第十三关 思路&#xff1a; 1、判断注入点 使用Burpsuite抓包 首先加入一个单引号&#xff0c;爆出了数据库语句错误&#xff0c;说明存在注入点&#xff0c;根据提示&#xff0c;这里可能是’&#xff09;闭合错…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

Linux网络部分——DHCP、FTP

目录 一、DHCP动态主机配置协议 1. DHCP工作原理&#xff08;流程&#xff09; 2. 使用DHCP的好处 3.DHCP的分配方式 4.DHCP安装和配置【☆】 二、FTP文件传输协议 1. FTP传输模式 2.FTP安装与配置【☆】 3. FTP设置白名单和黑名单【☆】 一、DHCP动态主机配置协议 DH…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的&#xff1a; 1&#xff09;数据传输&#xff1a;允许用户…

项目经理【人】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 一、共创模式 1.1 共创模式 二、干系人的影响力强度和态度 2.1 干系人影响力 2.2 干系人态度 2.3 干系人管理 三、干系人权力…

自动驾驶融合定位系列教程五:惯性导航误差分析

自动驾驶融合定位系列教程五&#xff1a;惯性导航误差分析 一、概述 在定位领域的几乎所有多传感器融合系统中&#xff0c;都有IMU存在&#xff0c;而且&#xff0c;IMU是定位系统的主线与核心&#xff08;对此可能很多人并不同意&#xff0c;但是我仍然坚定地坚持这一观点&a…

spring中的bean是线程安全的嘛

在Spring框架中&#xff0c;bean默认情况下不是线程安全的。Spring容器在初始化bean时&#xff0c;会为其创建一个单例实例&#xff0c;这个实例在整个应用中是唯一的&#xff0c;并且只会被初始化一次。由于这个特性&#xff0c;bean在默认情况下不是线程安全的。 然而&#…

亚马逊测评工作室如何轻松实现高收益,跨境电商揭秘汇率差赚钱术

随着跨境电商在国内市场的持续繁荣&#xff0c;众多电商卖家纷纷将目光投向了这一充满活力的领域。面对国内市场的激烈竞争&#xff0c;许多卖家选择向外拓展&#xff0c;寻求更广阔的发展空间。其中&#xff0c;亚马逊成为了众多卖家的不二选择&#xff0c;毕竟老外的市场还是…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.3 案例图像识别

目录 电脑如何表示一张图像1.像素2.像素亮度值3.展开像素亮度值 神经网络构建人脸识别1.需求2.整体过程3.隐藏层识别图像4.小结 神经网络构建识别汽车神经网络在计算机视觉应用中的工作原理 电脑如何表示一张图像 1.像素 像素是图像最小单位&#xff0c;用于表示图像中的点或…

Android Ant编译环境配置(Win)

1、 载ant包: 2、设置环境变量&#xff1a; 3、检查是否设置成功及版本 4、执行命令&#xff1a; android update project -p . -n “projectname”&#xff08;例如&#xff1a;android update project --target 1 -p . -n “Couplet”&#xff09;(只输入红色部分也是可以的…

Unity3D DOTween

简单介绍一下 DOTween 插件的使用。 导入插件 先到 Asset Store 获取 DOTween 插件&#xff0c;然后在 Package Manager 的 My Assets 中搜索&#xff0c;下载并导入插件。 导入后&#xff0c;会自动弹出一个窗口&#xff0c;提示需要先对插件进行配置。 点击上图中的按钮&am…

Oracle 23ai 发布,国产数据库们都沉默了

几天前&#xff0c;全球最大的数据库软件公司 Oracle 发布了最新版的 Oracle Database 23ai &#xff0c;集成了最新的 AI Vector Search&#xff08;AI 向量搜索引擎&#xff09;&#xff0c;允许根据概念内容轻松搜索存储在任务关键型数据库中的文档、图像和关系数据&#xf…

Web安全:SQL注入漏洞详解,SQL注入常见功能、危害、分类、判断注入点、注入方式

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

我国碳酸甲乙酯需求量较大 市场集中度有望不断提升

我国碳酸甲乙酯需求量较大 市场集中度有望不断提升 碳酸甲乙酯&#xff08;EMC&#xff09;又称为碳酸乙基甲酯&#xff0c;是一种有机化合物。碳酸甲乙酯分子式为C4H8O3&#xff0c;多表现为一种具有果香味道的无色透明液体。碳酸甲乙酯具有毒性较低、溶解性优良等特点&#x…

书生浦语训练营第2期-第7节笔记

一、为什么要研究大模型的评测&#xff1f; 首先&#xff0c;研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多个通用任务上已经达到或超越了人类水平&#xff0c;但仍然存在质疑&#xff0c;即这些模型的能力是否只是对训练数据的…