我有 bash 脚本,它采用小册子格式的 PDF 并将其转换为单独的页面。该脚本由在 nginx 下运行的 php 调用。
我正在使用pdfcrop,它调用pdfTex,这是失败点。
该脚本从命令行以 root 身份运行良好。但是,当由 nginx 运行时(通过 php 调用脚本),当 pdfcrop 调用 pdfTex 时它会失败。
这是故障点的行:
pdfcrop --ini --verbose --bbox "0 0 1000 600" --margins "-490 10 10 10" ${tempDir}$1 ${tempDir}right.pdf
我记录详细输出并获得以下信息:
nginx
PDFCROP 1.40, 2020/06/06 - Copyright (c) 2002-2020 by Heiko Oberdiek, Oberdiek Package Support Group.
* PDF header: %PDF-1.5
* Running ghostscript for BoundingBox calculation ...
GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 2.
Page 1
%%BoundingBox: 90 83 972 571
* Page 1: 0 0 1000 600
%%HiResBoundingBox: 90.674997 83.069997 971.999970 570.725983
Page 2
%%BoundingBox: 33 23 969 572
* Page 2: 0 0 1000 600
%%HiResBoundingBox: 33.731999 23.939999 968.147970 571.697983
* Running pdfTeX ...
第一行 'nginx' 是因为我记录 whoami 的结果以确认哪个用户正在运行脚本。请注意,脚本仅在 pdfTex 调用处停止。
同样,当从命令行以 root 身份运行时,该脚本可以正常工作。nginx 用户似乎无法使用 pdfTex。如果是这种情况,我该如何解决?
TIA
编辑:认为问题可能是权限,pdfTex 无法写入其临时文件,我将脚本运行的目录的所有者和组更改为 nginx。结果是一样的。
编辑 2:这是对我的脚本的 PHP 调用:
chdir($scriptDir);
$result = shell_exec('./friedensBulletin.sh' . ' ' . $bulletinName . ' ' . $bulletinName);
chdir($cwd);
$scriptDir 是我的脚本的位置。$cwd 设置为当前工作目录,然后在此处重置。
编辑 3:整个 bash 脚本
#!/bin/bash
#################################################
# takes a PDF, crops, exports as html #
# req. pdfcrop for cropping #
# req. poppler (pdftohtml) for file conversion #
# $1 input file #
# $2 output file #
# author: roger@rogercreasy.com #
# 01.09.2021 #
#################################################
tempDir="tmp/"
# handle pages 1 and 3
pdfcrop --ini --bbox "0 0 1000 600" --margins "-490 10 10 10" ${tempDir}$1 ${tempDir}right.pdf
pdfseparate ${tempDir}right.pdf ${tempDir}right%d.pdf
#handle pages 2 and 4
pdfcrop --ini --bbox "0 0 1000 600" --margins "10 10 -490 10" ${tempDir}$1 ${tempDir}left.pdf
pdfseparate ${tempDir}left.pdf ${tempDir}left%d.pdf
#recombine in the correct order
pdfunite ${tempDir}right1.pdf ${tempDir}left2.pdf ${tempDir}right2.pdf ${tempDir}left1.pdf ${tempDir}tmp.pdf
mv ${tempDir}tmp.pdf $2
# clean up uneeded files
rm ${tempDir}*.pdf