Stirling-PDF
这是一个强大的、基于本地托管的Web PDF处理工具,使用Docker部署。它允许您对PDF文件进行各种操作,包括拆分、合并、转换、重新组织、添加图像、旋转、压缩等。这个本地托管的Web应用程序已经发展成为一套全面的功能集,满足您所有的PDF需求。
Stirling PDF不会发起任何外部调用用于记录或跟踪目的。
所有文件和PDF要么仅存在于客户端,要么仅在任务执行期间存在于服务器内存中,或者仅为执行任务而暂时存在于文件中。用户下载的任何文件在此时都已从服务器上删除。
功能
PDF 功能
页面操作
- 查看和修改PDF - 使用自定义查看排序和搜索功能查看多页PDF。还有页面编辑功能,如注释、绘图以及添加文本和图像。(使用PDF.js,结合Joxit和Liberation字体)
- 用于合并/拆分/旋转/移动PDF及其页面的完整交互式图形界面。
- 将多个PDF合并成一个结果文件。
- 在指定页码处将PDF拆分成多个文件,或将所有页面提取为单独的文件。
- 重新组织PDF页面顺序。
- 以90度为增量旋转PDF。
- 删除页面。
- 多页面布局(将PDF格式化为多页面页面)。
- 按设定百分比缩放页面内容大小。
- 调整对比度。
- 裁剪PDF。
- 自动拆分PDF(使用物理扫描的页面分隔符)。
- 提取页面。
- 将PDF转换为单页。
转换操作
- 将PDF与图像互相转换。
- 将任何常见文件转换为PDF(使用LibreOffice)。
- 将PDF转换为Word/Powerpoint/其他格式(使用LibreOffice)。
- 将HTML转换为PDF。
- 将URL转换为PDF。
- 将Markdown转换为PDF。
安全性和权限
- 添加和删除密码。
- 更改/设置PDF权限。
- 添加水印。
- 认证/签名PDF。
- 清理PDF。
- 自动编辑文本。
其他操作
- 添加/生成/书写签名。
- 修复PDF。
- 检测并删除空白页。
- 比较两个PDF并显示文本差异。
- 向PDF添加图像。
- 压缩PDF以减小文件大小(使用OCRMyPDF)。
- 从PDF中提取图像。
- 从扫描文件中提取图像。
- 添加页码。
- 通过检测PDF标题文本自动重命名文件。
- 对PDF进行OCR(使用OCRMyPDF)。
- PDF/A转换(使用OCRMyPDF)。
- 编辑元数据。
- 拼合PDF。
- 获取PDF的所有信息以查看或导出为JSON。
有关任务和每个任务使用的技术的概述,请查看Endpoint-groups.md
应用程序的演示版可在此处获得。
使用的技术
- Spring Boot + Thymeleaf
- PDFBox
- LibreOffice用于高级转换
- OcrMyPdf
- HTML、CSS、JavaScript
- Docker
- PDF.js
- PDF-LIB.js
使用方法
本地运行
请查看 https://github.com/Stirling-Tools/Stirling-PDF/blob/main/LocalRunGuide.md
Docker / Podman
https://hub.docker.com/r/frooodle/s-pdf
Stirling PDF有3个不同的版本,一个完整版、一个超轻量版以及一个"胖"版。根据您使用的功能类型,您可能需要一个较小的镜像以节省空间。 要了解不同版本提供的功能,请查看我们的版本映射 对于不介意空间优化的人,只需使用最新标签即可。
请注意,在以下示例中,您可能需要根据需要更改卷路径,当前示例将它们安装到当前工作目录
例如 ./extraConfigs:/configs
改为 /opt/stirlingpdf/extraConfigs:/configs
Docker Run
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
也可以添加以下内容进行自定义,但不是必需的
-v /location/of/customFiles:/customFiles \
Docker Compose
version: '3.3'
services:
stirling-pdf:
image: frooodle/s-pdf:latest
ports:
- '8080:8080'
volumes:
- ./trainingData:/usr/share/tessdata #额外OCR语言所需
- ./extraConfigs:/configs
# - ./customFiles:/customFiles/
# - ./logs:/logs/
environment:
- DOCKER_ENABLE_SECURITY=false
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
- LANGS=en_GB
注意:Podman在命令行界面上与Docker兼容,因此只需将"docker"替换为"podman"即可。
启用OCR/压缩功能
请查看 https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToUseOCR.md
支持的语言
Stirling PDF 目前支持 38 种语言!
语言 | 进度 |
---|---|
阿拉伯语 (العربية) (ar_AR) | |
巴斯克语 (Euskara) (eu_ES) | |
保加利亚语 (Български) (bg_BG) | |
加泰罗尼亚语 (Català) (ca_CA) | |
克罗地亚语 (Hrvatski) (hr_HR) | |
捷克语 (Česky) (cs_CZ) | |
丹麦语 (Dansk) (da_DK) | |
荷兰语 (Nederlands) (nl_NL) | |
英语 (English) (en_GB) | |
美式英语 (en_US) | |
法语 (Français) (fr_FR) | |
德语 (Deutsch) (de_DE) | |
希腊语 (Ελληνικά) (el_GR) | |
印地语 (हिंदी) (hi_IN) | |
匈牙利语 (Magyar) (hu_HU) | |
印度尼西亚语 (Bahasa Indonesia) (id_ID) | |
爱尔兰语 (Gaeilge) (ga_IE) | |
意大利语 (Italiano) (it_IT) | |
日语 (日本語) (ja_JP) | |
韩语 (한국어) (ko_KR) | |
挪威语 (Norsk) (no_NB) | |
波兰语 (Polski) (pl_PL) | |
葡萄牙语 (Português) (pt_PT) | |
巴西葡萄牙语 (Português) (pt_BR) | |
罗马尼亚语 (Română) (ro_RO) | |
俄语 (Русский) (ru_RU) | |
塞尔维亚语拉丁字母 (Srpski) (sr_LATN_RS) | |
简体中文 (zh_CN) | |
斯洛伐克语 (Slovensky) (sk_SK) | |
西班牙语 (Español) (es_ES) | |
瑞典语 (Svenska) (sv_SE) | |
泰语 (ไทย) (th_TH) | |
繁体中文 (zh_TW) | |
土耳其语 (Türkçe) (tr_TR) | |
乌克兰语 (Українська) (uk_UA) | |
越南语 (Tiếng Việt) (vi_VN) |
贡献(创建问题、翻译、修复错误等)
请参阅我们的贡献指南!
自定义
Stirling PDF 允许轻松自定义应用程序。 包括以下内容:
- 自定义应用程序名称
- 自定义口号、图标、HTML、图像、CSS 等(通过文件覆盖)
有两种选择,一种是使用生成的设置文件 settings.yml
该文件位于 /configs
目录中,遵循标准的 YAML 格式
环境变量也受支持,并会覆盖设置文件 例如,在 settings.yml 中,你有
security:
enableLogin: 'true'
要通过环境变量设置这个,你需要使用 SECURITY_ENABLELOGIN
当前设置列表如下:
security:
enableLogin: false # 设置为 'true' 以启用登录
csrfDisabled: true # 设置为 'true' 以禁用 CSRF 保护(不建议在生产环境中使用)
loginAttemptCount: 5 # 5 次尝试后锁定用户账户
loginResetTimeMinutes: 120 # x 次尝试后锁定账户 2 小时
loginMethod: all # 'all'(用户名/密码登录和 OAuth2[必须启用和配置]),'normal'(仅用户名/密码登录)或 'oauth2'(仅 OAuth2 登录)
initialLogin:
username: '' # 首次登录的初始用户名
password: '' # 首次登录的初始密码
oauth2:
enabled: false # 设置为 'true' 以启用登录(注意:enableLogin 也必须为 'true' 才能生效)
client:
keycloak:
issuer: '' # Keycloak 领域的 OpenID Connect Discovery 端点 URL
clientId: '' # Keycloak OAuth2 的客户端 ID
clientSecret: '' # Keycloak OAuth2 的客户端密钥
scopes: openid, profile, email # Keycloak OAuth2 的作用域
useAsUsername: preferred_username # Keycloak OAuth2 用作用户名的字段
google:
clientId: '' # Google OAuth2 的客户端 ID
clientSecret: '' # Google OAuth2 的客户端密钥
scopes: https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/userinfo.profile # Google OAuth2 的作用域
useAsUsername: email # Google OAuth2 用作用户名的字段
github:
clientId: '' # GitHub OAuth2 的客户端 ID
clientSecret: '' # GitHub OAuth2 的客户端密钥
scopes: read:user # GitHub OAuth2 的作用域
useAsUsername: login # GitHub OAuth2 用作用户名的字段
issuer: '' # 设置为支持 OpenID Connect Discovery (/.well-known/openid-configuration) 端点的任何提供商
clientId: '' # 来自你的提供商的客户端 ID
clientSecret: '' # 来自你的提供商的客户端密钥
autoCreateUser: false # 设置为 'true' 以允许自动创建不存在的用户
blockRegistration: false # 设置为 'true' 以拒绝未经管理员事先注册的 SSO 登录
useAsUsername: email # 默认为 'email';可以使用自定义字段作为用户名
scopes: openid, profile, email # 指定应用程序将请求权限的作用域
provider: google # 将此设置为你的 OAuth 提供商的名称,例如 'google' 或 'keycloak'
system: defaultLocale: 'en-US' # 设置默认语言(例如 'de-DE'、'fr-FR' 等) googlevisibility: false # 'true' 允许 Google 可见(通过 robots.txt),'false' 禁止 enableAlphaFunctionality: false # 设置为启用可能需要更多测试才能完全上线的功能(此功能可能不会产生任何变化) showUpdate: true # 查看是否有新更新可用 showUpdateOnlyAdmin: false # 只有管理员可以看到新更新是否可用,取决于 showUpdate 必须设置为 'true' customHTMLFiles: false # 启用后,放置在 /customFiles/templates 中的文件将覆盖现有的模板 HTML 文件
ui: appName: '' # 应用程序的可见名称 homeDescription: '' # 首页显示的简短描述或标语 appNameNavbar: '' # 导航栏上显示的名称
endpoints: toRemove: [] # 要禁用的端点列表(例如 ['img-to-pdf', 'remove-pages']) groupsToRemove: [] # 要禁用的组列表(例如 ['LibreOffice'])
metrics:
enabled: true # 'true' 启用 Info API(/api/*
)端点,'false' 禁用
有一个额外的配置文件 ``/configs/custom_settings.yml``,熟悉 Java 和 Spring application.properties 的用户可以在其中输入他们自己的设置,以补充 Stirling-PDF 现有的设置。
### 额外说明
- 端点。目前,ENDPOINTS_TO_REMOVE 和 GROUPS_TO_REMOVE 可以包含用逗号分隔的端点和组列表以禁用,例如 ENDPOINTS_TO_REMOVE=img-to-pdf,remove-pages 将禁用 image-to-pdf 和 remove pages,GROUPS_TO_REMOVE=LibreOffice 将禁用所有使用 LibreOffice 的功能。你可以在[这里](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/Endpoint-groups.md)查看所有端点和组的列表。
- 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`` 在 Stirling-PDF 上下载 Calibre,启用 PDF 与书籍之间的转换以及高级 HTML 转换
- ``LANGS`` 定义要安装的自定义字体库,用于文档转换
## API
对于那些想使用 Stirling-PDF 后端 API 来链接自己的自定义脚本编辑 PDF 的人,你可以在[这里](https://app.swaggerhub.com/apis-docs/Stirling-Tools/Stirling-PDF/)查看所有现有的 API 文档,或者导航到你的 Stirling-PDF 实例的 /swagger-ui/index.html 查看你的版本的文档(或者通过在 Stirling-PDF 的设置中点击 API 按钮)
## 登录认证
![stirling-login](https://yellow-cdn.veclightyear.com/835a84d5/85245660-1094-40b3-acdf-d4b93a02f52d.png)
### 先决条件
- 用户必须在 Docker 中挂载 ./configs 文件夹,以便在更新期间保留。
- Docker 用户必须通过在环境变量中设置 ``DOCKER_ENABLE_SECURITY`` 为 ``true`` 来下载安全 jar 版本。
- 然后通过 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 密钥。
## 常见问题
### 问题1:你计划的功能有哪些?
- 进度条/跟踪
- 完整的自定义逻辑管道,将多个操作组合在一起
- 文件夹支持,自动扫描以执行操作
- 编辑文本(通过 UI,而不仅仅是自动化方式)
- 添加表单
- 多页面布局(拼接 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;``