Я использую небольшой модуль python, который я нашел на github для редактирования данных из PDF-файлов: https://github.com/JoshData/pdf-redactor
Он работает очень хорошо, единственная проблема заключается в том, что он наиболее вызывается из командной строки для перенаправления ввода / вывода, например, вот как вы бы назвали его в файле:
python example.py < in.pdf > in-redacted.pdf
Я ищу способы изменить его так, чтобы файлы ввода / вывода были просто строковые переменные / переменные пути внутри самого скрипта, так что будет легко обернуть GUI вокруг него, так как сейчас с перенаправлением я не уверен, как заставить GUI подавать параметры.
Я запутался, так как при запуске print(sys.argv)
он показывает только входной файл, то есть перенаправление удаляет аргументы как позиционные параметры.
Когда я смотрю на библиотеку python, которую я использую, она очень жестко запрограммирована для перенаправления stdin / out, поэтому я думаю, что было бы более трудным вариантом переписать это:
# This is the function that performs redaction.
if sys.version_info < (3,):
if options.input_stream is None:
options.input_stream = sys.stdin # input stream containing the PDF to redact
if options.output_stream is None:
options.output_stream = sys.stdout # output stream to write the new, redacted PDF to
else:
if options.input_stream is None:
options.input_stream = sys.stdin.buffer # input byte stream containing the PDF to redact
if options.output_stream is None:
options.output_stream = sys.stdout.buffer # output byte stream to write the new, redacted PDF to
from pdfrw import PdfReader, PdfWriter
# Read the PDF.
document = PdfReader(options.input_stream)
# Modify its Document Information Dictionary metadata.
update_metadata(document, options)
# Modify its XMP metadata.
update_xmp_metadata(document, options)
if options.content_filters:
# Build up the complete text stream of the PDF content.
text_layer = build_text_layer(document, options)
# Apply filters to the text stream.
update_text_layer(options, *text_layer)
# Replace page content streams with updated tokens.
apply_updated_text(document, *text_layer)
# Update annotations.
update_annotations(document, options)
# Write the PDF back out.
writer = PdfWriter()
writer.trailer = document
writer.write(options.output_stream)
Так что любые идеи приветствуются.