Иметь хороший, проверенный фрагмент кода PyPDF2 на Python .py, предназначенного для работы с «настоящими» файлами ОС. Отладив все это, я сейчас пытаюсь включить его в функцию plPython, заменив файлы на io.BytesIO () - или любой другой механизм, который будет наилучшим кандидатом для бесшовной вставки ...
Файл для чтения / записи теперь будет в столбцах PostgreSQL. Документы «in» были записаны с использованием функций копирования PG - количество байтов соответствует размеру диска; пока все хорошо.
Исходный код ожидаемых файлов:
# infile = "myInputPdf.pdf"
# outfile = "myOutputPdf.pdf"
# inputStream = open(infile, "rb") # designed to open OS-based file
# --- Instead: 'document_in' loaded from PG bytea col:
inputStream = io.BytesIO(document_in)
# ---
pdf_reader = PdfFileReader(inputStream, strict=False)
# (lots of code in here, seems? to be working)
outputStream = io.BytesIO() # trying it the python3 way!
pdf_writer.write(outputStream)
(я предположил, что объекты должны рассматриваться как объекты байтов)
Наконец:
plan3 = plpy.prepare("UPDATE documents SET document_out=$2 WHERE name=$1", ["varchar"]["varchar"])
ERROR: TypeError: list indices must be integers, not str
(PostgreSQL 11.1, если это имеет значение)
делали подобные вещи в прошлом, используя техники mkstemp; сейчас пытаюсь вырасти в мир байтов!