Как сохранить PDF в базе данных MySQL без создания файла PDF в Python
Итак, в основном у меня есть данные PDF в кодировке base64 в базе данных MySQL, и я хочу манипулировать этими данными (обновлять поля формы данных файла PDF), после этого без создания / записи файла PDF, я хочу сохранить эти обработанные / обновленные данные в База данных. Код Python, как показано ниже.
Здесь я использую PyPDF2, и код работает
import base64, io, PyPDF2
try:
data_dict = '{"firstName": "John", "lastName": "Joe"}'
encodedDataOfPDF = base64.b64decode(data) #base64 encoded data of pdf from database
file = io.BytesIO(encodedDataOfPDF)
pdfReader = PyPDF2.PdfFileReader(file)
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.appendPagesFromReader(pdfReader)
#Here form fields of PDF gets updated.
pdfWriter.updatePageFormFieldValues(pdfWriter.getPage(0), data_dict)
#If I uncomment below code then it will create a PDF file with updated data.
#But I Don't want a PDF File,
#I just need the base64 encoded data of that updated/manipulated file which I will store in the Database.
# with open(data[1], 'wb') as f:
# pdfWriter.write(f)
except Exception as e:
app.logger.info(str(e))
Примечание. Также прочтите комментарии в коде.
Заранее спасибо.
1 ответ
Решение
После долгих исследований я наконец получил правильный способ получить обновленные / обработанные закодированные данные, известные как поток.
import base64, io, PyPDF2
try:
tempMemory = io.BytesIO() #Added BytesIO
data_dict = '{"firstName": "John", "lastName": "Joe"}'
encodedDataOfPDF = base64.b64decode(data) #base64 encoded data of pdf from database
file = io.BytesIO(encodedDataOfPDF)
pdfReader = PyPDF2.PdfFileReader(file)
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.appendPagesFromReader(pdfReader)
#Here form fields of PDF gets updated.
pdfWriter.updatePageFormFieldValues(pdfWriter.getPage(0), data_dict)
pdfWriter.write(tempMemory)
newFileData = tempMemory.getvalue()
newEncodedPDF= base64.b64encode(newFileData) # Here I get what I want.
except Exception as e:
app.logger.info(str(e))
Я получил данные в кодировке base64 без создания файла PDF.
Спасибо