Python 调用的 PFTK 命令无法正常工作

PFTK command called by Python does not work properly

我的目标是从网站中提取多个 PDF 页面,使它们在自己的查看器中可用,然后将它们合并为一个 PDF 文件,同时保持原始顺序。因此,我使用 tempfile 库将每个提取的页面保存到一个临时目录:

def save_publication_page_to_tempfile(
    publication_page,
    page_number,
    directory
):
    temp_pdf = tempfile.NamedTemporaryFile(
        prefix=f'{page_number}_',
        suffix='.pdf',
        dir=directory,
        delete=False
    )
    temp_pdf.write(publication_page)

    return temp_pdf.name

保存每个提取的页面后,使用 pdftk 工具合并文件:

def merge_pdf_files(self, publication_metadata, output_filename):
        with tempfile.TemporaryDirectory() as temp_dir:
            for publication in publication_metadata:
                save_publication_page_to_tempfile(
                    publication['content'],
                    publication['page_number'],
                    temp_dir
                )

            command = (
                f"pdftk $(ls {temp_dir}/* | sort -n -t _ -k 1) "
                f"cat output {os.path.join('/tmp', output_filename)}"
            )
            os.system(command)

        if os.path.exists(os.path.join('/tmp', output_filename)):
            return os.path.join('/tmp', output_filename)
        else:
            return None

但是,完成的合并没有按照预期的顺序进行。我注意到,当我在转换命令之前用 pdb.set_trace () 停止执行,然后直接在使用的目录中执行相同的命令时,生成的 PDF 遵循所需的顺序:

pdftk $(ls * | sort -n -t _ -k 1) cat output result.pdf

最后,我想知道在 PDF 文件所在的临时目录中比较 Python 脚本执行和 BASH 命令执行时生成的 PDF 顺序不同的一些可能原因。

save_publications_to_tempfile 的以下更改解决了我的问题:

def save_publication_page_to_tempfile(
    publication_page,
    page_number,
    directory
):
    formatted_page_number = str(page_number).zfill(6)
    temp_pdf = tempfile.NamedTemporaryFile(
        prefix=f'{formatted_page_number}_',
        suffix='.pdf',
        dir=directory,
        delete=False
    )
    temp_pdf.write(publication_page)

    return temp_pdf.name