当前位置: 首页 > news >正文

GrapeCity Documents for PDF (GcPdf) 6.2 Crack

GrapeCity PDF 文档 (GcPdf)

改进了对由 GcPdf 以外的软件生成的现有 PDF 文档的处理

在新的 v6.2 版本中,GcPdf 增强了 PDF 文档的加载和保存,并提供以下优势:

  1. GcPdf 现在可以加载和保存可能不严格符合 PDF 规范的 PDF 文档。
  2. GcPdf 现在将保留 PDF 文档中嵌入的不属于 PDF 规范一部分的任何自定义数据。
  3. 加载 PDF 文档的平均速度已得到提高。

由于 GcPdf 处理加载 PDF 的方式发生了变化,一些较低级别的 GcPdf API 必须进行更改,如果使用这些 API,可能需要对代码进行少量更改;受影响的 API 的完整列表。

无需指定密码即可使用受密码保护的文件

GcPdf 现在允许使用受密码保护的文件而无需指定密码。加载受密码保护的文件后,您现在可以执行以下操作而无需指定密码:

  • 不基于 PDF 字符串对象的读/写属性,例如:
    • 您可以获取/设置 CheckBoxField 或 RadioButtonField 的值
    • 获取某个文档的统计信息,例如获取页数、注释等
    • 获取或更改文档元数据,因为元数据通常未加密
    • 更改某些类型字段的值:CheckBoxField、RadioButtonField;TextBoxField 和 CombTextField 的值可以更改,但有一些限制
  • 如果可以在不使用 PDF 字符串的情况下定义新对象,则可以添加新对象;例如,您可以将 SquareAnnotation 添加到页面或所有页面

引入了一个新的DecryptionOptions类来表示解密选项。加载加密的 PDF 时,您可以将其作为(可选)参数传递给 GcPdfDocument.Load() 方法。特别是,您可以将DecryptionOptions.ThrowExceptionIfInvalidPassword标志设置为 false(默认情况下为 true),以允许加载受密码保护的 PDF,而无需指定其密码。另一个相关标志是DecryptionOptions.ThrowExceptionIfUnsupportedSecurityOptions。默认情况下也是如此。将其设置为 false 将使 GcPdf 能够加载具有未知或损坏的安全处理程序的文档。

以下代码在不指定密码的情况下向受密码保护的 PDF 添加注释:

using var fs = File.OpenRead("financial-report.pdf");
var doc = new GcPdfDocument();

doc.Load(fs, new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false, ThrowExceptionIfUnsupportedSecurityOptions = false });
// Get the size of the first page:
var page = doc.Pages[0];
var pageSize = page.Size;
// Add a square annotation:
SquareAnnotation sa = new SquareAnnotation();
sa.Page = page;
sa.Rect = new RectangleF(10, 10, pageSize.Width - 20, pageSize.Height - 20);
sa.Color = Color.Red;
doc.Save("AnnotationAdded.pdf");

财务报告原件

修改财务报告

用于处理低级 PDF 原语的新 API(GrapeCity.Documents.Pdf.Spec 和 GrapeCity.Documents.Pdf.Wrappers 命名空间)

在此版本中,GcPdf 引入了一个新的 API,允许熟悉 PDF 规范的开发人员直接访问原始 PDF 对象,这些对象是任何 PDF 文档的构建块。这些包括:

  • PDF 数组,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfArray、PdfArrayObject、IPdfArray、IPdfArrayExt 和 GrapeCity.Documents.Pdf.Wrappers.PdfArrayWrapper。
  • PDF bool,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfBool、PdfBoolObject、IPdfBool 和 IPdfBoolExt。
  • PDF 词典,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfDict、PdfDictObject、IPdfDict、IPdfDictExt 和 GrapeCity.Documents.Pdf.Wrappers.PdfDictWrapper。
  • PDF 名称,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfName、PdfNameObject、IPdfName 和 IPdfNameExt。
  • PDF null,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfNull、PdfNullObject、IPdfNull 和 IPdfNullExt。
  • PDF 编号,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfNumber、PdfNumberObject、IPdfNumber 和 IPdfNumberExt。
  • PDF 参考,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfRef、PdfRefObject、IPdfRef 和 IPdfRefExt。
  • PDF 流,请参阅 GrapeCity.Documents.Pdf.Spec.PdfStreamObjectBase。
  • PDF 字符串,请参阅 GrapeCity.Documents.Pdf.Spec 类型 PdfString、PdfStringObject、IPdfString 和 IPdfStringExt。

例如,这些新的 API 可用于访问有时由 PDF 制作者添加但未在 PDF 规范中描述的自定义属性。例如,DocumentInfo 对象是 PDF 字典。PDF 规范列出了该字典中可以出现的属性(创建者、作者等)。尽管如此,在许多现实生活中的 PDF 文件中,DocumentInfo 字典包含 PDF 规范中不存在的“SourceModified”属性。GrapeCity.Documents.Pdf.Spec 命名空间中的类型现在允许开发人员访问/编辑此类自定义项目。

有关 GrapeCity.Documents.Pdf.Spec 和 GrapeCity.Documents.Pdf.Wrappers 命名空间的更多信息,请参阅 GcPdf 参考。

示例:获取图像属性

使用上面的新 API,现在可以使用从流中检索的图像来处理由图像扫描仪创建的许多 PDF(其中大多数每页仅包含一个 JPEG 或 G4 TIFF 图像)。GcPdf 包含新的PdfImageInfo类,它是新的PdfDictWrapper对象的后代。该类包含许多允许获取底层 PDF 流对象的属性/数据的方法。此添加将检索流图像并直接解压缩或处理图像。

您可以检索以下图像属性:

  • 直接检索每个页面上每个图像的流(使用 GetImages() 检索)
  • 检索上述图像流的压缩格式(Filter)
  • 检索上述图像流的黑白信息(Decode或BlackIs1)
  • 检索可以识别上述图像流颜色的信息(ColorSpace 或 BitsPerComponent)
  • 检索流和每个掩码(ImageMask)的信息
  • 和更多

以下代码从 PDF 流中检索图像属性:

using (FileStream fs = new FileStream(@"..\..\..\06-1.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{GcPdfDocument doc = new GcPdfDocument();doc.Load(fs);GcPdfDocument doc = new GcPdfDocument();doc.Load(fs);var imgs = doc.GetImages();// Get the info about the first image in the PDF// (we know there is one image, so no index checks for example's simplicity sake):PdfImage pi = (PdfImage) imgs[0].Image; // NOTE: no cast here, PdfImageBase is the type of the Image property.Console.WriteLine($"PdfImage object ID: {pi.ObjID}");// The PdfImage is a descendant of PdfDictWrapper object it has a lot of methods// which allow to get properties/data of underlying PDF stream objectusing (PdfStreamInfo psi = pi.GetPdfStreamInfo()){Console.WriteLine($"    Image stream length: {psi.Stream.Length}");Console.WriteLine($"        ImageFilterName: {psi.ImageFilterName}");Console.WriteLine($"ImageFilterDecodeParams: {psi.ImageFilterDecodeParams}");// dump content of ImageFilterDecodeParamsforeach (var kvp in psi.ImageFilterDecodeParams.Dict){Console.WriteLine($"{kvp.Key}: {kvp.Value}");}// example how to get value of BlackIs1:var blackIs1 = psi.ImageFilterDecodeParams.GetBool(PdfName.Std.BlackIs1, null);Console.WriteLine($"BlackIs1: {blackIs1}");}// dump properties of PdfImage dictionaryConsole.WriteLine();Console.WriteLine("Properties of PdfImage dictionary:");foreach (KeyValuePair<PdfName, IPdfObject> kvp in pi.PdfDict.Dict){Console.WriteLine($"{kvp.Key}: {kvp.Value}");} var cs = pi.Get<IPdfObject>(PdfName.Std.ColorSpace);Console.WriteLine($"ColorSpace: {cs.GetType().Name} {cs}");var bpc = pi.Get<IPdfObject>(PdfName.Std.BitsPerComponent);Console.WriteLine($"BitsPerComponent: {bpc?.GetType().Name} {bpc}");
}
复制

输出显示检索到的所有图像属性。

图像属性

在文本字段中设置格式

GcPdf 现在允许用户使用添加到 TextField、CombTextField、ComboBoxField 类的新直接方法SetPercentFormat、SetNumberFormat、SetDateFormat、SetTimeFormat、SetSpecialFormat 方法以直观的方式指定 TextField 的日期、时间、数字格式和特殊格式。新方法将支持设置类似于 Acrobat 中的 TextField 属性的属性。

添加了新的枚举SpecialFormatCurrencySymbolStyleNumberNegativeStyleNumberSeparatorStyle 。这些在上述方法中用作参数。

以下代码使用新方法和参数设置 TextField 上的数值:

GcPdfDocument doc = new GcPdfDocument();
var p = doc.NewPage();
var g = p.Graphics;TextField result = new TextField();
result.Widget.Page = p;
result.Widget.Rect = new System.Drawing.RectangleF(100,100,100,100);
result.Widget.Border.Width = 1;result.SetNumberFormat(2, Field.NumberSeparatorStyle.Dot, Field.NumberNegativeStyle.ShowParentheses, "\u20ac", Field.CurrencySymbolStyle.BeforeNoSpace);result.Value = "12345.67f";
result.SetNumberValue(12345.67f, 2, Field.NumberSeparatorStyle.Dot, Field.NumberNegativeStyle.None, "$", Field.CurrencySymbolStyle.BeforeNoSpace);p.Doc.AcroForm.Fields.Add(result);doc.Save("NumberTextField.pdf");

GrapeCity 文档 PDF 查看器 (GcPdfViewer)

文档列表面板增强功能

GcPdfViewer 现在支持使用自定义 HTML 标记增强文档列表面板。GcPdfViewer 在DocumentListItem类型中提供namepathtitlePreviewContent属性,允许用户指定自定义 HTML 标记来表示文档列表。以下是属性的简要说明:

  • 名称 - 显示文档列表项的名称
  • 路径 - PDF 文档的绝对或相对 URL
  • 标题 - 项目工具提示
  • PreviewContent - 文档列表中用作预览内容的 HTML 内容

现有的客户端属性和方法 - documentListUrl选项以及addDocumentListPanel 和loadDocumentList 方法已得到增强,可以接受DocumentListItem作为参数来指定文档列表项的预定义列表。

以下代码将属性设置为文档列表面板中的第一个图块“Finance”:

const options = { workerSrc: "/documents-api-pdfviewer/demos/product-bundles/build/gcpdfviewer.worker.js",supportApi: {apiUrl: window.top.SUPPORTAPI_URL,token: window.top.SUPPORTAPI_TOKEN,webSocketUrl: false},restoreViewStateOnLoad: false};const baseAssetsPath = "/documents-api-pdfviewer/demos/product-bundles/assets/";options.documentListUrl = [ { path: baseAssetsPath + "pdf/documents-list/financial-report.pdf",title: "Finance",previewContent: renderPreviewCard("Finance", "View Financial, budget reports and collaborate over them.", baseAssetsPath + "images/preview/svg/Finance.svg")},
];
复制

文件列表面板

键盘快捷键

GcPdfViewer 支持多种键盘快捷键,可以提高在查看器中处理 PDF 文档的效率。GcPdfViewer 还支持重新定义、禁用、覆盖和删除默认键盘快捷键,以及将默认键盘快捷键绑定到其他键,并使用 ViewerOptions 类的快捷方式选项通过 API 创建自定义键盘快捷键。 

GcPdfViewer 还支持重新定义、禁用、覆盖和删除默认键盘快捷键,以及将默认键盘快捷键绑定到其他键,并使用 ViewerOptions 类的快捷键选项通过 API 创建自定义键盘快捷键。 

以下代码有助于将holdToPan 操作绑定到“P”键:

// Bind the "P" shortcut to the holdToPan action and leave the Ctrl+P shortcut for the "print" action.
viewer.options.shortcuts["P"] = [{ ctrl: true, tool: "print" }, { tool: "holdToPan" }];

相关文章:

GrapeCity Documents for PDF (GcPdf) 6.2 Crack

GrapeCity PDF 文档 (GcPdf) 改进了对由 GcPdf 以外的软件生成的现有 PDF 文档的处理 在新的 v6.2 版本中&#xff0c;GcPdf 增强了 PDF 文档的加载和保存&#xff0c;并提供以下优势&#xff1a; GcPdf 现在可以加载和保存可能不严格符合 PDF 规范的 PDF 文档。GcPdf 现在将…...

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据) 1.模型原理1.1 模型原理1.2 数学模型2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 随机森林(Random Forest)是一种集成学习方法,通过组合多个决策树来构建强大的分类或回归…...

问AI一个严肃的问题

chatgpt的问世再一次掀起了AI的浪潮&#xff0c;其实我一直在想&#xff0c;AI和人类的关系未来会怎样发展&#xff0c;我们未来会怎样和AI相处&#xff0c;AI真的会完全取代人类吗&#xff0c;带着这个问题&#xff0c;我问了下chatgpt&#xff0c;看一看它是怎么看待这个问题…...

Flowable流程的挂起与激活详解

1. 挂起与激活的定义及区别 在Flowable流程中&#xff0c;挂起是指将流程实例暂停&#xff0c;它将停止执行当前步骤并暂时中断流程的执行。相反&#xff0c;激活是指恢复被挂起的流程实例的执行&#xff0c;使其能够继续执行后续步骤。 区别在于挂起流程实例后&#xff0c;流…...

探索前端动画之CSS魔法

引言 在现代网页设计中&#xff0c;动画已经成为了吸引用户注意力、提升用户体验的重要手段之一。而在前端开发中&#xff0c;CSS动画是一种常见且强大的实现方式。本篇博客将带你深入探索前端动画中的CSS魔法&#xff0c;通过清晰的思路和完整的示例代码&#xff0c;帮助你掌…...

Oracle数据库登录遇到密码临期问题

在oracle数据库中&#xff0c;如果设置了密码的有效期&#xff0c;则会出现密码临期提醒的问题&#xff0c;默认的密码有效期是180天&#xff0c;默认的密码提醒时间是15天&#xff08;此处缺乏官方文档支撑&#xff09;&#xff0c;在密码临近过期时&#xff0c;如果登录 Orac…...

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形&#xff0c;可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…...

Ubuntu下mysql安装及远程连接支持配置

1.安装 下载mysql-server&#xff08;必须加sudo&#xff09; sudo apt update sudo apt install mysql-server 查看mysql的状态 sudo service mysql status 通过如下命令开启mysql sudo service mysql start 2.配置 第一次安装mysql后&#xff0c;为root设置一个密码 …...

自然语言处理: 第八章chatGPT的搭建

理论基础 Transformer 大模型家族可以分成三类, 至于三者的区别可以参考上一章: Encoder-only,Decoder-only, 只需要Pre_trainEncoder-decoder , 可以在一些任务上无需进行fine_tune 必须要在下游任务进行微调比如Bert &#xff0c; Bart 。 T5 这种无需要微调就能完成一些任…...

阿里云国际版云服务器防火墙怎么设置呢?

入侵防御页面为您实时展示云防火墙拦截流量的源IP、目的IP、阻断应用、阻断来源和阻断事件详情等信息。本文介绍了入侵防御页面展示的信息和相关操作&#xff0c;下面和012一起来了解阿里云国际版云服务器防火墙设置&#xff1a; 前提条件 您需要先在防护配置页面&#xff0c;开…...

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…...

【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 模型原理: 朴素贝叶斯分类是基于贝叶斯定理的一种分类方法。它假设特征之间相互独立(朴素性),从而简化计算过…...

学习Vue:创建和使用组件

组件化开发是现代前端开发的一种重要方法&#xff0c;它可以将复杂的应用程序拆分成多个独立、可复用的组件。在Vue.js中&#xff0c;创建和使用组件非常简单&#xff0c;让我们一起来了解如何通过Vue.js实现组件化开发。 创建组件 在Vue.js中&#xff0c;您可以通过Vue.compo…...

【MongoDB基础】

目录 一、概述 1.概念 2.相关 2.1 实例 2.2 库 2.3 集合 2.4 文档 2.5 主键 3.特性 4&#xff0c;应用场景 二、安装 1.RPM安装 2.启动数据库 三、目录结构 1.rpm -ql mongodb-org-server 2.rpm -ql mongodb-org-shell 3.rpm -ql mongodb-org-tools 四、默…...

NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践

NLP文本匹配任务Text Matching [有监督训练]&#xff1a;PointWise&#xff08;单塔&#xff09;、DSSM&#xff08;双塔&#xff09;、Sentence BERT&#xff08;双塔&#xff09;项目实践 0 背景介绍以及相关概念 本项目对3种常用的文本匹配的方法进行实现&#xff1a;Poin…...

2023牛客第八场补题报告A H J K

2023牛客第八场补题报告A H J K A-Alive Fossils_2023牛客暑期多校训练营8 (nowcoder.com) 思路 统计字符串&#xff0c;取出现次数为t的。 代码 #include <bits/stdc.h> #define int long long #define endl \n #define IOS ios::sync_with_stdio(0), cin.tie(0), …...

KubeSphere 部署 Zookeeper 实战教程

前言 知识点 定级&#xff1a;入门级如何利用 AI 助手辅助运维工作单节点 Zookeeper 安装部署集群模式 Zookeeper 安装部署开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9…...

麦肯锡重磅发布2023年15项技术趋势,生成式AI首次入选,选对了就是风口

两位朋友在不同群里分享了同一份深度报告。 一位是LH美女&#xff0c;她在“AIGC时代”群里上传了这份文档&#xff0c;响应寥寥&#xff0c;可能是因为这些报告没有像八卦文那样容易带来冲击。 你看韩彬的这篇《金融妲己&#xff1a;基金公司女销售的瓜&#xff0c;一个比一个…...

【软件工程质量】代码质量管理平台Sonar

分析代码质量的工具有挺多的&#xff0c;比如&#xff1a;Alibaba Java Coding Guidelines plugin、QAPlug、SonarQube 等&#xff0c;平时用的比较多的事Alibaba Java Coding Guidelines plugin和sonarlint。 SonarQube 是一个用于管理源码质量的平台&#xff0c;帮助开发者…...

【EI/SCOPUS检索】第三届计算机视觉、应用与算法国际学术会议(CVAA 2023)

第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023) The 3rd International Conference on Computer Vision, Application and Algorithm 2023年第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023&#xff09;主要围绕计算机视觉、计算机应用、计…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...