
一套适合 SAP UI5 开发人员循序渐进的学习教程

文章平均质量分 93
本套教程是笔者从2013年接触 SAP UI5 至今的实战开发经验的提炼和总结,内容设计由浅入深,每篇文章平均写作时间为4小时,包含理论知识讲解和实际开发例子。每个例子的源代码都由笔者亲自编写,保证能够成功运行。
全套教程计划写作300篇,已经完成176篇。
每位学习者的提问笔者会保证全部回答。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
汪子熙
Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达16年的 SAP 产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign,SAP CRM,SAP Cloud for Customer,SAP S/4HANA,SAP Commerce Cloud(电商云)等标准产品的研发工作。
Jerry 工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发, 对包括 SAP UI5 在内的多款 SAP 自研框架有深入的研究。
展开
-
《一套适合 SAP UI5 开发人员循序渐进的学习教程》读者意见反馈和下一步写作计划表
大家在学习教程过程中,如果有任何关于 SAP UI5 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。原创 2022-10-08 10:34:06 · 1480 阅读 · 0 评论 -
SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员
笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。原创 2021-10-05 21:11:59 · 12348 阅读 · 10 评论 -
使用 Visual Studio Code 搭建 SAP UI5 本地开发环境
工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio.我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤:https://tools.hana.ondemand.com/#sapui5如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。也可以下载 WebIDE 的本地安装包,将其安原创 2021-10-05 10:47:06 · 7990 阅读 · 30 评论 -
176. SAP UI5 预定义的 CSS Margin 类和响应式 Margin 类的用途介绍
本教程第 12 和第 13 篇文章,我们简单介绍了 SAP UI5 里 CSS 类的使用:- SAP UI5 应用开发教程之十二 - 使用 CSS 类对 UI 进行进一步美化- SAP UI5 应用开发教程之十三 - 如何添加自定义 CSS 类这两篇文章只能算是对 SAP UI5 预定义的和 Margin 相关的 CSS 类的一个`入门级`的介绍。既然本教程是 SAP UI5 `由浅入深`的介绍,本文就在前面两篇文章的基础上,给大家更深入地讲解 SAP UI5 预定义的和 Margin 相关的 C原创 2023-08-22 11:07:26 · 90 阅读 · 0 评论 -
问题解答:关于 SAP UI5 学习教程示例代码里 Chrome 开发者工具 Console 面板里一些错误消息的说明
首先说结论:在 SAP UI5 应用的开发阶段,部分出现在浏览器开发者工具 Console 面板里的错误消息,可以忽略。注意两点,第一点是错误消息能够忽略的前提条件是,这些错误消息发生在开发阶段。第二点是,只有部分错误消息可以忽略。那么在开发阶段,哪些错误消息可以忽略,哪些错误消息又必须处理呢?如何判断?判断的方法,要么根据自己经验,要么到网络查询资料,或者咨询笔者。原创 2023-08-15 23:28:22 · 130 阅读 · 0 评论 -
问题解答:关于 SAP UI5 控制器(Controller) JavaScript 编码里单引号和双引号的用法澄清
JavaScript 对象(JavaScript Object)是 JavaScript 语言的基本数据结构。JavaScript 对象是键-值对的集合,键和值之间用冒号分隔,键值对之间用逗号分隔,整个对象被大括号包围。JSON 是一种数据格式,它使用 JavaScript 对象语法,但它不是 JavaScript 对象。JSON 是纯文本格式,用于数据交换,独立于语言,可以被多种编程语言读取。在 JSON 中,所有的键必须用双引号包围,字符串值也必须用双引号包围。原创 2023-08-05 23:15:09 · 408 阅读 · 4 评论 -
[问题]:关于在 SAP UI5 应用里显示 Word 文档的需求实现
有朋友咨询如何在 SAP UI5 应用里显示 Word 文档,本文记录研究这个需求的过程。原创 2023-08-05 17:38:00 · 85 阅读 · 0 评论 -
175. SAP UI5 进度条控件的使用方法介绍
有朋友提问关于 ABAP 和 SAP UI5 进度条显示控件的问题。本文来介绍 SAP UI5 里的进度条控件显示。按照本文介绍的步骤,完成后的效果如下图所示:下面是详细的介绍。我们查看 XML 视图里的 ProgressIndicator 控件,该控件位于命名空间sap.m之下:第 13 行的,意思是进度条从左到右的填充程度即进度值,为 30., 意思是显示在进度条上的文本值为30%showValue 属性控制是否在进度条显示属性维护的文本值。state 属性控制进度条的外观颜色。原创 2023-08-01 12:14:54 · 72 阅读 · 0 评论 -
因为 SAP UI5 版本升级引起的问题又一例 - 如何分析问题根源
当然,一旦以前编写好的 SAP UI5 应用,SAP UI5 的版本升级后忽然不能工作,一般在 Chrome 开发者工具 console 面板都能观察到一些蛛丝马迹,比如错误消息。所以此时此刻,对于这个问题,最好的办法就是暂时降低 SAP UI5 的版本号,选择一个比较稳定的,经过充分测试的低版本,比如。我们在这一行设置断点,刷新应用,等断点停下来之后,在 Chrome 调试器的 Watch 面板里,输入。,即不包含具体的版本号,则默认指向最新的版本号,在本文写作时也就是。原创 2023-07-28 20:55:52 · 102 阅读 · 0 评论 -
174. SAP UI5 的 Unified Shell 发展历史和用法介绍
在 SAP UI5 发展历史上,`sap.ui.unified.Shell` 是另一个比较重要的容器控件。Shell 控件是 SAP UI5 应用里所有控件的根控件(Root control),可以理解成控件树形层级结构里的根节点,只是后来随着 SAP UI5 的演进,Fiori Launchpad 诞生之后,因为该 Shell 控件的部分功能和 Fiori Launchpad 有重叠,所以慢慢退出了历史舞台。原创 2023-07-14 16:07:49 · 73 阅读 · 0 评论 -
6. 什么是 SAP UI5 应用的 UI Area
本文介绍的 `UI Area` 属于 SAP UI5 运行框架的范畴,不需要开发人员在代码中手动创建。之所以专门通过一篇文章来介绍它,是因为随着我们后面学习的层层深入,我们还会接触到更多的框架控件。某些特定的应用,缺乏了相应的框架控件,会无法正常运行。比如将来要学习的 SAP UI5 Shell 控件。本文只是给大家针对框架控件进行一个扫盲式的普及。原创 2023-07-13 15:02:28 · 149 阅读 · 0 评论 -
26. 如何获得 SAP UI5 列表控件选中行项目的 Index 索引
这个问题笔者被反复咨询过,最近在我的知识星球里又一次被朋友问到,所以这里专门写一篇文章来强调。原创 2023-07-01 19:57:57 · 139 阅读 · 0 评论 -
173. SAP UI5 控件 ObjectStatus 的使用方法介绍
ObjectStatus 控件 是 SAP UI5 控件集合中一个极具视觉表现力的控件,用于在应用程序中显示实体(Object)的状态(Status)或属性信息。它可用于向用户提供重要的上下文状态信息,如成功、错误、警告、进行中(In Process)等等。ObjectStatus 控件通常与其他 SAP UI5 控件(如列表项、表格行、信息面板等)一起使用,以提供更丰富的数据展示和状态显示。ObjectStatus 控件的外观通常是一个小方框,其中包含文本和一个可选的图标。原创 2023-06-26 16:45:34 · 85 阅读 · 0 评论 -
SAP UI5 开发的四大开发工具综述
SAP 官方推荐的 SAP UI5 开发工具是本地开发工具 Visual Studio Code,或者是云端的 Business Application Studio.而在 WebIDE 和 Business Application Studio 这两款云端开发工具之间,SAP 也推荐大家使用后者。原创 2023-06-19 17:29:32 · 299 阅读 · 0 评论 -
100. 使用 SAP Fiori Tools 提供的中间件导入本地下载的 SAP UI5 库文件来启动 SAP UI5 应用
我们可以比较一下使用本地 SAP UI5 SDK 库和使用在线的部署在 CDN 上的 SAP UI5 库,运行时在 Chrome 开发者工具 network 标签页里观察到的区别。本文介绍另一种方法,能同样实现运行时加载本地事先下载好的 SAP UI5 SDK 包的需求。本教程绝大多数步骤,使用的都是部署在 CDN 上的在线 SAP UI5 SDK,即。原创 2023-05-09 11:32:20 · 232 阅读 · 0 评论 -
24. 使用 SAP Fiori Tools 自带的代理服务器解决本地运行的 SAP UI5 应用访问远端服务遇到的跨域问题
我们部署在本地开发环境运行的 SAP UI5 应用,由于`浏览器安全策略`的限制,无法直接访问远端 OData 服务,原因是我们的 SAP UI5 应用本地运行在 `localhost` 这个域名上,而远端请求的 OData 服务的域名比如说 `services.odata.org`,二者不是同一个域名,由于浏览器安全策略,浏览器拒绝这种`跨域的` HTTP 访问请求。原创 2023-05-06 17:36:49 · 222 阅读 · 1 评论 -
SAP UI5 开发里命令行 ui5 serve 和 npx fiori run 有什么区别?
有朋友按照笔者这两套 SAP UI5 开发教程,分别进行 SAP UI5 Freestyle 和 Fiori Elements 的开发学习,对于 `ui5 serve` 和 `npx fiori run` 这两个命令行的使用辨析上产生了一些疑问。本文就来详细阐述这两个命令行工具的差异。这两个命令行都是用于在本地运行 SAP UI5 应用程序的命令,但是它们有一些区别。`ui5 serve` 更加轻量级和灵活,适用于 SAP UI5 本地开发环境,而 `npx fiori run` 则更加全面和自动化原创 2023-05-03 18:00:05 · 267 阅读 · 0 评论 -
使用 UI5 Tools 这款 Visual Studio Code 扩展来管理和运行本地 SAP UI5 应用
本文介绍 Visual Studio Code 的 UI5 Tools 扩展是如何帮助 SAP UI5 开发人员管理和启动本地 SAP UI5 应用的详细操作步骤。原创 2023-04-29 22:18:50 · 459 阅读 · 5 评论 -
SAP UI5 XML 视图中数据绑定路径语法的难点和易混淆点的专题讲解
本文作为 SAP UI5 数据绑定的总结篇,将本教程之前第 7,8,17 和 18 四篇文章介绍的绑定语法做一个提炼和总结,对其中容易弄错的知识点再次进行重点讲解。原创 2023-03-30 20:13:30 · 272 阅读 · 0 评论 -
172. SAP UI5 两大表格控件 sap.ui.table.Table 和 sap.m.Table 的使用场景辨析
(1) 如果应用需要显示的数据规模非常大,并且应用主要的访问方式是 PC 端或者 Tablet,而不考虑支持智能手机等设备,那么推荐选择 Grid Table 即 sap.ui.table.Table.(2) 如果希望一套代码能够同时适配桌面环境,Tablet 和智能手机,那么只能选择响应式表格 sap.m.Table.(3) 如果需要在表格每一列的单个单元格里,同时显示一个以上的 SAP UI5 控件,那么只能使用响应式表格。(4) 如果需要在表格每一列的单个单元格里,使用除了 Text Vi原创 2023-03-29 22:06:34 · 274 阅读 · 0 评论 -
171. SAP UI5 响应式表格 sap.m.Table 根据不同宽度的屏幕动态决定显示或隐藏 Column 的实现源代码讲解
本文从源代码实现的层面,介绍了 SAP UI5 响应式表格控件 sap.m.Table,随屏幕宽度的变化,而动态调整其 Column 的显示或隐藏的实现原理,复习了 SAP UI5 通过 Media Query 技术进行屏幕宽度类型检测的实现思路。原创 2023-03-22 11:06:35 · 303 阅读 · 0 评论 -
170. 澄清一些对 SAP UI5 响应式表格 sap.m.Table 的常见理解误区
本教程有个学习者和我讨论关于 `sap.m.Table` 这个控件的响应式特性(responsiveness).所谓响应式设计(Responsive Design),是指一种前端开发领域的设计方法,它的目的是让网站或应用程序,能够自动适应不同的设备尺寸和屏幕分辨率,从而提供更好的用户体验。那么该如何理解 `能够自动适应不同的设备尺寸和屏幕分辨率` 这句话的具体含义?这也是该学习者向我提出,希望我具体阐述的问题。原创 2023-03-21 15:05:47 · 301 阅读 · 0 评论 -
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示
本文介绍了一款 Visual Studio Code 扩展,名叫 `SAPUI5 extension`,能够在本地编辑环境里提供 SAP UI5 API 文档嵌入显示,JavaScript 和 XML 视图的代码自动完成,方法导航,UI5 explorer 等功能,能提高 SAP UI5 开发人员的工作效率,降低学习成本。原创 2023-03-18 10:23:27 · 685 阅读 · 5 评论 -
使用 SAP Business Application Studio 在浏览器环境里开发 SAP UI5 应用
Visual Studio Code 对于静态类型语言比如 TypeScript 提供了良好的编译器语法检查等功能。然而,SAP UI5 基于 JavaScript,由于 JavaScript 这门语言本身的动态类型特征,使得 Visual Studio Code 无法像支持 TypeScript 一样,对 SAP UI5 开发提供语法检查等功能。ABAP 开发人员早习惯了在 SAPGUI 里享受方便的代码自动完成功能(code completion).原创 2023-03-15 22:58:23 · 566 阅读 · 0 评论 -
169. 使用 Chrome 开发者工具分析 SAP UI5 应用的 JavaScript 代码执行性能瓶颈
俗话说,工欲善其事,必先利其器。本文继续给大家分享,笔者在 SAP 成都研究院担任前端开发工程师时,使用 Chrome 开发者工具对 SAP UI5 应用的 JavaScript 执行代码的性能进行分析的具体步骤和使用经验。原创 2023-03-09 21:53:01 · 163 阅读 · 0 评论 -
168. 用 SAP UI5 Select 控件(下拉列表),来驱动表格控件(Table)刷新的一个实战例子
本文以一个典型的 SAP UI5 控件联动的需求为例,介绍了 SAP UI5 控件 A(Select 下拉列表)产生的 change 事件发生后,触发控件 B 即 Table 控件刷新,即显示在 Select 下拉列表选中元素这个上下文内的数据子集。原创 2023-03-02 16:57:38 · 310 阅读 · 1 评论 -
167. 通过一个实际例子,理解 SAP UI5 sap.ui.model.odata.v2.ODataModel API 中 BindingContext 绑定上下文的概念和用法
本步骤通过一个实际的例子,解答了一些 SAP UI5 学习者对于 Binding Context(上下文绑定对象)理解得似是而非的疑问。本教程后续步骤,会继续介绍更多 SAP UI5 sap.ui.model.odata.v2.ODataModel API 的使用方法。原创 2023-03-01 22:29:52 · 203 阅读 · 0 评论 -
166. SAP UI5 OData API 中针对 Edm.DateTime 日期时间类型的操作详解
至此本文完整介绍了 SAP UI5 OData API 的 sap.ui.model.odata.v2.ODataModel 提供的 read 方法,如何去读取类型为 `Edm.DateTime` 的 OData 模型字段的具体明细。本教程后续会介绍更多 SAP UI5 OData API 的详细使用方法。原创 2023-02-28 16:43:50 · 378 阅读 · 0 评论 -
165. SAP UI5 应用如何采取 JavaScript 代码调用 OData API 读取满足过滤条件的业务数据($filter 操作)
本教程的前一篇文章,我们介绍了 SAP UI5 ODataModel API,sap.ui.model.odata.v2.ODataModel 提供的 read 方法,通过调用该方法可以使用 JavaScript 代码去读取远端 OData 服务的数据。本文我们更进一步,学习 read 方法里更多参数的使用方法。原创 2023-02-27 23:44:08 · 387 阅读 · 0 评论 -
164. 通过 sap.ui.model.odata.v2.ODataModel 的 read 方法,读取 OData 数据的编程方式讲解
read 方法第二个输入参数为可选参数,一个 JSON 对象,我们的回调函数通过 success 字段传入,如上图第 11 行代码所示,读取成功后,简单打印出 OData 服务返回的数据,以及当前 HTTP 请求的状态信息,这两个结构分别通过回调函数的两个输入参数。本教程后续步骤,会继续介绍 sap.ui.model.odata.v2.ODataModel 的 read 方法更多可选参数的用法,以此来实现读取时进行排序,过滤,分组,按指定 key 精准读取等高级需求,敬请关注。原创 2023-02-26 22:02:37 · 631 阅读 · 0 评论 -
163. 通过一个实际例子,讲解 SAP UI5 Compatibility Version 的概念和运行时绑定解析器的选择逻辑
本文作为 SAP UI5 开发的进阶篇之一,从教程一位学习者碰到的实际问题出发,给大家介绍了 SAP UI5 根据数据绑定这个功能的 `Compatibility Version` 值的不同,而在运行时动态决定使用简单数据绑定解析器还是复杂数据绑定解析器的判定逻辑。如果大家觉得本文介绍的内容比较晦涩,不妨简单的记住下列两条准则:(1) 对于新开发的 SAP UI5 应用,在 `index.html` 里将 `data-sap-ui-compatVersion` 属性值简单的设置为 `edge` 就可原创 2023-02-26 12:12:26 · 184 阅读 · 0 评论 -
162. 通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法
我们完成了 SAP UI5 控件数据绑定领域里,数据修改从模型到控件之间双向流动的实现原理学习。大家在实际开发过程中遇到这种双向流动不能正常工作的情况时,可以在本文介绍的几个关键函数里设置断点,进行单步调试。也可以在这篇文章评论区留言,大家一起讨论。原创 2023-02-16 23:23:06 · 190 阅读 · 0 评论 -
161. 关于 Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务开发的工作量比值问题
本文通过笔者参与过的 SAP 标准 Fiori 应用 My Opportunities 的实际开发经历,向大家分享了 SAP Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务的开发工作量的评估准则。从文章叙述可以看出:(1) 前端开发的工作量取决于要开发的应用包含的页面个数,每个页面内的静态元素和动态元素的个数。(2) 后台 SEGW 开发的工作量,取决于 DPC_EXT 和 MPC_EXT 这两个类需要实现的方法个数,以及方法内需要调用的其他接口自开发的数量。原创 2023-02-08 17:09:57 · 371 阅读 · 0 评论 -
SAP UI5 应用开发教程之十三番外篇 - SAP UI5 应用的暗黑模式 - Fiori 3 Quartz Dark 主题的使用
本文介绍 SAP UI5 应用如何实现 SAP Fiori 3.0 的 Quartz 主题的暗黑模式。原创 2023-01-25 20:14:08 · 294 阅读 · 0 评论 -
160. 如何根据 SAP Fiori UI 界面上的错误消息,找到后台 ABAP 对应的消息 ID
笔者在长达16年的 SAP 从业生涯中,曾经接到过无数次类型的咨询:> Jerry,我在使用 SAP XXX 产品的 YYY 流程时遇到了错误消息 ZZZ,你遇到过这种情况吗?该如何解决?其实这类问题除了直接求助专家之外,也可以尝试自己通过搜索引擎的方式来查找网络上是否有 SAP 从业者遇到类似的问题。可是通过什么作为搜索关键字呢?一种思路是将 SAP 产品名称 `XXX` 和 流程名称 `YYY`,以及错误消息文本 `ZZZ` 的组合作为关键字。原创 2023-01-18 17:14:35 · 284 阅读 · 0 评论 -
77 番外篇 - SAP UI5 应用 manifest.json 文件里 Routes 数组元素的相对顺序,不可忽视
本文通过教程学习者遇到的一个实际问题,向大家展示了 SAP UI5 应用的 manifest.json 文件里,Routes 数组里路由记录先后顺序的重要性,并给出了 SAP 推荐的路由记录配置的最佳实践。如果大家还对运行时 `employees/overview` 是如何被 `employees/{employeeId}` 所匹配的,可以阅读笔者下面的单步调试源代码分析。原创 2023-01-12 10:04:17 · 188 阅读 · 0 评论 -
159. 使用 SAP UI5 3D Viewer 控件显示 3D 模型效果
这个视图在 Page 这个容器控件内使用了一个 VBox 控件,这里的 V 代表 Vertical,里面的子元素按照从上到下的顺序在垂直方向上进行布局。另外通过本例不难看出,Viewer 控件的使用是比较傻瓜化的,SAP UI5 开发人员只需要准备好 3D 模型文件,然后传入到 Viewer 视图的。我们启动应用,可以看到屏幕下方有两个按钮,左边的按钮可以从本地加载一个 3D 模型文件,一种支持的后缀为。我们可以在屏幕右侧的操作区域里,对这个 3D 圆柱模型进行任意的旋转和缩放,从不同角度观察其明细。原创 2023-01-02 23:06:13 · 297 阅读 · 0 评论 -
158. SAP UI5 FlexBox Layout 布局的概念和具体使用案例介绍
本文简单介绍了什么是 HTML 中的 FlexBox 布局,给大家展示了如何在 Chrome 开发者工具里查看一个 FlexBox 容器的属性和其子元素的布局方式,最后介绍了如何使用 SAP UI5 来自命名空间 `sap.m` 下的 `FlexBox` 控件来实现 FlexBox 布局,通过一个实际例子演示了如何使用 growFactor 属性让 FlexBox 容器内的子元素,按照开发人员规定的比例占据 FlexBox 容器的可用宽度。原创 2023-01-02 20:53:41 · 247 阅读 · 0 评论 -
157. 答读者疑问:为什么我的 manifest.json 文件无法正确被加载?
上面是不可能存在我们应用程序自己编写的 manifest.json 文件的,所以这个错误消息从字面上看是一个跨域错误,实际上问题根源在于,我们自己编写的应用程序存在错误,导致 SAP UI5 框架引导程序从一个错误的地址去加载 manifest.json 文件。时,就把该元素当成一个容纳 Component 的容器。在运行时,我们能观察到这个容器元素内部,多了很多内容,这些内容就是 SAP UI5 应用的 Component.js 所包含的 XML 视图完成渲染后生成的原生 HTML 代码。原创 2022-12-25 12:19:21 · 611 阅读 · 0 评论 -
156. 如何在 SAP UI5 应用里显示 PDF 文件
之后,将这个相对路径绑定到了 JSONModel 的 Source 属性上,后者又绑定到了 PDFViewer 控件的同名属性上,这样就完成了路径指定的任务。SAP 不少标准应用都可以在业务流程进行到某个阶段,根据系统里的业务数据和 SAP 事先开发好的表单模板,生成最终的 PDF 文件并显示在应用页面上。点击 Loading Error 按钮,可以看到 SAP UI5 试图加载一个本地并不存在的 PDF 文件时的表现行为,显示默认的。这里的 Source 需要指定为 PDF 文件所在的。原创 2022-12-24 12:21:51 · 803 阅读 · 0 评论