跳至主要內容

Stirling PDF-PDF工具箱

程序员李某某大约 7 分钟

Stirling PDF-PDF工具箱

介绍

版本

Fat:包含所有完整功能以及附加字体和预捆绑的 jar 安全版本

完整:所有功能均已预先配置并可立即使用

Ultra-Lite:仅包含核心功能的最小安装

部署

Docker

docker run -d \
  --name stirling-pdf \
  -p 8080:8080 \
  -v "./StirlingPDF/trainingData:/usr/share/tessdata" \ 
  -v "./StirlingPDF/extraConfigs:/configs" \
  -v "./StirlingPDF/customFiles:/customFiles/" \
  -v "./StirlingPDF/logs:/logs/" \
  -v "./StirlingPDF/pipeline:/pipeline/" \
  -e DISABLE_ADDITIONAL_FEATURES=false \
  -e LANGS=zh_CN \
  -e LEGAL_COOKIEPOLICY= \
  -e SYSTEM_ENABLEANALYTICS=false \
  stirlingtools/stirling-pdf:latest-fat
docker run -d --name stirling-pdf -p 8080:8080 -e DISABLE_ADDITIONAL_FEATURES=false -e LEGAL_COOKIEPOLICY= -e LANGS=zh_CN -e SYSTEM_ENABLEANALYTICS=false stirlingtools/stirling-pdf:latest-fat

docker-compose

version: '3.3'
services:
  stirling-pdf:
    image: stirlingtools/stirling-pdf:latest-fat
    ports:
      - '8080:8080'
    volumes:
      - ./StirlingPDF/trainingData:/usr/share/tessdata # Required for extra OCR languages
      - ./StirlingPDF/extraConfigs:/configs
      - ./StirlingPDF/customFiles:/customFiles/
      - ./StirlingPDF/logs:/logs/
      - ./StirlingPDF/pipeline:/pipeline/
    environment:
      - DISABLE_ADDITIONAL_FEATURES=false
      - LANGS=zh_CN

配置

配置文件

配置文件在 /configs/settings.yml 中。 Springboot配置在/configs/custom_settings.yml,可以配置:日志、服务、SSL docker 可以指定环境变量,如-e "UI_APPNAME=Stirling PDF",(大写,下划线分隔)

security:
  enableLogin: false # 设为 'true' 启用登录功能
  csrfDisabled: false # 设为 'true' 禁用 CSRF 保护(生产环境不建议禁用)
  loginAttemptCount: 5 # 用户账户锁定前允许的尝试次数(使用 Fail2Ban 时可通过设为 -1 禁用此功能)
  loginResetTimeMinutes: 120 # 达到尝试次数后锁定账户的时长(分钟)
  loginMethod: all # 可选值:'all'(全部方式)、'normal'(仅用户名/密码)、'oauth2'(仅OAuth2)、'saml2'(仅SAML2)
  initialLogin:
    username: '' # 首次登录的初始用户名
    password: '' # 首次登录的初始密码
  oauth2:
    enabled: false # 设为 'true' 启用登录(注意:enableLogin 也必须为 'true' 才生效)
    client:
      keycloak:
        issuer: '' # Keycloak 领域的 OpenID Connect Discovery 端点 URL
        clientId: '' # Keyclaok OAuth2 客户端 ID
        clientSecret: '' # Keycloak OAuth2 客户端密钥
        scopes: openid, profile, email # Keycloak OAuth2 的权限范围
        useAsUsername: preferred_username # 用作 Keycloak OAuth2 用户名的字段,可选:[email | name | given_name | family_name | preferred_name]
      google:
        clientId: '' # Google OAuth2 客户端 ID
        clientSecret: '' # Google OAuth2 客户端密钥
        scopes: email, profile # Google OAuth2 权限范围
        useAsUsername: email # 用作 Google OAuth2 用户名的字段,可选:[email | name | given_name | family_name]
      github:
        clientId: '' # GitHub OAuth2 客户端 ID
        clientSecret: '' # GitHub OAuth2 客户端密钥
        scopes: read:user # GitHub OAuth2 权限范围
        useAsUsername: login # 用作 GitHub OAuth2 用户名的字段,可选:[email | login | name]
    issuer: '' # 设置为支持 OpenID Connect Discovery (/.well-known/openid-configuration) 端点的任何提供商
    clientId: '' # 来自提供商的客户端 ID
    clientSecret: '' # 来自提供商的客户端密钥
    autoCreateUser: true # 设为 'true' 允许自动创建不存在用户
    blockRegistration: false # 设为 'true' 拒绝未经管理员注册的 SSO 登录
    useAsUsername: email # 默认为 'email',可使用自定义字段作为用户名
    scopes: openid, profile, email # 指定应用请求的权限范围
    provider: google # 设置为 OAuth 提供商名称,例如 'google' 或 'keycloak'
  saml2:
    enabled: false # 仅对付费企业客户启用(enterpriseEdition.enabled 必须为 true)
    provider: '' # 提供商名称
    autoCreateUser: true # 设为 'true' 允许自动创建不存在用户
    blockRegistration: false # 设为 'true' 拒绝未经管理员注册的 SSO 登录
    registrationId: stirling # 服务提供商 (SP) 应用名称,应与 SSO 和 SLO URL 路径中的名称匹配
    idpMetadataUri: https://dev-XXXXXXXX.okta.com/app/externalKey/sso/saml/metadata # 提供商的元数据 uri
    idpSingleLoginUrl: https://dev-XXXXXXXX.okta.com/app/dev-XXXXXXXX_stirlingpdf_1/externalKey/sso/saml # 发起 SSO 的 URL(由提供商提供)
    idpSingleLogoutUrl: https://dev-XXXXXXXX.okta.com/app/dev-XXXXXXXX_stirlingpdf_1/externalKey/slo/saml # 发起 SLO 的 URL(由提供商提供)
    idpIssuer: '' # 提供商 ID
    idpCert: classpath:okta.cert # 提供商用于认证 SAML 请求的证书(由提供商提供)
    privateKey: classpath:saml-private-key.key # 您的私钥(从密钥对生成)
    spCert: classpath:saml-public-cert.crt # 您的签名证书(从密钥对生成)

premium:
  key: 00000000-0000-0000-0000-000000000000
  enabled: false # 启用专业版/企业版功能的许可密钥检查
  proFeatures:
    SSOAutoLogin: false
    CustomMetadata:
      autoUpdateMetadata: false
      author: username
      creator: Stirling-PDF
      producer: Stirling-PDF
    googleDrive:
      enabled: false
      clientId: ''
      apiKey: ''
      appId: ''

legal:
  termsAndConditions: https://www.stirlingpdf.com/terms-and-conditions # 应用条款和条件的 URL(例如 https://example.com/terms),设置为空字符串禁用或设置为静态文件夹中的本地文件名
  privacyPolicy: https://www.stirlingpdf.com/privacy-policy # 应用隐私政策的 URL(例如 https://example.com/privacy),设置为空字符串禁用或设置为静态文件夹中的本地文件名
  accessibilityStatement: '' # 应用无障碍声明的 URL(例如 https://example.com/accessibility),设置为空字符串禁用或设置为静态文件夹中的本地文件名
  cookiePolicy: '' # 应用 cookie 政策的 URL(例如 https://example.com/cookie),设置为空字符串禁用或设置为静态文件夹中的本地文件名
  impressum: '' # 应用出版声明的 URL(例如 https://example.com/impressum),设置为空字符串禁用或设置为静态文件夹中的本地文件名

system:
  defaultLocale: en-US # 设置默认语言(例如 'de-DE'、'fr-FR' 等)
  googlevisibility: false # 设为 'true' 允许 Google 抓取(通过 robots.txt),'false' 则禁止
  enableAlphaFunctionality: false # 启用可能需要更多测试才能正式发布的功能(此功能可能没有任何改变)
  showUpdate: false # 显示新版本可用通知
  showUpdateOnlyAdmin: false # 仅管理员可看到新版本通知(showUpdate 也必须设为 'true')
  customHTMLFiles: false # 启用后,/customFiles/templates 中的文件将覆盖现有 HTML 模板文件
  tessdataDir: /usr/share/tessdata # 包含 Tessdata 文件的目录路径(该设置与 Windows 系统相关,Windows 用户应调整此路径指向 Tessdata 文件的正确目录)
  enableAnalytics: null # 设为 'true' 启用分析,'false' 禁用;企业用户默认为 true
  enableUrlToPDF: false # 设为 'true' 启用 URL 转 PDF 功能(仅限内部使用,存在已知安全问题,不应对外部使用)
  disableSanitize: false # 设为 true 禁用 HTML 净化(可能导致 HTML 注入)
  datasource:
    enableCustomDatabase: false # 仅限企业用户,设为 'true' 可使用自定义数据库配置
    customDatabaseUrl: '' # 例如 jdbc:postgresql://localhost:5432/postgres,设置自定义数据库连接 URL。如果提供此参数,则 type、hostName、port 和 name 不是必需的且不会被使用
    username: postgres # 设置数据库用户名
    password: postgres # 设置数据库密码
    type: postgresql # 设置的数据库类型(例如 'h2'、'postgresql')
    hostName: localhost # 数据库 URL 的主机名,本地运行时设为 'localhost',在服务器运行时设为数据库容器名称(Docker 配置)
    port: 5432 # 设置数据库端口号,确保与数据库监听端口匹配
    name: postgres # 设置数据库名称,应与创建的数据库名称匹配
  customPaths:
    pipeline:
      watchedFoldersDir: '' # 默认值为 /pipeline/watchedFolders
      finishedFoldersDir: '' # 默认值为 /pipeline/finishedFolders
    operations:
      weasyprint: '' # 默认值为 /opt/venv/bin/weasyprint
      unoconvert: '' # 默认值为 /opt/venv/bin/unoconvert
  fileUploadLimit: '' # 默认为 ""(空字符串表示无限制)。设置一个 0 到 999 之间的数字,后跟以下字符串之一来设置限制:"KB"、"MB"、"GB"

ui:
  appName: '' # 应用的显示名称
  homeDescription: '' # 主页上显示的简短描述或标语
  appNameNavbar: '' # 导航栏中显示的名称
  languages: [] # 如果为空,则启用所有语言。要仅显示德语和波兰语,请设置为 ["de_DE", "pl_PL"]。英式英语始终启用

endpoints:
  toRemove: [] # 要禁用的端点列表(例如 ['img-to-pdf', 'remove-pages'])
  groupsToRemove: [] # 要禁用的组列表(例如 ['LibreOffice'])

metrics:
  enabled: true # 设为 'true' 启用 Info API 端点('/api/*'),'false' 则禁用

processExecutor:
  sessionLimit: # 进程执行器实例限制
    libreOfficeSessionLimit: 1
    pdfToHtmlSessionLimit: 1
    qpdfSessionLimit: 4
    tesseractSessionLimit: 1
    pythonOpenCvSessionLimit: 8
    weasyPrintSessionLimit: 16
    installAppSessionLimit: 1
    calibreSessionLimit: 1
  timeoutMinutes: # 进程执行器超时时间(分钟)
    libreOfficetimeoutMinutes: 30
    pdfToHtmltimeoutMinutes: 20
    pythonOpenCvtimeoutMinutes: 30
    weasyPrinttimeoutMinutes: 30
    installApptimeoutMinutes: 60
    calibretimeoutMinutes: 30
    tesseractTimeoutMinutes: 30

ocr

Stirling-PDF 使用 Tesseract 进行文本识别

Tesseract OCR 支持多种语言。您可以在 Tesseract GitHub 仓库中找到其他语言包:

  • tessdata_fast:这些语言包更小,加载速度更快,但识别准确率可能较低。
  • tessdata:这些语言包更大,提供更好的识别精度,但可能需要更长时间才能加载。 根据您的需求,您可以根据用例选择合适的语言包。Stirling-PDF 默认使用tessdata_fast英语,但您可以替换。

安装语言包

  • .traineddata通过选择您需要的语言的文件来下载所需的语言包。

  • 将.traineddata文件放在 Tesseract tessdata 目录中:(/usr/share/tessdata或等效目录)

  • 请勿删除现有的eng.traineddata,这是必需的。

docker

-v /location/of/trainingData:/usr/share/tessdata

UI定制

官网open in new window

API

访问 /swagger-ui/index.html您的 Stirling-PDF 实例上的本地 Swagger UI 或者在线Swagger 文档open in new window

使用情况监控

所有用户均可使用以下 API 端点来监控使用情况统计信息。这些端点提供非持久性使用情况数据,可按需查询。

端点描述
GET /api/v1/info/status应用程序状态和版本信息
GET /api/v1/info/requests特定端点的 POST 请求总数(可选查询参数endpoint:)
GET /api/v1/info/requests/unique特定端点的 POST 请求的唯一用户数
GET /api/v1/info/requests/all所有端点的 POST 请求计数
GET /api/v1/info/requests/all/unique所有端点的 POST 请求的唯一用户数
GET /api/v1/info/load特定端点的 GET 请求总数(可选查询参数endpoint:)
GET /api/v1/info/load/unique特定端点的 GET 请求的唯一用户数
GET /api/v1/info/load/all所有端点的 GET 请求计数
GET /api/v1/info/load/all/unique所有端点的 GET 请求的唯一用户数
上次编辑于:
贡献者: 李元昊