这是一个使用 Docker 的强大的、本地托管的基于 Web 的 PDF 操作工具。它使您能够对 PDF 文件执行各种操作,包括拆分、合并、转换、重新组织、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序已经发展到包含一套全面的功能,可以满足您的所有 PDF 需求。

斯特林 PDF 不会为了记录保存或跟踪目的而发起任何外拨电话。

所有文件和 PDF 要么专门存在于客户端,要么仅在任务执行期间驻留在服务器内存中,要么临时驻留在仅用于执行任务的文件中。到那时,用户下载的任何文件都将从服务器中删除。

特征

  • 支持暗黑模式。
  • 自定义下载选项
  • 并行文件处理和下载
  • 用于与外部脚本集成的 API
  • 可选的登录和身份验证支持(请参阅此处的文档)
  • 数据库备份和导入(请参阅此处的文档)

PDF 功能

页面操作

  • 查看和修改 PDF – 使用自定义查看排序和搜索查看多页 PDF。此外还有页面编辑功能,如注释、绘制和添加文本和图像。(使用 PDF.js 和 Joxit 和 Liberation.Liberation 字体)
  • 用于合并/分割/旋转/移动 PDF 及其页面的完整交互式 GUI。
  • 将多个 PDF 合并为一个结果文件。
  • 按照指定页码将 PDF 拆分为多个文件或将所有页面提取为单独的文件。
  • 将 PDF 页面重新排列为不同的顺序。
  • 以 90 度为增量旋转 PDF。
  • 刪除頁面。
  • 多页布局(将 PDF 格式化为多页页面)。
  • 按设置的百分比缩放页面内容大小。
  • 调整对比度。
  • 裁剪 PDF。
  • 自动分割 PDF(带有物理扫描的页面分隔符)。
  • 提取页面。
  • 将 PDF 转换为单页。

转换操作

  • 将 PDF 转换为图像,或将 PDF 转换为图像。
  • 将任何常见文件转换为 PDF(使用 LibreOffice)。
  • 将 PDF 转换为 Word/Powerpoint/其他(使用 LibreOffice)。
  • 将 HTML 转换为 PDF。
  • PDF 的 URL。
  • Markdown 转 PDF。

安全和权限

  • 添加和删​​除密码。
  • 更改/设置 PDF 权限。
  • 添加水印。
  • 认证/签署 PDF。
  • 净化 PDF。
  • 自动编辑文本。

其他操作

  • 添加/生成/写入签名。
  • 修复 PDF。
  • 检测并删除空白页。
  • 比较 2 个 PDF 并显示文本中的差异。
  • 将图像添加到 PDF。
  • 压缩 PDF 以减小其文件大小(使用 OCRMyPDF)。
  • 从 PDF 中提取图像。
  • 从扫描中提取图像。
  • 添加页码。
  • 通过检测 PDF 标题文本自动重命名文件。
  • PDF 上的 OCR(使用 OCRMyPDF)。
  • PDF/A 转换(使用 OCRMyPDF)。
  • 编辑元数据。
  • 扁平化 PDF。
  • 获取 PDF 上的所有信息以查看或导出为 JSON。

有关每个任务及其使用的技术的概述,请查看Endpoint-groups.md

该应用程序的演示可在此处获得。

使用的技术

如何使用

本地

请查看https://github.com/Stirling-Tools/Stirling-PDF/blob/main/LocalRunGuide.md

Docker/Podman

https://hub.docker.com/r/frooodle/s-pdf

Stirling PDF 有 3 个不同版本,一个完整版、一个超精简版和一个“Fat”版。根据您使用的功能类型,您可能需要较小的图像以节省空间。要查看不同版本提供的内容,请查看我们的版本映射。 对于不介意空间优化的人,只需使用最新标签即可。 Docker 镜像大小(标签) Docker 镜像大小(标签) Docker 镜像大小(标签)

请注意,在下面的示例中,您可能需要根据需要更改卷路径,当前示例将它们安装到当前工作目录,./extraConfigs:/configs例如/opt/stirlingpdf/extraConfigs:/configs

Docker 运行

docker run -d \
  -p 8080:8080 \
  -v ./trainingData:/usr/share/tessdata \
  -v ./extraConfigs:/configs \
  -v ./logs:/logs \
  -e DOCKER_ENABLE_SECURITY=false \
  -e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \
  -e LANGS=en_GB \
  --name stirling-pdf \
  frooodle/s-pdf:latest

  Can also add these for customisation but are not required

  -v /location/of/customFiles:/customFiles \

Docker 组成

version: '3.3'
services:
  stirling-pdf:
    image: frooodle/s-pdf:latest
    ports:
      - '8080:8080'
    volumes:
      - ./trainingData:/usr/share/tessdata #Required for extra OCR languages
      - ./extraConfigs:/configs
#      - ./customFiles:/customFiles/
#      - ./logs:/logs/
    environment:
      - DOCKER_ENABLE_SECURITY=false
      - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
      - LANGS=en_GB

注意:Podman 与 Docker CLI 兼容,因此只需将“docker”替换为“podman”即可。

启用 OCR/压缩功能

请查看https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToUseOCR.md

支持的语言

Stirling PDF目前支持34!

语言 进步
英语(英语)(en_GB) 100%
英语(美国)(en_US) 100%
阿拉伯语(阿拉伯语)(ar_AR) 45%
德语(Deutsch) (de_DE) 100%
法语(Français)(fr_FR) 94%
西班牙语(Español)(es_ES) 98%
简体中文 (zh_CN) 99%
繁体中文 (zh_TW) 98%
加泰罗尼亚语(Català)(ca_CA) 48%
意大利语(Italiano)(it_IT) 99%
瑞典语(Svenska)(sv_SE) 39%
波兰语(Polski) (pl_PL) 90%
罗马尼亚语 (Română) (ro_RO) 39%
韩语(한국어)(ko_KR) 84%
巴西葡萄牙语 (Português) (pt_BR) 60%
葡萄牙语 (Português) (pt_PT) 78%
俄语 (Русский) (ru_RU) 84%
巴斯克语(Euskara)(eu_ES) 62%
日语(日本語) (ja_JP) 90%
荷兰语(Nederlands)(nl_NL) 96%
希腊语 (Ελληνικά) (el_GR) 82%
土耳其语(Türkçe)(tr_TR) 99%
印度尼西亚(印度尼西亚语)(id_ID) 76%
印地语 (हिंदी) (hi_IN) 77%
匈牙利语(Magyar) (hu_HU) 76%
保加利亚语 (Български) (bg_BG) 94%
塞比亚拉丁字母(Srpski)(sr_LATN_RS) 78%
乌克兰语 (Українська) (uk_UA) 90%
斯洛伐克语(Slovensky) (sk_SK) 92%
捷克语(Česky)(cs_CZ) 90%
克罗地亚语(Hrvatski)(hr_HR) 95%
挪威语(Norsk)(no_NB) 96%
泰语(ไทย)(th_TH) 100%
越南语 (Tiếng Việt) (vi_VN) 99%

贡献(创建问题、翻译、修复错误等)

请参阅我们的贡献指南

定制

Stirling PDF 可轻松定制应用程序。包括以下内容

  • 自定义应用程序名称
  • 自定义标语、图标、HTML、图像 CSS 等(通过文件覆盖)

有两个选项,要么使用生成的设置文件,settings.yml 该文件位于/configs目录中,并遵循标准 YAML 格式

环境变量也受支持,并将覆盖设置文件,例如在 settings.yml 中你有

security:
  enableLogin: 'true'

要通过环境变量来实现这一点你需要SECURITY_ENABLELOGIN

当前设置列表为

security:
  enableLogin: false # set to 'true' to enable login
  csrfDisabled: true # Set to 'true' to disable CSRF protection (not recommended for production)
  loginAttemptCount: 5 # lock user account after 5 tries
  loginResetTimeMinutes: 120 # lock account for 2 hours after x attempts
  loginMethod: all # 'all' (Login Username/Password and OAuth2[must be enabled and configured]), 'normal'(only Login with Username/Password) or 'oauth2'(only Login with OAuth2)
  initialLogin:
    username: '' # Initial username for the first login
    password: '' # Initial password for the first login
  oauth2:
    enabled: false # set to 'true' to enable login (Note: enableLogin must also be 'true' for this to work)
    client:
      keycloak:
        issuer: '' # URL of the Keycloak realm's OpenID Connect Discovery endpoint
        clientId: '' # Client ID for Keycloak OAuth2
        clientSecret: '' # Client Secret for Keycloak OAuth2
        scopes: openid, profile, email # Scopes for Keycloak OAuth2
        useAsUsername: preferred_username # Field to use as the username for Keycloak OAuth2
      google:
        clientId: '' # Client ID for Google OAuth2
        clientSecret: '' # Client Secret for Google OAuth2
        scopes: https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/userinfo.profile # Scopes for Google OAuth2
        useAsUsername: email # Field to use as the username for Google OAuth2
      github:
        clientId: '' # Client ID for GitHub OAuth2
        clientSecret: '' # Client Secret for GitHub OAuth2
        scopes: read:user # Scope for GitHub OAuth2
        useAsUsername: login # Field to use as the username for GitHub OAuth2
    issuer: '' # set to any provider that supports OpenID Connect Discovery (/.well-known/openid-configuration) end-point
    clientId: '' # Client ID from your provider
    clientSecret: '' # Client Secret from your provider
    autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users
    useAsUsername: email # Default is 'email'; custom fields can be used as the username
    scopes: openid, profile, email # Specify the scopes for which the application will request permissions
    provider: google # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak'

system:
  defaultLocale: 'en-US' # Set the default language (e.g. 'de-DE', 'fr-FR', etc)
  googlevisibility: false # 'true' to allow Google visibility (via robots.txt), 'false' to disallow
  enableAlphaFunctionality: false # Set to enable functionality which might need more testing before it fully goes live (This feature might make no changes)
  showUpdate: true # see when a new update is available
  showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true'
  customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template html files

ui:
  appName: '' # Application's visible name
  homeDescription: '' # Short description or tagline shown on homepage.
  appNameNavbar: '' # Name displayed on the navigation bar

endpoints:
  toRemove: [] # List endpoints to disable (e.g. ['img-to-pdf', 'remove-pages'])
  groupsToRemove: [] # List groups to disable (e.g. ['LibreOffice'])

metrics:
  enabled: true # 'true' to enable Info APIs (`/api/*`) endpoints, 'false' to disable

有一个额外的配置文件,/configs/custom_settings.yml熟悉 java 和 spring 应用程序的用户可以在 Stirling-PDF 现有设置之上输入自己的设置

补充说明

  • 端点。目前,端点 ENDPOINTS_TO_REMOVE 和 GROUPS_TO_REMOVE 可以包含要禁用的端点和组的逗号分隔列表,例如 ENDPOINTS_TO_REMOVE=img-to-pdf,remove-pages 将禁用 image-to-pdf 和删除页面,GROUPS_TO_REMOVE=LibreOffice 将禁用所有使用 LibreOffice 的东西。您可以在此处查看所有端点和组的列表
  • customStaticFilePath。通过将文件放置在 /customFiles/static/ 目录中来自定义静态文件(例如应用程序徽标)。自定义应用程序徽标的一个示例是放置 /customFiles/static/favicon.svg 以覆盖当前 SVG。这可用于更改 Stirling-PDF 中的任何图像/图标/css/字体/js 等

仅限环境参数

  • SYSTEM_ROOTURIPATH即设置为/pdf-app将应用程序的根 URI 设置为localhost:8080/pdf-app
  • SYSTEM_CONNECTIONTIMEOUTMINUTES设置自定义连接超时值
  • DOCKER_ENABLE_SECURITY告诉 docker 下载安全 jar(对于身份验证登录,必须为 true)
  • INSTALL_BOOK_AND_ADVANCED_HTML_OPS将 calibre 下载到 stirling-pdf 上,实现 pdf 与书籍之间的相互转换以及高级 html 转换
  • LANGS定义要安装的自定义字体库以用于文档转换

API

对于那些想要使用 Stirling-PDFs 后端 API 链接到他们自己的自定义脚本来编辑 PDF 的人,您可以 在此处查看所有现有的 API 文档,或导航到您的 stirling-pdf 实例的 /swagger-ui/index.html 获取您的版本文档(或者按照 Stirling-PDF 设置中的 API 按钮)

登录认证

先决条件

  • 用户必须在 docker 中拥有 ./configs 卷,以便在更新期间保留它。
  • Docker 用户必须通过设置环境变量DOCKER_ENABLE_SECURITY来下载安全 jar 版本。true
  • 然后通过 settings.yml 文件或通过设置启用SECURITY_ENABLE_LOGIN登录true
  • 现在将生成具有用户名admin和密码的初始用户stirling。登录时,您将被迫将密码更改为新密码。您还可以使用环境变量SECURITY_INITIALLOGIN_USERNAME和 SECURITY_INITIALLOGIN_PASSWORD立即设置自己的环境变量(建议在创建用户后将其删除)。

完成上述操作后,重新启动时,如果一切正常,将显示新的 stirling-pdf-DB.mv.db。

当您登录 Stirling PDF 时,您将被重定向到 /login 页面,以使用这些默认凭据登录。登录后,一切都应正常运行

要访问您的帐户设置,请转到设置齿轮菜单(导航栏右上角)中的帐户设置,您也可以在此帐户设置菜单中找到您的 API 密钥。

要添加新用户,请转到帐户设置底部并点击“管理员设置”,在这里您可以添加新用户。此处提到的不同角色用于限制速率。这是一项正在进行的工作,将来会进一步扩展

对于 API 的使用,您必须提供带有“X-API-Key”的标题以及与该用户关联的 API 密钥。

常问问题

Q1:您计划的功能有哪些?

  • 进度条/跟踪
  • 完全自定义的逻辑管道将多个操作组合在一起。
  • 文件夹支持自动扫描以执行操作
  • 编辑文本(通过用户界面而非自动化方式)
  • 添加表单
  • 多页面布局(将 PDF 页面拼接在一起)支持 x 行 y 列和自定义页面大小
  • 手动或自动填写表格

问题 2:为什么我的应用程序正在下载 .htm 文件?

这是由您的 NGINX 配置通常引起的问题。NGINX 的默认文件上传大小为 1MB,您需要在 Nginx sites-available 文件中添加以下内容。client_max_body_size SIZE;其中“SIZE”为 50M,例如 50MB 的文件。

问题 3:为什么我的下载超时

NGINX 默认有超时值,因此如果你在 NGINX 后面运行 Stirling-PDF,则可能需要设置超时值,例如添加配置proxy_read_timeout 3600;

仓库地址

GitHub:https://github.com/Stirling-Tools/Stirling-PDF

网站免责声明
一、资源来源与版权

本网站所有资源及文章均源自互联网,经过我们的收集整理后呈现给用户。我们明确声明,本网站不直接参与任何资源的创作或制作过程,仅作为信息的传递者。若您发现本网站上的任何内容侵犯了您的合法权益(包括但不限于版权、商标权、专利权等),请立即通过以下联系方式与我们取得联系。在收到您的反馈并核实情况后,我们将迅速采取相应措施,包括但不限于删除侵权内容,以确保您的合法权益得到及时保护。

二、资源使用与责任

资源鉴别:本网站发布的资源可能包含水印、广告链接或其他引流信息,这是由资源原始来源决定的。我们提醒用户在使用这些资源时,应保持警惕,自行鉴别信息的真实性和适用性,避免受到不必要的干扰或误导。 非商业用途:本网站提供的资源仅供学习、研究及非商业性交流使用。我们鼓励用户尊重原创,支持正版。若您计划将本站资源用于商业目的,请务必先获得合法授权,否则因此产生的一切法律后果将由下载用户自行承担。

三、联系方式

为了更好地服务用户,解决您在使用本网站过程中可能遇到的问题或反馈侵权信息,我们提供了以下联系方式(请将“#”替换为“@”后使用): 联系方式:contact#kukaylib.com

四、免责条款

本网站致力于为用户提供高质量的信息服务,但对于因网络状况、第三方干扰、不可抗力等因素导致的服务中断、数据丢失、信息错误等问题,本网站不承担任何责任。同时,本网站对于用户在使用本站资源过程中可能产生的任何直接、间接、偶然、特殊或惩罚性损失,也不承担任何法律责任。 请用户在使用本网站时,务必遵守相关法律法规及道德准则,自行承担因使用本站资源而产生的所有风险和后果。

五、更新与修订

本网站有权随时更新或修订本免责声明,更新或修订后的免责声明一经发布即具有法律效力。用户应定期访问本页面以了解最新的免责声明内容。 感谢您对本网站的理解与支持!我们将继续努力,为用户提供更加优质、便捷的信息服务。