Project Icon

Stirling-PDF

本地部署的全能PDF处理开源解决方案

Stirling-PDF是一款功能全面的开源PDF处理工具,支持本地部署。它提供PDF分割、合并、转换、重组、添加图片、旋转和压缩等多项功能。该工具基于Spring Boot开发,集成PDFBox和LibreOffice等技术,通过Docker快速部署。支持暗黑模式、并行处理和API集成,可满足各类PDF处理需求。

Stirling-PDF

Docker 拉取次数 Discord Docker 镜像版本 (最新语义化版本标签) GitHub 仓库星标数 Paypal 捐赠 Github 赞助

部署到 DO Name

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

Stirling PDF不会发起任何外部调用用于记录或跟踪目的。

所有文件和PDF要么仅存在于客户端,要么仅在任务执行期间存在于服务器内存中,或者仅为执行任务而暂时存在于文件中。用户下载的任何文件在此时都已从服务器上删除。

stirling-home

功能

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

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

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

使用的技术

使用方法

本地运行

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

Docker / Podman

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

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

请注意,在以下示例中,您可能需要根据需要更改卷路径,当前示例将它们安装到当前工作目录 例如 ./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)45%
巴斯克语 (Euskara) (eu_ES)61%
保加利亚语 (Български) (bg_BG)94%
加泰罗尼亚语 (Català) (ca_CA)48%
克罗地亚语 (Hrvatski) (hr_HR)94%
捷克语 (Česky) (cs_CZ)89%
丹麦语 (Dansk) (da_DK)9%
荷兰语 (Nederlands) (nl_NL)95%
英语 (English) (en_GB)100%
美式英语 (en_US)100%
法语 (Français) (fr_FR)93%
德语 (Deutsch) (de_DE)99%
希腊语 (Ελληνικά) (el_GR)81%
印地语 (हिंदी) (hi_IN)76%
匈牙利语 (Magyar) (hu_HU)75%
印度尼西亚语 (Bahasa Indonesia) (id_ID)76%
爱尔兰语 (Gaeilge) (ga_IE)98%
意大利语 (Italiano) (it_IT)99%
日语 (日本語) (ja_JP)92%
韩语 (한국어) (ko_KR)84%
挪威语 (Norsk) (no_NB)97%
波兰语 (Polski) (pl_PL)92%
葡萄牙语 (Português) (pt_PT)78%
巴西葡萄牙语 (Português) (pt_BR)85%
罗马尼亚语 (Română) (ro_RO)38%
俄语 (Русский) (ru_RU)83%
塞尔维亚语拉丁字母 (Srpski) (sr_LATN_RS)78%
简体中文 (zh_CN)98%
斯洛伐克语 (Slovensky) (sk_SK)91%
西班牙语 (Español) (es_ES)97%
瑞典语 (Svenska) (sv_SE)39%
泰语 (ไทย) (th_TH)99%
繁体中文 (zh_TW)97%
土耳其语 (Türkçe) (tr_TR)98%
乌克兰语 (Українська) (uk_UA)89%
越南语 (Tiếng Việt) (vi_VN)98%

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

请参阅我们的贡献指南

自定义

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;``
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号