# 包目录结构说明

# 包结构介绍

10.0 版本之前,Foxit PDF SDK for Web 提供了如下的三种包:

  • 无字体标准包: FoxitPDFSDKForWeb_9_XXX_NoFonts.zip (不包含字体资源的标准包)
  • 标准包: FoxitPDFSDKForWeb_9_XXX.zip (包含字体的标准包)
  • 完整包: FoxitPDFSDKForWeb_9_XXX_Full.zip (包含字体, 相对标准包增加了一些高级功能,比如:文档比较、高级编辑功能和动态XFA)

如果您已有字体资源或者只需使用在线字体,那么您可以选择无字体标准包。如果您不需要对字体库进行任何修改以及不介意包的大小,那么可以选择标准包。 如果您需要一些高级功能,比如文档比、高级编辑功能或者动态XFA,那么完整包是最合适的选择。

10.0 版本开始,Foxit PDF SDK for Web 只提供完整包,根据License加载单独授权的功能,并添加了3D功能。

  • 完整包: FoxitPDFSDKForWeb_10_XXX.zip

Package包含如下的文件夹和文件:

文件夹/文件 描述
docs 包含API手册和Foxit PDF SDK for Web的开发手册。
注意:HTML版本的开发者指南是使用VuePress构建的,不支持双击直接打开。需要启动HTTP服务器并通过Web浏览器访问。此外,其包括一些可运行的示例,需要启用WebPDFJRWorker.js,以便在支持HTTP服务器的环境中正确运行。
examples 一系列 demo 和示例,用来说明如何充分使用 Foxit PDF SDK for Web 功能。
external 字体资源。
lib Foxit PDF SDK for Web 核心库。
server Web viewer 中使用的一系列基于服务器的应用程序所需的 http-server 和 Node.js 脚本。
legal.txt 法律和版权信息。
package.json 项目描述文件。

lib 文件夹包括如下的文件:

文件夹/文件 描述
jr-engine 前端渲染引擎。
locales 支持的国际化语言。不同语言的资源文件按标签放置在不同的目录下。
PDFViewCtrl PDFViewCtrl 库附加的 plugin。
stamps Stamp 资源文件,图片文件和模板。
assets 包含文档比较功能需要用到的模板资源文件,当前仅在完整包中包含此目录。
uix-addons UIExtension 库附加的 plugin。
PDFViewCtrl.css PDFViewCtrl viewer UI 样式的 CSS 文件。
PDFViewCtrl.full.js PDFViewCtrl viewer 库的完整脚本文件。
PDFViewCtrl.js 无第三方库的 PDFViewCtrl viewer 库的脚本文件。
PDFViewCtrl.polyfills.js PDFViewCtrl 所依赖的 polyfill 脚本文件,用于兼容不同的浏览器。
PDFViewCtrl.vendor.js PDFViewCtrl 所使用的第三方库 (列表见后文)。
preload-jr-worker.js 用于并行加载 JS 引擎资源以提升 viewer 加载速度的 worker 脚本文件。
UIExtension.css UI 样式默认的 CSS 文件。
UIExtension.dark-variable.css 用于暗黑主题的样式文件。
UIExtension.vw.css 使用 vmin unit 的 CSS 文件。
UIExtension.full.js UIExtension viewer 库的完整脚本文件。
UIExtension.js 无第三方库的 UIExtension viewer 库的脚本文件。
UIExtension.polyfills.js UIExtension 所依赖的 polyfill 脚本文件,用于兼容不同的浏览器。
UIExtension.vendor.js UIExtension 所使用的第三方库 (列表见后文)。
WebPDFJRWorker.js Web Worker 中运行的脚本,用来调用前端渲染引擎。
WebPDFSRWorker.js Web Worker 中运行的脚本,用来调用服务器端渲染引擎。
*.d.ts "d.ts"文件用于为TypeScript 提供有关用JavaScript 编写的API 的类型信息,目的在于让 IDE 能够识别它并提供代码提示,以及在编译时执行静态类型检查。在提供便利的同时也保证了接口调用的准确性。

# 静态库与动态库

在 10.0 版本之前,Foxit PDF SDK for Web 使用的底层库是静态库。 从 10.0 版本开始,Foxit PDF SDK for Web 使用的底层库是动态库。

# 动态库模块划分

从 10.0 版本开始,动态库模块被划分为主模块和侧模块。

主模块:

  • gsdk.wasm

侧模块: (按需加载)

  • compare.wasm
  • pageeditor.wasm
  • touchup.wasm
  • xfa.wasm
  • 3d.wasm
  • lr.wasm
  • Pageformat.wasm
  • docprocess.wasm
模块名 功能 依赖
gsdk.wasm 提供基础功能和Redact功能。 pageformat.wasm
lr.wasm
docprocess.wasm
optimizer.wasm
compare.wasm Overlay Compare功能依赖该模块。 lr.wasm
pageeditor.wasm Paragraph-based editor (高级编辑器) 依赖该模块。 lr.wasm
touchup.wasm 高级编辑器的 EditText 和 AddText 功能依赖该模块。 lr.wasm
xfa.wasm 动态XFA表单功能依赖该模块。 lr.wasm
3d.wasm PDF 3D功能依赖该模块。
optimizer.wasm 数字图章功能依赖该模块。
lr.wasm Layout Recognition engine (布局识别引擎) 模块为高级功能提供基础支持。当触发依赖的相关模块时,它将被加载。
Pageformat.wasm Header&Footer 和 Watermark 功能依赖该模块。
docprocess.wasm 表单识别功能依赖该模块。

# Package.json

Foxit PDF SDK for Web 提供了一个 package.json 文件,用来帮助开发人员快速部署和使用 Web PDF,以及更轻松地将 Web PDF 集成到他们的项目中。package.json 文件内容如下:

{
    "name": "@foxitsoftware/foxit-pdf-sdk-for-web-library",
    "version": "10.0.0",
    "description": "Foxit pdf sdk for web.",
    "author": "Foxit Software Inc.",
    "main": "./lib/UIExtension.full.js",
    "types": "./lib/UIExtension.full.d.ts",
    "typings": "./lib/UIExtension.full.d.ts",
    "scripts": {
        "start": "concurrently --kill-others \"npm run start-http-server\" \"npm run start-snapshot-server\"",
        "start-snapshot-server": "node ./server/snapshot/src/index -p 3002",
        "start-http-server": "node ./server/index"
    },
    "license": "Commercial",
    "devDependencies": {
        "boxen": "^4.1.0",
        "chalk": "^2.4.1",
        "concurrently": "^8.2.2",
        "http-proxy-middleware": "^3.0.0",
        "koa": "^2.7.0",
        "koa-body": "^4.0.4",
        "koa-body-parser": "^1.1.2",
        "koa-cors": "0.0.16",
        "koa-router": "^7.4.0",
        "koa-serve-list": "^1.0.1",
        "koa-static": "^5.0.0",
        "koa2-connect": "^1.0.2",
        "lru-cache": "^4.1.3",
        "raw-body": "^2.3.3",
        "require-dir": "^1.0.0",
        "serve-handler": "^6.0.2",
        "sockjs": "^0.3.21",
        "ws": "^7.3.1"
    },
    "dependencies": {
        "@csstools/normalize.css": "^10.1.0",
        "@types/hammerjs": "^2.0.36",
        "@types/jquery": "^3.3.29",
        "bootstrap-datepicker": "^1.9.0",
        "core-js": "3.35.1",
        "dayjs": "^1.11.1",
        "dayjs-plugin-utc": "^0.1.2",
        "dialog-polyfill": "^0.4.10",
        "dom4": "^2.1.4",
        "es6-promise": "^4.2.5",
        "eventemitter3": "^3.1.0",
        "fast-printf": "^1.6.9",
        "flatpickr": "4.6.9",
        "hammerjs": "^2.0.8",
        "human-format": "^0.11.0",
        "i18next": "^23.8.1",
        "i18next-chained-backend": "^4.6.2",
        "i18next-localstorage-backend": "^4.2.0",
        "i18next-xhr-backend": "^3.2.2",
        "jquery": "^3.4.1",
        "jquery-contextmenu": "^2.7.1",
        "jszip": "^3.7.1",
        "lodash": "^4.17.21",
        "papaparse": "^5.4.1",
        "print-area": "^0.1.4",
        "punycode": "^2.1.1",
        "sortablejs": "~1.9.0",
        "whatwg-fetch": "^3.0.0"
    },
    "resolutions": {
        "jquery": "^3.4.1",
        "core-js": "3.35.1",
        "qs": ">=6.0.4"
    },
    "overrides": {
        "jquery": "^3.4.1",
        "core-js": "3.35.1",
        "qs": ">=6.0.4"
    },
    "serve": {
        "port": 8080,
        "public": "/",
        "proxy": {
            "target": "http://127.0.0.1:3002",
            "changeOrigin": true
        }
    },
    "files": [
        "lib",
        "server",
        "legal.txt",
        "locales_changelog.txt",
        "MigrationNode.txt",
        "ReleaseNote.txt"
    ]
}

# Foxit PDF SDK for Web 使用的第三方库

Foxit PDF SDK for Web 提供了两种版本的 JS 文件:包含第三方库的完整版本的 JS 文件和不包含第三方库的常规的 JS 文件。如果您的工程已经使用了 SDK 中包含的第三方库,那么您不需要再安装该库。

PDFViewCtrl.full.js 脚本包含:

  • PDFViewCtrl.full.js: PDFViewCtrl viewer 库的完整脚本文件。
  • PDFViewCtrl.polyfills.js: PDFViewCtrl 所依赖的 polyfill 脚本文件,用于兼容不同的浏览器。
  • PDFViewCtrl.vendor.js: PDFViewCtrl所使用的第三方库 (列表见后文)。
  • PDFViewCtrl.js: 无第三方库的 PDFViewCtrl viewer 库的脚本文件。

因此,PDFViewCtrl.polyfills.js + PDFViewCtrl.vendor.js + PDFViewCtrl.js = PDFViewCtrl.full.js.

以下两种形式是等效的:

<script src="../FoxitPDFSDKForWeb/lib/PDFViewCtrl.full.js"></script>

<script src="../FoxitPDFSDKForWeb/lib/ PDFViewCtrl.polyfills.js"></script>
<script src="../FoxitPDFSDKForWeb/lib/PDFViewCtrl.vendor.js"></script>
<script src="../FoxitPDFSDKForWeb/lib/PDFViewCtrl.js"></script>

PDFViewCtrl.vendor.js 包含的第三方库如下所示:

jquery
i18next
i18next-chained-backend
i18next-localstorage-backend 
i18next-xhr-backend
jquery-contextmenu
dialog-polyfill
hammerjs
eventemitter3 

UIExtension.full.js脚本包含:

  • UIExtension.full.js: UIExtension viewer 库的完整脚本文件。
  • UIExtension.polyfills.js: UIExtension 所依赖的 polyfill 脚本文件,用于兼容不同的浏览器。
  • UIExtension.vendor.js: UIExtension 所使用的第三方库 (列表见后文)。
  • UIExtension.js: 无第三方库的 UIExtension viewer 库的脚本文件。

因此, UIExtension.polyfills.js + UIExtension.vendor.js + UIExtension.js = UIExtension.full.js.

以下两种形式是等效的:

<script src="../FoxitPDFSDKForWeb/lib/UIExtension.full.js"></script>

<script src="../FoxitPDFSDKForWeb/lib/UIExtension.polyfills.js"></script>
<script src="../FoxitPDFSDKForWeb/lib/UIExtension.vendor.js"></script>
<script src="../FoxitPDFSDKForWeb/lib/UIExtension.js"></script>

UIExtension.vendor.js 包含的第三方库如下所示:

jquery
i18next
i18next-chained-backend
i18next-localstorage-backend
i18next-xhr-backend
dialog-polyfill
hammerjs
eventemitter3
file-saver