Angular 与 PDF之五 实现方式的选择与扩展

 在纯web的前提下(不考虑移动端native),PDF的功能基本包括:

  • 客户端PDF:最简单的场景,实现方式也很多,基本不需要有什么顾虑的地方,简单的实现可以参考系列第一篇文章。
  • 客户端PDF预览:需要考虑html模板、css样式在正常页面与预览页面的共用问题,一样的东西写两套,那么维护起来工作量也会更大,更容易产生顾此失彼的问题,导致bug。可以参考系列第二篇文章。
  • 服务端PDF:优点在于数据量大的时候不需要考虑网络传输的问题,也可以屏蔽掉系统不同带来的PDF渲染差异问题。同理,需要考虑是不是需要支持预览,html模板,css样式、数据源逻辑与绑定,需要考虑在正常页面、预览页面和服务端渲染页面之间共享。可以参考系列第三、第四篇文章。
  • 定时PDF任务:这个需求由于比较小众,在前面的系列文章没有提及,它和服务端生成PDF其实没有本质区别,唯一需要考虑的就是权限问题。当用户从客户端发起PDF生成任务时,发送到服务端生成PDF,这时是带有当前登录用户的用户信息的。但是,当这个任务是定时任务时,是没有用户信息的。需要一个特殊的定时任务用户来负责生成PDF文件。

当然,需求是不断变化的,当PDF的需求从简单变复杂的这个过程,也是一个很好的代码重构和反思的过程,家家有本难念的经,在代码实现也是同理。希望这个系列可以帮助大家更好的设计功能,少走弯路。

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

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

相关文章

华为战略方法论:BLM模型之差距分析(限制版)

目录 说明 差距类型 1、业绩差距 2、机会差距 3、对标差距 专栏列表 个人简介 说明 今天就来谈谈 BLM 模型中的第一把钥匙,也就是差距分析。 从本质上来看。 BLM 模型中的差距与你在日常生活中听到或用到的差距在意义都是一样的。 不同之处就在于问题的复…

网络安全(黑客)自学

建议一:黑客七个等级 黑客,对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域,越深入越敬畏,知识如海洋,黑客也存在一些等级,参考知道创宇 CEO ic(世界顶级黑客团队 0x557 成员&…

java Collection集合使用笔记

1、Collection集合概述 它是单例集合的最顶层接口,它表示一组对象,这些对象也称之为Collection的元素JDK不提供此接口任何直接实现,但提供更具体的子接口(如:List和Set)实现创建Collection集合对象的方法&…

Ant Design Vue 走马灯实现单页多张图片轮播

最近的项目有个需求是,这种单页多图一次滚动一张图片的轮播效果,项目组件库是antd、vue3 然而用了antd的走马灯是这样子的 我们可以看到官网给的api是没有这种功能,百度上也多是在css上动刀,那样也就毕竟繁琐了,我们是…

测试Hyperledger Fabric环境

首先进入fabric-samples目录中的first-networked 子目录 cd fabric-samples/first-network 在first-network目录下有一个自动化脚本byfn.sh,可以使用-help参数查看相应的可 用命令,在命令提示符中输入如下命令: ./byfn.sh --help命令执行成功后&#…

力扣 106. 从中序与后序遍历序列构造二叉树

题目来源:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/ C题解:中序遍历是左中右,后序遍历是左右中,所以拿到两个遍历数组,我们可以从后序遍历获取中间节点…

西安石油大学期末考试C++真题解析

1、一、类型、返回值类型 二、参数表、函数重载 2、一、实例化 二、实例化的类型或类类是对象的蓝图,对象是类的实例化 3、const 4、一个 两个 5、一、公有继承 二、私有继承、保护继承 6、抽象类、实例化对象 7、函数模板、类模板 8、try、catch、throw 9、…

SpringBoot初始化接口CommandLineRunner

CommandLineRunner的使用 接口定义使用执行顺序使用 Order 注解实现Orderd接口排序总结 接口定义 Spring官方给出的接口定义 package org.springframework.boot;FunctionalInterface public interface CommandLineRunner {void run(String... args) throws Exception; }在 Sp…

Facebook如何与品牌合作,提升用户体验?

Facebook是全球最大的社交媒体平台之一,每天有数亿用户在上面发布内容、互动交流。对于品牌来说,与Facebook合作可以帮助它们扩大影响力、吸引更多潜在客户。 但是,与Facebook合作不仅仅是在平台上发布广告,还需要更深入的合作来…

如何在 Spring Boot 中使用反向代理

如何在 Spring Boot 中使用反向代理 介绍 在分布式系统中,反向代理是一项非常重要的技术。通过反向代理,可以将客户端的请求转发到后端的多台服务器上,实现负载均衡和故障转移等功能。本文将介绍如何在 Spring Boot 应用中使用反向代理。 环…

Flink DataStream之创建执行环境

新建project&#xff1a; pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ma…

iMazing 2.16官方下载使用起来安全吗?

鉴于苹果设备的封闭性与安全性&#xff0c;我们大部分情况下都需要搭配iTunes进行设备的管理。但作为一款全方位的iOS设备管理软件&#xff0c;iMazing竟然可以突破iTunes的限制&#xff0c;与设备直接连接&#xff0c;进行备份、管理等操作。 因此&#xff0c;很多人都会有疑…

OpenStack(T版)——块存储(Cinder)服务介绍与安装

文章目录 OpenStack(T版)——块存储(Cinder)服务介绍与安装安装和配置(controller)准备(1)创建数据库(2)加载admin user的环境变量(3)创建Identity服务凭据(4)创建Cinder 块存储服务组件的API endpoint 安装和配置Cinder块存储服务组件(1)安装软件包(2)编辑/etc/cinder/cinder.…

【Java可执行命令】(三)API文档生成工具javadoc: 深入解析Java API文档生成工具javadoc ~

Java可执行命令详解之javadoc 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-d < directory>3.1.2 可选参数&#xff1a;-sourcepath < pathlist>3.1.3 可选参数&#xff1a;-classpath < pathlist>3.1.4 可选参数&#xff1…

工业RFID在自动化控制中的解决方案

在工业自动化控制领域中&#xff0c;利用RFID技术可以对物品、设备和工具的进行追踪&#xff0c;可以有效提高生产效率和管理水平。下面我们就一起来了解一下&#xff0c;RFID在工业自动化控制中的解决方案是什么样的。 工业RFID在自动化控制中的解决方案 在工业生产过程中&a…

使用 Jetpack Compose 构建 LinearProgressIndicator

欢迎阅读这篇关于如何使用 Jetpack Compose 构建 LinearProgressIndicator&#xff08;线性进度指示器&#xff09;的博客。Jetpack Compose 是 Google 推出的一款现代化 UI 工具包&#xff0c;用于构建 Android 界面。其声明式的设计使得 UI 开发更加简洁、直观。 什么是 Line…

AQS之Semaphore详解

AQS之Semaphore详解 一、Semaphore类的继承关系1. AbstractQueuedSynchronizer:提供了一个同步器的框架。2. Sync&#xff1a;Semaphore的内部类&#xff0c;提供了锁的具体实现。3. FairSync&#xff1a;Sync的子类&#xff0c;实现公平锁。4. NonfairSync:Sync的子类&#xf…

ARHUD驾车导航技术概览

ARHUD(Augmented Reality Head Up Display)&#xff0c;即增强现实与抬头显示的结合&#xff0c;是一种将渲染元素投影在真实世界的技术&#xff0c;也是目前用户理解成本最低的展示方式。 HUD功能第一次应用是在二战中&#xff0c;被应用在枪械和战斗机上&#xff0c;80年代初…

React hooks文档笔记(三) 状态

状态 一、如何设计组件状态的步骤二、状态构造原则1. 组相关状态2. 避免矛盾/互斥状态3. 避免多余状态4. 不要把props放进state&#xff0c;除非你特别想要阻止更新 三、状态保存/重置1. 相同位置的相同组件保留状态2. 同一位置不同元素reset状态 一、如何设计组件状态的步骤 …

组装电脑U盘重装Win10系统教程图解

当您需要对组装电脑进行重新安装Win10操作系统时&#xff0c;使用U盘是一种方便而有效的方法&#xff0c;U盘重装系统不仅可以帮助您解决各种系统问题&#xff0c;还能提供一个干净、稳定的系统环境。无论您是初学者还是有一定经验的用户&#xff0c;本教程将提供清晰的组装电脑…