当前位置: 首页 > news >正文

使用 Docker 部署 Stirling-PDF 多功能 PDF 工具

1)Stirling-PDF 介绍

大家应该都有过这样的经历,面对一堆 PDF 文档,或者需要合并几个 PDF,或者需要将一份 PDF 文件拆分,又或者需要调整 PDF 中的页面顺序,找到的线上工具 要么广告满天飞,要么 需要付费使用,再不然就是 担心隐私泄露 的问题。如果你也对此感到困扰,那么自建的 PDF 处理工具 Stirling-PDF 或许是你需要的解决方案。

image.png

1.1)Stirling-PDF 简介

官网:https://stirlingtools.com/
GitHub:https://github.com/Stirling-Tools/Stirling-PDF

Stirling-PDF 是一款基于 Web 的 PDF 操作工具,是一个高效而强大的本地托管应用程序,为您提供广泛的 PDF 文件处理功能。可满足各种 PDF 处理需求。您可以使用它来执行多种操作,例如拆分、合并、转换、重新排列、添加图像、旋转和压缩 PDF 文件。这个本地托管的 Web 应用程序具有出色的性能,能够在本地环境中运行,为您提供更高的数据安全性。不论您是处理文档、电子书还是其他 PDF 相关任务,这个工具都将成为您的得力助手,满足您的一切 PDF 处理需求。

image.png

1.2)Stirling-PDF 功能

  • 合并 PDF 文件: 可以将多个 PDF 文件合并为一个文件。
  • 拆分 PDF 文件: 可以将一个 PDF 文件拆分为多个文件。
  • 旋转 PDF 文件: 可以将 PDF 文件按指定角度旋转。
  • 裁剪 PDF 文件: 可以将 PDF 文件的一部分裁剪出来。
  • 添加水印: 可以向 PDF 文件添加水印。
  • 解锁 PDF: 可以解除 PDF 文件的密码保护。
  • 转换 PDF 格式: 可以将 PDF 文件转换为其他格式,如 Word、Excel、PPT 等。
  • OCR 识别 PDF: 可以将 PDF 文件中的文字转换为文本格式。

1.3)Stirling-PDF 特性

  1. 多语言支持
  2. 丰富的页面操作支持
  3. 多样的转换操作支持
  4. 安全与权限管理功能
  5. 更多扩展功能支持

2)检查 Docker 环境

2.1)安装 Docker 软件包

# 高版本 Docker 安装
curl -fsSL https://get.docker.com/ | sh
# 关闭防火墙
systemctl disable --now firewalld
setenforce 0
# 启用 Docker
systemctl enable --now docker

2.2)检查 Docker 服务状态

systemctl status docker

image.png

2.3)开启 IPv4 forwarding

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward

3)安装 Docker-Compose

3.1)下载 Docker-Compose 二进制包

curl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

3.2)给 Docker-Compose 文件增加执行权限

chmod +x /usr/local/bin/docker-compose

3.3)检查 Docker-Compose 版本信息

docker-compose -v

image.png

4)下载 Stirling-PDF 镜像

注意: 镜像版本我修改为了老版本 0.14.5 ,因为我在测试过程中使用 lastest 版本导出的文件中文乱码

docker pull frooodle/s-pdf:0.14.5

image.png

5)方式一:基于 Docker-Cli 部署 Stirling-PDF 应用

5.1)创建 Stirling-PDF 容器

# 创建数据存储目录
mkdir -p /docker/stirling-pdf/{files,data,configs,logs}
# 基于 Docker-Cli 部署 Stirling-PDF 应用
docker run -d \-p 8888:8080 \-v /docker/stirling-pdf/data:/usr/share/tesseract-ocr/4.00/tessdata \-v /docker/stirling-pdf/files:/customFiles \-v /docker/stirling-pdf/configs:/configs \-v /docker/stirling-pdf/logs:/logs \-e DOCKER_ENABLE_SECURITY=false \-e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \--name stirling-pdf \frooodle/s-pdf:0.14.5

image.png

5.2)查看 Stirling-PDF 容器状态

检查 Stirling-PDF 容器状态状态,确保 Stirling-PDF 容器正常启动。

docker ps -a

image.png

5.3)查看 Stirling-PDF 容器日志

检查 Stirling-PDF 容器日志,确保 Stirling-PDF 服务正常运行。

docker logs stirling-pdf

image.png

6)方式二:基于 Docker-Compose 部署 Stirling-PDF 应用

6.1)编辑 Docker-Compose.yaml 文件

vim docker-compose.yaml
version: '3'
services:stirling-pdf:image: frooodle/s-pdf:0.14.5ports:- 8888:8080volumes:- /docker/stirling-pdf/data:/usr/share/tesseract-ocr/4.00/tessdata- /docker/stirling-pdf/configs:/configs- /docker/stirling-pdf/files:/customFiles- /docker/stirling-pdf/logs:/logsenvironment:- DOCKER_ENABLE_SECURITY=false

6.2)运行 Stirling-PDF 容器

# 基于 docker-compose.yaml 启动并运行服务
docker-compose -f docker-compose.yaml up -d

image.png

6.3)验证 Stirling-PDF 容器状态

docker ps -a

image.png

7)访问 Stirling-PDF

7.1)访问 Stirling-PDF 首页

访问:http://192.168.80.8:8888/
注意: 将 IP 替换为自己服务器 IP 地址。

image.png

7.2)设置系统中文

image.png
image.png

8)Stirling-PDF 基本使用

8.1)将 Word 转 PDF 文档

image.png

选择文件,点击转换为 PDF( 将文件拖拽至页面也可以 )

image.png

8.2)将 MarkDown 转 PDF 文档

image.png

上传文件,点击 转换( 将文件拖拽至页面也可以 )

image.png

8.3)文档加密

image.png
效果图

8.4)文档解密

image.png
效果图

8.5)添加水印

image.png
image.png
效果图

9)最后

通过搭建自己的 Stirling-PDF,不仅可以随时随地处理 PDF,而且可以确保私人数据始终在自己的掌控之中,不会被不必要的第三方所获取。

如果你喜欢这篇文章,请记得点赞,收藏,并关注 【开源极客行】 ,我将持续分享更多实用的自搭建应用指南。一起,让我们掌握自己的数据,创建自己的数字世界!

如果你在搭建过程中遇到任何问题,或者有任何建议,也欢迎在下方留言,一起探讨和学习。

相关文章:

使用 Docker 部署 Stirling-PDF 多功能 PDF 工具

1)Stirling-PDF 介绍 大家应该都有过这样的经历,面对一堆 PDF 文档,或者需要合并几个 PDF,或者需要将一份 PDF 文件拆分,又或者需要调整 PDF 中的页面顺序,找到的线上工具 要么广告满天飞,要么 …...

springcloud第3季 项目工程搭建与需求说明1

一 需求说明 1.1 实现结构图 订单接口调用支付接口 二 工程搭建 2.1 搭建工程步骤...

外包干了3个月,技术退步明显。。。。

先说一下自己的情况,本科生,2019年我通过校招踏入了南京一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…...

Redis特性与应用场景

Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中能够发挥重要作用。 Redis的特性 1.In-memory data structures: MySQL使用表的方式存储数据,这意味着数据通常存储在硬盘上,并且…...

openssl3.2 - exp - 可以在命令行使用的口令算法名称列表

文章目录 openssl3.2 - exp - 可以在命令行使用的口令算法名称列表概述笔记测试工程实现备注整理 - 总共有126种加密算法可用于命令行参数的密码加密算法备注END openssl3.2 - exp - 可以在命令行使用的口令算法名称列表 概述 上一个笔记openssl3.2 - exp - PEM <…...

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置FILE: /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php  LINE: 110 TRACE#0 /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php(…...

复杂的数据类型如何转成字符串!

1.首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值, 如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法, 如果 toString 方法调用之后…...

云原生构建 微服务、容器化与容器编排

第1章 何为云原生,云原生为何而生 SOA也就是面向服务的架构 软件架构的发展主要经历了集中式架构、分布式架构以及云原生架构这几代架构的发展。 微服务架构,其实是SOA的另外一种实现方式,属于SOA的子集。 在微服务架构下,系统…...

JavaSE——面向对象高级一(2/4)-饿汉式单例、懒汉式单例、代码块、static的注意事项

目录 static的注意事项 static相关:代码块 单例设计模式 饿汉式单例 懒汉式单例 static的注意事项 类方法中可以直接访问类的成员,不可以直接访问实例成员。 public class Student{//定义一个类变量和一个实例变量static String schoolName;int s…...

排序之冒泡排序

通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。 流程: 首先,对 n 个元素执行“冒泡”,将数组的最大元素交换至正确位置。接下来,对剩余 n−1 个元素执行“冒泡”&…...

【NR技术】 3GPP支持无人机服务的关键性能指标

1 性能指标概述 5G系统传输的数据包括安装在无人机上的硬件设备(如摄像头)收集的数据,例如图片、视频和文件。也可以传输一些软件计算或统计数据,例如无人机管理数据。5G系统传输的业务控制数据可基于应用触发,如无人机上设备的开关、旋转、升…...

Day29:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

目录 JS原生开发-DOM树-用户交互 JS导入库开发-编码加密-逆向调试 思维导图 JS知识点: 功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等 技术:原生开发&#x…...

Python爬虫——scrapy-4

目录 免责声明 目标 过程 先修改配置文件 再修改pipelines.py 最后的结果是这样的 read.py pipelines.py items.py settings.py scrapy日志信息以及日志级别 settings.py文件设置 用百度实验一下 指定日志级别 WARNING 日志文件 注意 scrapy的post请求 简介 …...

美团春招编程第一场第三题

美团春招编程第一场第三题 题目 解答 思路-暴力解法 pair中存储从原点到包含当前元素的0,1数量&#xff0c;得到二维数组mat; 从头到尾遍历尺寸为i*i的矩形&#xff0c;计算完美矩形数量 #include <iostream> #include <vector> using namespace std;int main()…...

BulingBuling - 《金钱心理学》 [ The Psychology of Money ]

金钱心理学 摩根-豪泽尔 关于财富、贪婪和幸福的永恒课程 The Psychology of Money Morgan Housel Timeless Lessons on Wealth, Greed, and Happiness 内容简介 [ 心理学 ] [ 金钱与投资 ] Whats it about? [ Psychology ] [ Money & Investments ] 《金钱心理学》&…...

急速建立网站方法

急速建立网站方法 WordPress&#xff1a; 简介&#xff1a; WordPress是一种广泛用于建设博客、网站的免费开源内容管理系统&#xff08;CMS&#xff09;。它具有友好的用户界面和丰富的插件生态系统&#xff0c;使得用户可以轻松创建和管理网站。特点&#xff1a; 主题和插件支…...

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…...

PostgreSQL中In, Exists在SQL查询中到底有无区别

前言 SQL查询当中&#xff0c;In和Exists子查询到底有无区别&#xff1f;记得很多年以前&#xff0c;确实是有相关的使用戒条的&#xff0c;或者说存在一些使用的惯用法。试图完全抹开两者的区别&#xff0c;就有点过了。 两者的主要区别&#xff1a; 从目的上讲&#xff0c…...

Netty Review - 探究Netty服务端主程序无异常退出的背后机制

文章目录 概述故障场景尝试改进问题分析铺垫&#xff1a; Daemon线程Netty服务端启动源码分析逻辑分析 如何避免Netty服务端意外退出最佳实践 概述 在使用Netty进行服务端程序开发时&#xff0c;初学者可能会遇到各种问题&#xff0c;其中之一就是服务端意外退出的问题。这种问…...

【兔子机器人】修改GO电机id(软件方法、硬件方法)

一、硬件方法 利用上位机直接修改GO电机的id号&#xff1a; 打开调试助手&#xff0c;点击“调试”&#xff0c;查询电机&#xff0c;修改id号&#xff0c;即可。 但先将四个GO电机连接线拔掉&#xff0c;不然会将连接的电机一并修改。 利用24V电源给GO电机供电。 二、软件方…...

GNSS定位质量分析实战:如何利用PPP-B2b提升GPS/BDS的PDOP与可视卫星数?

GNSS定位质量优化实战&#xff1a;PPP-B2b如何重塑多系统联合定位性能 当高精度定位成为自动驾驶、精准农业和地质监测等领域的基础需求时&#xff0c;GNSS系统的性能优化便成为工程师们必须面对的课题。北斗三号全球系统新增的PPP-B2b服务&#xff0c;为亚太区域用户提供了开…...

告别懵圈!用ISOLAR-A工具手把手配置Autosar BswM模式管理(附流程图详解)

告别懵圈&#xff01;用ISOLAR-A工具手把手配置Autosar BswM模式管理&#xff08;附流程图详解&#xff09; 刚接触Autosar BswM模块的工程师&#xff0c;往往会被规范文档中抽象的模式仲裁、规则评估、动作列表等概念绕得晕头转向。纸上谈兵终觉浅&#xff0c;今天我们就以ISO…...

Cosmos-Reason1-7B辅助学术图表绘制:从数据到Mathtype公式与解读

Cosmos-Reason1-7B辅助学术图表绘制&#xff1a;从数据到Mathtype公式与解读 1. 引言 做科研的朋友们&#xff0c;不知道你们有没有经历过这样的时刻&#xff1a;辛辛苦苦做完实验&#xff0c;整理出一堆数据&#xff0c;然后对着Excel或者Origin软件开始犯愁——这堆数字&am…...

字符串盲区速记

1.char arr[] {h,h,h,h,h};是字符数组但不是字符串&#xff0c;末尾加\0或0才是字符串&#xff0c;注意是0不是0。2.sizeof和strlen#include <stdio.h> #include <string.h>char arr[] {h,h,h,h,h};char arr1[] {h,h,h,h,h,\0}; // <> char arr1[] &q…...

死锁(Deadlock)

什么是死锁 死锁是多个进程或线程因竞争资源而陷入相互等待的状态,若无外力干预,所有进程或线程将无法继续执行。例如各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象就是死锁。 什么时候产生死锁 互斥条件:在一段时间内某资源只由一个进程或线程占…...

【PID 控制算法实战】C 语言实现:结构体封装、积分限幅与一阶滤波

PID代码解读 (c语言版本) PID的控制流程根据流程一步步描述代码&#xff1a; PID代码流程 创建变量 typedef struct {float Kp, Ki, Kd;float error,last_error;float integral,max_intergral;float output,max_output; }PID;初始化PID的各类参数 void PID_Init(PID *pid,floa…...

【Linux命令饲养指南】CentOS 安装 MySQL【AI辅助实现】

声明&#xff1a;由于本人经常记混 Linux 软件安装和卸载命令&#xff0c;本文相关步骤是在 AI 辅助下整理完成&#xff0c;仅供参考。⚠️ 补充说明&#xff1a;CentOS 系统官方已停止维护(如果你使用CentOS 那么yum可能使用不了)&#xff0c;本文示例环境为 Rocky Linux&…...

AI Studio 中永久配置 PyTorch 环境的完整指南

1. 为什么需要在AI Studio中配置永久PyTorch环境 百度AI Studio默认提供的深度学习框架是PaddlePaddle&#xff0c;这对于习惯使用PyTorch的开发者来说确实不太友好。每次新建项目都要重新配置环境&#xff0c;不仅浪费时间&#xff0c;还可能导致项目之间的环境不一致。我在实…...

TimeSformer在MMAction2里跑Kinetics400,我的显卡显存不够怎么办?优化与调参实战

TimeSformer在MMAction2中训练Kinetics400的显存优化实战指南 当我在实验室的RTX 3090上首次尝试用TimeSformer训练Kinetics400时&#xff0c;显存不足的报错让我意识到——Transformer类模型对硬件的要求确实苛刻。经过两周的反复试验和参数调整&#xff0c;我总结出一套针对…...

STM32G030F6 + RT-Thread 驱动 WS2812B 全彩灯环:从硬件连接到代码解析

STM32G030F6 RT-Thread 驱动 WS2812B 全彩灯环&#xff1a;从硬件连接到代码解析 在嵌入式开发领域&#xff0c;将微控制器与智能LED灯环结合使用&#xff0c;可以创造出令人惊艳的视觉效果。STM32G030F6作为一款性价比极高的ARM Cortex-M0内核微控制器&#xff0c;配合RT-Thr…...