使用 Python UNC 路径列表在 Ghostscript 中合并 PDF
Merge PDFs in Ghostscript with Python list of UNC Paths
我正在尝试通过组合来自 UNC 文件路径的单页 PDF 列表(在 Python 3.7 中工作),使用 Ghostscript 构建多页 PDF。
这是函数:
import subprocess
import os
def ghostscript_merge_pdfs(in_PDF_list, out_PDF):
"""some doc string"""
# pdfPathsAsStr = '"' + ' "'.join(f'{pdf}"' for pdf in in_PDF_list)
pdfPathsAsStr = ' '.join(pdf for pdf in in_PDF_list)
print("The 'pdfPathsAsStr' variable is:")
print(pdfPathsAsStr + "\n")
args = [r"\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Install\gs9.54.0\bin\gswin64c",
'-sDEVICE=pdfwrite',
'-dNOPAUSE',
"-sOUTPUTFILE=" + out_PDF,
pdfPathsAsStr
]
p = subprocess.Popen(args, stdout=subprocess.PIPE)
print("\nCompleted: \n" + str(p.communicate()))
pdf_dir = r"\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages"
out_pdf_path = os.path.join(pdf_dir, "Combo_PDF.pdf")
pdfs_list = [os.path.join(pdf_dir, "PDF_1.pdf"), os.path.join(pdf_dir, "PDF_2.pdf")]
ghostscript_merge_pdfs(pdfs_list, out_pdf_path)
脚本输出如下(注意 pdfPathsAsStr
中的斜杠不是四重的):
The 'pdfPathsAsStr' variable is:
\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages\PDF_1.pdf \someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages\PDF_2.pdf
Completed:
(b'GPL Ghostscript 9.54.0 (2021-03-30)\nCopyright (C) 2021 Artifex Software, Inc. All rights reserved.\nThis software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:\nsee the file COPYING for details.\nError: /undefinedfilename in (\\\\someDir\\subDir\\T\\Tools\\Ghostscript_Tools\\GS_Testing\\IndividualPages\\PDF_1.pdf \\\\someDir\\subDir\\T\\Tools\\Ghostscript_Tools\\GS_Testing\\IndividualPages\\PDF_2.pdf)\nOperand stack:\n\nExecution stack:\n %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push\nDictionary stack:\n --dict:732/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)--\nCurrent allocation mode is local\nLast OS error: No such file or directory\n', None)
GPL Ghostscript 9.54.0: Unrecoverable error, exit code 1
我已经在几个地方寻找有关 Ghostscript 中 UNC 路径的帮助,但找不到太多帮助。我在函数内部尝试了 pdfPathsAsStr
的一些变体,但没有成功。
我做错了什么?
下面的命令在python之外运行对我来说没问题。
gswin64c -sDEVICE=pdfwrite -o"\advent\share\Merged.pdf" "\advent\share\cover.pdf" "\advent\share\PDF files in a folder.pdf"
显示远程 windows 文件夹对于 Ghostscript 输入或输出不是问题。
您的问题是 python 处理 windows 路径的方式,可以通过反转文件夹名称来最小化问题,这样只有服务器名称需要 windows 中的 \\prefix .
gswin64c -sDEVICE=pdfwrite -o"\advent/share/Merged.pdf" "\advent/share/cover.pdf" "\advent/share/PDF files in a folder.pdf"
所以在 python 中,需要时使用 \\
作为服务器前缀,但在路径中使用 / 使生活更轻松(是的,我知道这不是最佳实践,但生命是短暂的,它的 rsi 更少键盘)。
测试 cmd 从 python 获取的内容只是 运行 cmd /k echo "\\blah/blah"
作为您的可执行命令
我正在尝试通过组合来自 UNC 文件路径的单页 PDF 列表(在 Python 3.7 中工作),使用 Ghostscript 构建多页 PDF。 这是函数:
import subprocess
import os
def ghostscript_merge_pdfs(in_PDF_list, out_PDF):
"""some doc string"""
# pdfPathsAsStr = '"' + ' "'.join(f'{pdf}"' for pdf in in_PDF_list)
pdfPathsAsStr = ' '.join(pdf for pdf in in_PDF_list)
print("The 'pdfPathsAsStr' variable is:")
print(pdfPathsAsStr + "\n")
args = [r"\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Install\gs9.54.0\bin\gswin64c",
'-sDEVICE=pdfwrite',
'-dNOPAUSE',
"-sOUTPUTFILE=" + out_PDF,
pdfPathsAsStr
]
p = subprocess.Popen(args, stdout=subprocess.PIPE)
print("\nCompleted: \n" + str(p.communicate()))
pdf_dir = r"\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages"
out_pdf_path = os.path.join(pdf_dir, "Combo_PDF.pdf")
pdfs_list = [os.path.join(pdf_dir, "PDF_1.pdf"), os.path.join(pdf_dir, "PDF_2.pdf")]
ghostscript_merge_pdfs(pdfs_list, out_pdf_path)
脚本输出如下(注意 pdfPathsAsStr
中的斜杠不是四重的):
The 'pdfPathsAsStr' variable is:
\someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages\PDF_1.pdf \someDir\subDir\T\Tools\Ghostscript_Tools\GS_Testing\IndividualPages\PDF_2.pdf
Completed:
(b'GPL Ghostscript 9.54.0 (2021-03-30)\nCopyright (C) 2021 Artifex Software, Inc. All rights reserved.\nThis software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:\nsee the file COPYING for details.\nError: /undefinedfilename in (\\\\someDir\\subDir\\T\\Tools\\Ghostscript_Tools\\GS_Testing\\IndividualPages\\PDF_1.pdf \\\\someDir\\subDir\\T\\Tools\\Ghostscript_Tools\\GS_Testing\\IndividualPages\\PDF_2.pdf)\nOperand stack:\n\nExecution stack:\n %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push\nDictionary stack:\n --dict:732/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)--\nCurrent allocation mode is local\nLast OS error: No such file or directory\n', None)
GPL Ghostscript 9.54.0: Unrecoverable error, exit code 1
我已经在几个地方寻找有关 Ghostscript 中 UNC 路径的帮助,但找不到太多帮助。我在函数内部尝试了 pdfPathsAsStr
的一些变体,但没有成功。
我做错了什么?
下面的命令在python之外运行对我来说没问题。
gswin64c -sDEVICE=pdfwrite -o"\advent\share\Merged.pdf" "\advent\share\cover.pdf" "\advent\share\PDF files in a folder.pdf"
显示远程 windows 文件夹对于 Ghostscript 输入或输出不是问题。
您的问题是 python 处理 windows 路径的方式,可以通过反转文件夹名称来最小化问题,这样只有服务器名称需要 windows 中的 \\prefix .
gswin64c -sDEVICE=pdfwrite -o"\advent/share/Merged.pdf" "\advent/share/cover.pdf" "\advent/share/PDF files in a folder.pdf"
所以在 python 中,需要时使用 \\
作为服务器前缀,但在路径中使用 / 使生活更轻松(是的,我知道这不是最佳实践,但生命是短暂的,它的 rsi 更少键盘)。
测试 cmd 从 python 获取的内容只是 运行 cmd /k echo "\\blah/blah"
作为您的可执行命令