如何使用 PrizmDoc 中的文档预转换功能
我们最近发布的 PrizmDoc v11.0 版本新增了一个文档预转换功能的开发者预览版。在本文中,我们将首先简要概述 PrizmDoc,然后介绍如何开始使用预转换功能。
我们最近发布的 PrizmDoc v11.0 版本新增了一个文档预转换功能的开发者预览版。这是一个令人兴奋的新增功能,因为我们的许多客户处理数千甚至数百万份大型文档,无法承受浪费哪怕一秒钟的时间来等待文件处理。
预转换功能允许在请求查看文档和图像之前就进行转换。例如,您可以指定某些文件进行转换和渲染。渲染后的查看包将存储在缓存中。当请求查看文档时,PrizmDoc 会检查文档是否已转换,如果是,则从缓存中调用该文档的查看包到查看器中。这将大大提高性能,因为文档和图像在请求之前就已经转换完毕并准备就绪。
尽管该功能仍处于后期开发阶段,并计划在即将发布的版本中投入生产使用,但您可以下载并使用当前的开发者预览版来测试和评估其功能。首先,我们将简要概述 PrizmDoc,然后介绍如何开始使用预转换功能。
了解 PrizmDoc
PrizmDoc 是一个强大、可扩展的 API 和 JavaScript 套件,它使用 HTML5 标准技术,在零占用空间的查看客户端中以数十种格式转换、查看、搜索、注释和修订文档。 PrizmDoc 的核心概念非常简单:您的 Web 应用程序将文档传递给一个 HTTP 服务,该服务将其转换为 SVG 并返回给浏览器。只要浏览器支持 SVG(现在所有现代浏览器都支持),就可以查看文档,而无需在浏览设备上安装任何软件。这种模式在 PC、平板电脑甚至智能手机上都运行良好。每台设备都可以查看所有标准文档类型,而无需下载或安装任何额外的软件。
PrizmDoc 应用程序服务
PrizmDoc 应用程序服务 (PAS) 可通过我们四种 Web 级示例(C#、MVC、Java、PHP)中的任何一种“即装即用”地进行安装。
在应用程序服务中预转换文档
在查看大型文档时,用户可能会在查看文档的后续页面时遇到延迟。预转换 API 允许用户在创建查看会话之前避免完全转换文档的任何延迟。用户可以选择预转换所有大于特定文件大小的文档或经常查看的文档,从而提供更量身定制的查看体验。
如何通过预转换文档创建查看包
可以通过使用预转换 API 来进行预转换。文档通过以下步骤进行预转换:
步骤 1
发出一个 POST 请求,请求正文中包含 JSON 格式的“source”对象。source.type 属性可以是“document”、“url”或“upload”。在此示例中,“document”用作 source.type
属性。
POST https://:3000/v2/viewingPackageCreators
viewingPackageCreator POST 正文
Content-Type: application/json { "input": { "source": { "type": "document", "fileName": "sample.doc", "documentId": "unT67Fxekm8lk1p0kPnyg8", . . . }, "viewingPackageLifetime": 2592000 } }
对上述 POST 请求的成功响应会在响应正文中提供“processId
”。
200 OK Content-Type: application/json { "input": { "source": { "type": "document", "fileName": "sample.doc", "documentId": "unT67Fxekm8lk1p0kPnyg8", . . . }, "viewingPackageLifetime": 2592000 }, "expirationDateTime": "2015-12-09T06:22:18.624Z", "processId": "khjyrfKLj2g6gv8fdqg710", "state": "processing", "percentComplete": 0 }
第二步
使用在步骤 1 中获得的“processId
”,查询预转换进程的状态。
GET https://:3000/v2/viewingPackageCreators/khjyrfKLj2g6gv8fdqg710
成功的响应正文包含 JSON 格式的“state
”和“percentComplete
”属性。“state”值指示它是“complete”还是“processing”,“percentComplete
”属性指示完成的百分比。
通过使用上述 URL 发出 GET 命令开始轮询状态。建议在最初的几次请求之间使用较短的时间间隔。如果仍未完成,则文档可能很大,需要更多处理时间。在这种情况下,需要增加请求之间的时间间隔,以避免大量状态请求可能导致网络拥塞。在 100% 完成时,响应正文将包含一个 output 对象,其中包含“packageExpirationDateTime
”属性。
200 OK Content-Type: application/json { "input": { "source": { "type": "document", "fileName": "sample.doc", "documentId": "unT67Fxekm8lk1p0kPnyg8", . . . }, "viewingPackageLifetime": 2592000 }, "output": { "packageExpirationDateTime": "2016-1-09T06:22:18.624Z" }, "expirationDateTime": "2015-12-09T06:22:18.624Z", "processId": "khjyrfKLj2g6gv8fdqg710", "state": "complete", "percentComplete": 100 }
如何获取有关已转换查看包的信息
当状态为 100% 完成时,可以通过发出以下请求来获取有关已转换包的详细信息。
GET https://:3000/v2/viewingPackages/unT67Fxekm8lk1p0kPnyg8
响应正文
200 OK Content-Type: application/json { "input": { "source": { "type": "document", "fileName": "sample.doc", "documentId": "unT67Fxekm8lk1p0kPnyg8", . . . }, "viewingPackageLifetime": 2592000 }, "state": "complete", "packageExperationDateTime": "2016-1-09T06:22:18.624Z" }
如何删除先前转换的包
可以通过发出 DELETE 请求来删除先前转换的包。
DELETE https://:3000/v2/viewingPackages/unT67Fxekm8lk1p0kPnyg8
此请求将该包标记为异步删除。成功响应如下所示。
204 (No Content)
查看包
PrizmDoc 应用程序服务 11.0 引入了查看包功能。查看包是 PrizmDoc 查看器在显示文档时将使用的文档的缓存版本。从查看包中查看文档将大大减轻 PrizmDoc 服务器的负载,并允许您每分钟服务比以往更多的用户。
存储
查看包存储在文件系统和配置的数据库中。如果使用多个 PAS 实例,则必须使用共享数据库和 NAS(网络附加存储)。在多台服务器上运行 PrizmDoc 应用程序服务主题提供了有关在多服务器模式下配置 PAS 的更多信息。
默认情况下,存储配置如下:
配置密钥 | 存储提供商 | 描述 |
viewingPackagesData | 数据库 | 有关查看包的数据。这是可以从 GET /v2/viewingPackages 中检索到的数据。 |
viewingPackagesProcesses | 数据库 | 有关查看包创建进程的数据。这是可以从 GET /v2/viewingPackageCreators 中检索到的数据。 |
viewingSessionsData | 数据库 | 有关查看会话的数据。创建查看会话时,会在此表中添加一个条目。 |
viewingSessionsProcessesMetadata | 数据库 | 有关查看会话进程的数据。这目前用于内容转换和标记刻录进程。 |
viewingPackagesArtifactsMetadata | 数据库 | 查看包构件的元数据。这用于查找包的特定构件,并包含构件类型、文件系统中的文件名以及其他重要信息。 |
viewingPackagesArtifacts | 文件系统 | 查看包的构件。这些包括每页的 SVG 和栅格内容、源文档以及查看客户端可能请求的其他构件。 |
配置
查看包是选择加入的,需要特殊配置才能正常工作。至少,您的配置应包括以下内容:
# Feature toggles feature.packages: "enabled" # Database configuration database.adapter: "sqlserver" database.host: "localhost" database.port: 1433 database.user: "pasuser" database.password: "password" database.database: "PAS" # Default timeout for the duration of a viewing session defaults.viewingSessionTimeout: "20m" viewingPackagesData.storage: "database" viewingPackagesProcesses.storage: "database" viewingSessionsData.storage: "database" viewingSessionsProcessesMetadata.storage: "database" viewingPackagesArtifactsMetadata.storage: "database" viewingPackagesArtifacts.storage: "filesystem" viewingPackagesArtifacts.path: "/usr/share/prizm/Samples/viewingPackages"
预转换
通过预转换创建查看包,可以在最适合您的应用程序的时间生成包。它允许您利用停机时间进行预转换,从而在高峰时段减少负载。预转换会执行创建查看包的所有工作,以便在请求时完成。它启动一个进程,开始下载内容并允许您轮询进度。
建议维护一个预转换队列,以免使服务器过载,并缩短周转时间。我们建议每个 PrizmDoc 应用程序服务和 PrizmDoc 服务器实例最多同时进行五个预转换进程。这将允许快速创建包,同时保持可持续的负载。
按需缓存
通过按需缓存创建查看包是一个无缝的过程,通过查看会话 API。按需缓存允许您在后台触发查看包创建过程,并在创建完成后使用生成的查看包。此功能旨在允许使用 PrizmDoc 服务器即时查看,同时缓存一个包以供后续查看相同文档时使用。
例如,考虑这个查看会话的请求:
POST /ViewingSession { "source": { "documentId": "PdfDemoSample-a1b0x19n2", "type": "document", "fileName": "PdfDemoSample.pdf" } }
无论匹配的查看包的状态如何,此请求始终会返回一个 viewingSessionId
。如果当前不存在具有给定 documentId
的查看包,PrizmDoc 服务器将在后台进程创建查看包的同时处理文档查看。后台进程完成后,PrizmDoc 应用程序服务将处理所有进一步的查看会话,直到查看包过期(默认 24 小时)。
结论
鉴于文档管理日益数字化,PrizmDoc 中的预转换服务是我们已经强大的功能套件的激动人心的新增功能。预转换、渲染和将文档存储在缓存中将提供更无缝的体验,使用户能够立即调用和查看文档和图像。我们相信它将改变游戏规则,使我们的许多客户能够显著简化其流程。