Stirling-PDF

Stirling-PDF


一、Stirling-PDF

  • github: https://github.com/Stirling-Tools/Stirling-PDF
  • API : https://app.swaggerhub.com/apis-docs/Stirling-Tools/Stirling-PDF/

1、什么是 Stirling-PDF

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

Stirling PDF 不会出于记录保存或跟踪目的 发起任何站外呼叫。

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



2、特点

  • Dark mode 支持。
  • 自定义下载选项
  • 并行文件处理和下载
  • 用于接入外部脚本的API
  • 可选的登录和鉴权支持(见这里的文档)
  • 数据库备份和导入(见这里的文档)

3、PDF功能


页面操作
  • 查看和修改PDF —— 通过自定义查看排序和搜索查看多页PDF。
    在页面上添加注释、绘制和添加文本和图像等编辑功能。(使用PDF. js与Joxit和Liberation。解放字体)
  • 用于合并/拆分/旋转/移动PDF及其页面的全交互式GUI。
  • 将多个PDF合并到一个结果文件中。
  • 将PDF拆分为指定页码的多个文件或将所有页面提取为单个文件。
  • 将PDF页面重新组织成不同的顺序。
  • 以90度增量旋转PDF。
  • 删除页面。
  • 多页布局(将PDF格式化为多页页面)。
  • 按设置%缩放页面内容大小。
  • 调整对比度。
  • 裁剪PDF。
  • 自动拆分PDF(使用物理扫描的分页器)。
  • 提取页面。
  • 将PDF转换为单页。

转换操作
  • 将PDF与图像相互转换。
  • 将任何通用文件转换为PDF(使用LibreOffice)。
  • 将PDF转换为Word/Powerpoint/其他(使用LibreOffice)。
  • 将超文本标记语言转换为PDF。
  • PDF的URL。
  • MarkdownPDF。

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

其他操作
  • 添加/生成/写入签名。
  • 修复PDF。
  • 检测并删除空白页。
  • 比较2个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

二、如何使用


1、本地

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


2、Docker/Podman

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

Stirling PDF 有3个不同的版本,完整版 和 超精简版 以及 “Fat”版。
根据您使用的功能类型,您可能需要更小的镜像来节省空间。
要查看不同版本提供的内容,请查看我们的版本映射
对于那些不介意空间最优化的人,只需使用最新的标签。
Full | Ultra-Lite | Fat

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


3、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:latestCan also add these for customisation but are not required-v /location/of/customFiles:/customFiles \

4、Docker Compose

version: '3.3'
services:stirling-pdf:image: frooodle/s-pdf:latestports:- '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 与 DockerCLI 兼容,因此只需将 “docker” 替换为 “podman”。


三、启用 OCR/Compression 功能

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

1、我的OCR 曾经工作,现在不工作了!

新docker映像上tessadata位置的路径已更改,请使用/usr/share/tessdata(其他路径仍应用于向后兼容,但可能不会)

2、OCR 如何工作

Stirling-PDF使用OCRmyPDF,而OCRmyPDF又使用 tesseract 进行文本识别。 所有的功劳都归功于他们的出色工作!

3、语言包

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

  • tessdata_fast:这些语言包更小,加载速度更快,但可能提供较低的识别精度。
  • TessData:这些语言包更大,提供更好的识别精度,但可能需要更长的时间来加载。

根据您的要求,您可以为您的使用案例选择合适的语言包。默认情况下,Stirling-PDF使用tessdata_fasteng,但这可以替换。


4、安装语言包

  1. 通过选择所需语言的.traineddata文件 下载所需语言包。
  2. .traineddata文件放在Tesseract tessdata目录中:/usr/share/tessdata

5、不要删除现有的ENG. TRAINEDDATA,这是必需的。

6、Docker

如果使用Docker,则需要将 Tesseract tessdata目录作为卷公开,以便使用其他语言包。

7、Docker Compose

修改docker-compose.yml文件以包含以下卷配置:

services:your_service_name:image: your_docker_image_namevolumes:- /location/of/trainingData:/usr/share/tessdata

8、Docker 运行

将以下内容添加到您现有的docker run命令中

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

9、非Docker

如果您不使用Docker,则需要安装OCR 组件,包括Ocrmypdf应用程序。 你可以看到OCRmyPDF安装指南

基于Debian的系统,使用以下命令安装语言:

sudo apt update &&\
# All languages
# sudo apt install -y 'tesseract-ocr-*'# Find languages:
apt search tesseract-ocr-# View installed languages:
dpkg-query -W tesseract-ocr- | sed 's/tesseract-ocr-//g'

Fedora:

# All languages
# sudo dnf install -y tesseract-langpack-*# Find languages:
dnf search -C tesseract-langpack-# View installed languages:
rpm -qa | grep tesseract-langpack | sed 's/tesseract-langpack-//g'

四、定制

Stirling PDF 允许轻松自定义应用程序。包括诸如

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

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

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

security:enableLogin: 'true'

要通过环境变量获得这个,您需要有 SECURITY_ENABLELOGIN

当前设置列表是

security:enableLogin: false # set to 'true' to enable logincsrfDisabled: true # Set to 'true' to disable CSRF protection (not recommended for production)loginAttemptCount: 5 # lock user account after 5 triesloginResetTimeMinutes: 120 # lock account for 2 hours after x attemptsloginMethod: 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 loginpassword: '' # Initial password for the first loginoauth2: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 endpointclientId: '' # Client ID for Keycloak OAuth2clientSecret: '' # Client Secret for Keycloak OAuth2scopes: openid, profile, email # Scopes for Keycloak OAuth2useAsUsername: preferred_username # Field to use as the username for Keycloak OAuth2google:clientId: '' # Client ID for Google OAuth2clientSecret: '' # Client Secret for Google OAuth2scopes: https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/userinfo.profile # Scopes for Google OAuth2useAsUsername: email # Field to use as the username for Google OAuth2github:clientId: '' # Client ID for GitHub OAuth2clientSecret: '' # Client Secret for GitHub OAuth2scopes: read:user # Scope for GitHub OAuth2useAsUsername: login # Field to use as the username for GitHub OAuth2issuer: '' # set to any provider that supports OpenID Connect Discovery (/.well-known/openid-configuration) end-pointclientId: '' # Client ID from your providerclientSecret: '' # Client Secret from your providerautoCreateUser: false # set to 'true' to allow auto-creation of non-existing usersuseAsUsername: email # Default is 'email'; custom fields can be used as the usernamescopes: openid, profile, email # Specify the scopes for which the application will request permissionsprovider: 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 disallowenableAlphaFunctionality: 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 availableshowUpdateOnlyAdmin: 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 filesui:appName: '' # Application's visible namehomeDescription: '' # Short description or tagline shown on homepage.appNameNavbar: '' # Name displayed on the navigation barendpoints: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 application.properties 的用户 可以在 Stirling-PDF 现有的基础上输入自己的设置


额外注释

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

仅环境参数

  • SYSTEM_ROOTURIPATH ie 设置为/pdf-app 来将应用程序的根URI设置为localhost:8080/pdf-app
  • SYSTEM_CONNECTIONTIMEOUTMINUTES 设置自定义连接超时值
  • DOCKER_ENABLE_SECURITY 告诉 docker 下载安全 jar(身份验证登录需要true)
  • INSTALL_BOOK_AND_ADVANCED_HTML_OPS将 calibre 下载到 Stilin-pdf 上,实现 pdf 与 书 和 高级html 的转换。
  • LANGS 定义用于安装文档转换的自定义字体库。

五、API

对于那些想要使用 Stirling-PDF 后端API 与 他们自己的自定义脚本链接以编辑PDF的用户,您可以 在这里 查看全部现有API文档,或导航到 你的版本文档的 stirling-pdf 实例的 /swagger-ui/index.html。(或按照API按钮在您的 Stirling-PDF 设置)


六、登录鉴权

https://github.com/Stirling-Tools/Stirling-PDF/blob/main/images/login-light.png


先决条件

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

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

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

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

要添加新增用户,请转到帐户设置底部并点击 Admin Settings,在这里您可以添加新增用户。其中提到的不同角色用于速率限制。这是一项工作,将在未来进行中扩展

对于API使用,您必须为该用户提供带有 X-API-Key 和关联API密钥的表头。


七、其它

1、支持的语言

Stirling PDF 目前支持33 种语言!

  • Arabic (العربية) (ar_AR)
  • Basque (Euskara) (eu_ES)
  • Bulgarian (Български) (bg_BG)
  • Catalan (Català) (ca_CA)
  • Croatian (Hrvatski) (hr_HR)
  • Czech (Česky) (cs_CZ)
  • Dutch (Nederlands) (nl_NL)
  • English (English) (en_GB)
  • English (US) (en_US)
  • French (Français) (fr_FR)
  • German (Deutsch) (de_DE)
  • Greek (Ελληνικά) (el_GR)
  • Hindi (हिंदी) (hi_IN)
  • Hungarian (Magyar) (hu_HU)
  • Indonesia (Bahasa Indonesia) (id_ID)
  • Italian (Italiano) (it_IT)
  • Japanese (日本語) (ja_JP)
  • Korean (한국어) (ko_KR)
  • Norwegian (Norsk) (no_NB)
  • Polish (Polski) (pl_PL)
  • Portuguese (Português) (pt_PT)
  • Portuguese Brazilian (Português) (pt_BR)
  • Romanian (Română) (ro_RO)
  • Russian (Русский) (ru_RU)
  • Sebian Latin alphabet (Srpski) (sr_LATN_RS)
  • Simplified Chinese (简体中文) (zh_CN)
  • Slovakian (Slovensky) (sk_SK)
  • Spanish (Español) (es_ES)
  • Swedish (Svenska) (sv_SE)
  • Thai (ไทย) (th_TH)
  • Traditional Chinese (繁體中文) (zh_TW)
  • Turkish (Türkçe) (tr_TR)
  • Ukrainian (Українська) (uk_UA)

2、常见问题解答


Q1:您计划的功能是什么?
  • 进度条/跟踪
  • 完整的自定义逻辑管道,可将多个操作组合在一起。
  • 文件夹支持自动扫描以执行操作
  • 编辑文本(通过UI而不仅仅是自动方式)
  • 添加表单
  • 多页面布局(将PDF页面拼接在一起)支持x行y列和自定义页面大小
  • 手动或自动填写表格

Q2:为什么我的应用程序下载 .htm 文件?

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


Q3:为什么我的下载超时了?

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


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

请参阅我们的贡献指南!


2024-07-26(五)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV图像滤波(2)均值平滑处理函数blur()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,blur()函数用于对图像应用简单的均值模糊(mean blur)。这种模糊效果可以通过将图像中的每个像素替…

C++知识点:类和对象(自用)

类和对象 1. 类和对象的关系2. 对象指针3. 在堆上创建对象4. 成员访问限定符5. 名字编码(Name Mangling)6.构造函数7.构造函数的重载8.初始化列表8. 成员变量初始化的顺序(通过初始化列表)9. 初始化 const 成员变量10. 析构函数11…

v-has 全局按钮权限设置(Vue2)

需求:一些操作按钮默认打开是隐藏的,发送后台请求返回当前登录人的人员类别,前端控制操作按钮权限,动态显示或者隐藏 操作按钮。 首先想到v-has自定义指令,因为当前只是一部分的权限控制,所以就没有放到全…

AutoSAR自适应平台架构总览--AP的初认识

AutoSAR自适应平台架构总览:AP 基础设施层(Foundation Layer)核心操作系统(Core OS)通信管理(Communication Management) 服务层(Services Layer)诊断服务(Diagnostics S…

rust 生命周期(八)

生命周期定律和原则 1.借用检查器: Rust 编译器使用借用检查器来验证所有引用在其使用的整个过程中都是有效的。借用检查器通过生命周期来跟踪引用。 2.显式生命周期注解: 当涉及多个引用时,可能需要显式地指定生命周期,以帮助编译器理解引用之间的关…

MySQL窗口函数详解

MySQL窗口函数详解 MySQL从8.0版本开始引入了窗口函数,这是一个强大的特性,可以大大简化复杂的数据分析任务。本文将详细介绍MySQL窗口函数的概念、语法和常见用法,并结合实际应用场景进行说明。 什么是窗口函数? 窗口函数是一种能够对结…

day03 swagger

导入swagger3的步骤&#xff1a; pom.xml&#xff08;只需要子模块配置&#xff09;配置&#xff1a; <!--springdoc 集成了 swagger3--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</a…

谷粒商城实战笔记-高效工作经验积累

当然&#xff0c;我会提供一个更具体的例子来说明这两个原则的重要性及其背后的惨痛经历。 1. 先理解需求&#xff0c;后写代码 惨痛经历 几年前&#xff0c;我所在的团队负责为开发一个在线预订系统。 项目启动之初&#xff0c;我们急于展示成果&#xff0c;没有充分理解客…

UE5+OpenCV配置(Windows11系统)

一、概述 因为需要在UE5中使用OpenCV这些工具进行配置&#xff0c;所以在网络上参考借鉴一些资料进行配置。查询到不少的资料&#xff0c;最后将其配置成功。在这里顺便记录一下自己的配置成功的过程。 二、具体过程 &#xff08;一&#xff09;版本 使用Windows11系统、UE5.…

CSS(九)——CSS 轮廓(outline)

CSS 轮廓&#xff08;outline&#xff09; 轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指定元素轮廓的样式、颜色和宽度。 让我们用一个图来看…

基于Java中的SSM框架实现高校心理评测与分析系统项目【项目源码+论文说明】

基于Java中的SSM框架实现高校心理评测与分析系统演示 摘要 为了让学校和教师方面更好的深入了解学生的心理&#xff0c;有助于加强学生心理建设。该系统使用Java语言开发&#xff0c;系统架构采用SSM技术来实现功能性开发&#xff0c;MySQL数据库存放数据&#xff0c;实现了进…

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…

git cherry-pick用法

git cherry-pick 如何将我另一个分支上的某个提交合并到新的分支上 首先切换到新分支上git cherry-pick <commit_hash>例如&#xff1a;git cherry-pick f8a70c9

python实现接缝雕刻算法

python实现接缝雕刻算法 接缝雕刻算法步骤详解Python实现详细解释优缺点应用领域接缝雕刻算法(Seam Carving Algorithm)是一种内容感知的图像缩放技术,可以智能地改变图像的尺寸,而不会明显影响其重要内容。它通过动态规划的方式寻找图像中的“接缝”,即在图像中从上到下或…

jenkins自动化持续集成

一、持续集成优势 1.1 解放重复劳动 一次设置&#xff0c;多次复用。持续集成任务可以解放集成、测试、部署等重复性劳动&#xff0c;通过自动化任务能够显著提升集成频率。 1.2 更快解决问题 接入持续集成任务后&#xff0c;能够更早地感知变更后效果&#xff0c;及时进入…

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…

树形dp例题2

洛谷p2015绿 题意&#xff1a;有一棵苹果树&#xff0c;如果树枝有分叉&#xff0c;一定是分二叉&#xff08;就是说没有只有一个儿子的结点&#xff09;这棵树共有 N个结点&#xff08;叶子点或者树枝分叉点&#xff09;&#xff0c;编号为 1∼&#x1d441;&#xff0c;树根…

mysql语法介绍

MySQL 语法主要基于 SQL&#xff08;Structured Query Language&#xff09;标准&#xff0c;用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE database_name; 1.选择数据库&#xff1a; USE database_name;…

WPF使用TouchSocket实现Tcp client

文章目录 前言1、页面展示2、主页面UI代码2、TCP client的UI代码3、Tcp client后台代码实现4、UI与后台代码的关联 前言 在该篇的Demo中&#xff0c;您可以找到以下内容&#xff1a; 1、TouchSocket的使用&#xff1b; 2、CommunityToolkit.Mvvm的使用&#xff1b; 3、AvalonD…

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型&#xff0c;以其卓越的性能和极具竞争力的价格&#xff0c;成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…