Stirling PDF是一个使用 Docker 的强大的、本地托管的、基于 Web 的 PDF 操作工具,支持27种语言,它使您能够对PDF文件进行各种操作,包括分割、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序已发展为包含一组全面的功能,可满足您的所有 PDF 要求。
Stirling PDF部署分为两种,本地部署和Docker部署,下面详细安装和使用教程来了。
(1)本地部署(无Docker)
要在没有Docker/Podman 的情况下运行应用程序,您需要手动安装所有依赖项并构建必要的组件。
请注意,某些依赖项可能并非在所有 Linux 发行版的标准存储库中都可用,并且可能需要额外的步骤来安装。
以下假设您对在操作系统中使用命令行界面有基本的了解。
它应该适用于大多数 Linux 发行版和 MacOS。对于 Windows,您可能需要使用 Windows Subsystem for Linux (WSL) 来执行某些步骤。依赖项的数量实际上是为了减少总体大小,即安装 LibreOffice 子组件而不是完整的 LibreOffice 包。
理论上,如果您的发行版包含旧包或并非所有包,您可以使用 Distrobox/Toolbox。但您也可以使用 Docker 容器。
第1步:环境准备
先安装以下软件,缺啥就装啥。
- Java 17 or later (21 recommended)
- Gradle 7.0 or later (included within repo so not needed on server)
- Git
- Python 3.8 (with pip)
- Make
- GCC/G++
- Automake
- Autoconf
- libtool
- pkg-config
- zlib1g-dev
- libleptonica-dev
对于基于 Debian 的系统,您可以使用以下命令:
sudo apt-get update
sudo apt-get install -y git automake autoconf libtool libleptonica-dev pkg-config zlib1g-dev make g++ openjdk-21-jdk python3 python3-pip
对于基于 Fedora 的系统,请使用以下命令:
sudo dnf install -y git automake autoconf libtool leptonica-devel pkg-config zlib-devel make gcc-c++ java-21-openjdk python3 python3-pip
对于使用 Nix Package Manager 的非 root 用户,请使用以下命令:
nix-channel --update
nix-env -iA nixpkgs.jdk21 nixpkgs.git nixpkgs.python38 nixpkgs.gnumake nixpkgs.libgcc nixpkgs.automake nixpkgs.autoconf nixpkgs.libtool nixpkgs.pkg-config nixpkgs.zlib nixpkgs.leptonica
第 2 步:克隆并构建 jbig2enc(仅某些 OCR 功能需要)
对于 Debian 和 Fedora,您可以使用以下命令从源代码构建:
mkdir ~/.git
cd ~/.git &&\
git clone https://github.com/agl/jbig2enc.git &&\
cd jbig2enc &&\
./autogen.sh &&\
./configure &&\
make &&\
sudo make install
对于 Nix,您将面临未检测到的 Leptonica
。使用以下命令直接安装即可绕过此问题:
nix-env -iA nixpkgs.jbig2enc
第 3 步:安装附加软件
接下来我们需要安装 LibreOffice 进行转换、ocrmypdf 进行 OCR 以及 opencv 进行模式识别功能。
安装以下软件:
- libreoffice-core
- libreoffice-common
- libreoffice-writer
- libreoffice-calc
- libreoffice-impress
- python3-uno
- unoconv
- pngquant
- unpaper
- ocrmypdf
- opencv-python-headless
对于基于 Debian 的系统,您可以使用以下命令:
sudo apt-get install -y libreoffice-writer libreoffice-calc libreoffice-impress unpaper ocrmypdf
pip3 install uno opencv-python-headless unoconv pngquant WeasyPrint --break-system-packages
Fedora:
sudo dnf install -y libreoffice-writer libreoffice-calc libreoffice-impress unpaper ocrmypdf
pip3 install uno opencv-python-headless unoconv pngquant WeasyPrint
Nix:
nix-env -iA nixpkgs.unpaper nixpkgs.libreoffice nixpkgs.ocrmypdf nixpkgs.poppler_utils
pip3 install uno opencv-python-headless unoconv pngquant WeasyPrint
第 4 步:克隆并构建 Stirling-PDF
cd ~/.git &&\
git clone https://github.com/Stirling-Tools/Stirling-PDF.git &&\
cd Stirling-PDF &&\
chmod +x ./gradlew &&\
./gradlew build
第 5 步:将jar包移动到所需位置
构建过程完成后,将在 build/libs
目录中生成 .jar
文件。您可以将此文件移动到所需位置,例如 /opt/Stirling-PDF/
。您还必须将已下载的 Stirling-PDF 存储库中的 Script 文件夹移动到此目录。使用 OpenCV 的 python 脚本需要此文件夹。
sudo mkdir /opt/Stirling-PDF &&\
sudo mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ &&\
sudo mv scripts /opt/Stirling-PDF/ &&\
echo "Scripts installed."
对于非root用户,您可以使用以下命令将jar保留在Stirling-PDF的主目录中:
mv ./build/libs/Stirling-PDF-*.jar ./Stirling-PDF-*.jar
第6步:其他文件
OCR
如果您计划使用 OCR(光学字符识别)功能,并且运行非英语扫描,则可能需要安装 Tesseract 的语言包。
安装语言包
最简单的方法是使用存储库提供的语言包。跳过其他步骤。
方法如下:
- 通过选择您需要的语言的
.traineddata
文件来下载所需的语言包。 - 将
.traineddata
文件放在Tesseract tessdata目录中:/usr/share/tessdata
- 请查看 OCRmyPDF 安装指南以获取更多信息。
重要提示:请勿删除现有的 eng.traineddata,这是必需的。
基于 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'
Nix:
nix-env -iA nixpkgs.tesseract
注意:安装 tesseract 时,Nix Package Manager 会预安装几乎所有语言包。
第 7 步:运行 Stirling-PDF
已经推送到根目录的,运行以下命令:
./gradlew bootRun
or
java -jar /opt/Stirling-PDF/Stirling-PDF-*.jar
由于 libreoffice、soffice 和转换工具将其 dbus_tmp_dir 设置为dbus_tmp_dir="/run/user/$(id -u)/libreoffice-dbus"
,因此在使用其端点时可能会出现以下错误:
[Thread-7] INFO s.s.SPDF.utils.ProcessExecutor - mkdir: cannot create directory ‘/run/user/1501’: Permission denied
要解决此问题,在启动 Stirling-PDF 之前,您必须使用以下命令将环境变量设置为您具有写访问权限的目录:
mkdir temp
export DBUS_SESSION_BUS_ADDRESS="unix:path=./temp"
./gradlew bootRun
or
java -jar ./Stirling-PDF-*.jar
第8步:添加桌面图标
这会将修改后的应用程序启动器添加到您的应用程序菜单中。
location=$(pwd)/gradlew
image=$(pwd)/docs/stirling-transparent.svg
cat > ~/.local/share/applications/Stirling-PDF.desktop <<EOF
[Desktop Entry]
Name=Stirling PDF;
GenericName=Launch StirlingPDF and open its WebGUI;
Category=Office;
Exec=xdg-open http://localhost:8080 && nohup $location bootRun &;
Icon=$image;
Keywords=pdf;
Type=Application;
NoDisplay=false;
Terminal=true;
EOF
注意:目前该应用程序将在后台运行,直到手动关闭。
可选:更改应用程序的主机和端口:
首先创建一个.env文件,您可以在其中存储环境变量:
touch /opt/Stirling-PDF/.env
在此文件中,您可以添加所有变量,每行一个变量,如主自述文件中所述(例如 SYSTEM_DEFAULTLOCALE=”de-DE”)。
创建一个新文件来存储我们的服务设置并使用 nano 编辑器打开它:
nano /etc/systemd/system/stirlingpdf.service
粘贴此内容,确保更新 jar 文件的文件名。按 Ctrl+S 和 Ctrl+X 保存并退出 nano 编辑器:
[Unit]
Description=Stirling-PDF service
After=syslog.target network.target
[Service]
SuccessExitStatus=143
User=root
Group=root
Type=simple
EnvironmentFile=/opt/Stirling-PDF/.env
WorkingDirectory=/opt/Stirling-PDF
ExecStart=/usr/bin/java -jar Stirling-PDF-0.17.2.jar
ExecStop=/bin/kill -15 $MAINPID
[Install]
WantedBy=multi-user.target
通知 systemd 它必须重建其内部服务数据库(每次更改服务文件时都必须运行此命令):
sudo systemctl daemon-reload
启用随系统自启动服务:
sudo systemctl enable stirlingpdf.service
查看服务状态:
sudo systemctl status stirlingpdf.service
手动启动/停止/重新启动服务:
sudo systemctl start stirlingpdf.service
sudo systemctl stop stirlingpdf.service
sudo systemctl restart stirlingpdf.service
如果您想自定义应用程序,请记住在运行项目之前设置必要的环境变量,该列表可以在主自述文件中看到。
您可以在终端中使用export
命令或 java -jar 命令的 -D 参数来执行此操作:
export APP_HOME_NAME="Stirling PDF"
or
-DAPP_HOME_NAME="Stirling PDF"
(2)Docker / Podman部署
Stirling PDF 有 2 个不同的版本:完整版(717 MB)和超精简版(237MB)。根据您使用的功能类型,您可能需要较小的图像以节省空间。要了解不同版本提供的功能,请查看我们的版本映射。对于不介意空间优化的人,只需使用最新标签。
Docker Run
docker run -d \
-p 8080:8080 \
-v /location/of/trainingData:/usr/share/tessdata \
-v /location/of/extraConfigs:/configs \
-v /location/of/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 Compose
version: '3.3'
services:
stirling-pdf:
image: frooodle/s-pdf:latest
ports:
- '8080:8080'
volumes:
- /location/of/trainingData:/usr/share/tessdata #Required for extra OCR languages
- /location/of/extraConfigs:/configs
# - /location/of/customFiles:/customFiles/
# - /location/of/logs:/logs/
environment:
- DOCKER_ENABLE_SECURITY=false
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
- LANGS=en_GB
注意:Podman是兼容CLI的Docker,因此只需将“docker”替换为“podman”即可。