使用 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" 作为您的可执行命令