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
我的目标是从网站中提取多个 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