Как сохранить PDF в базе данных MySQL без создания файла PDF в Python - PullRequest
0 голосов
/ 29 апреля 2020

Таким образом, в основном у меня есть данные 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 Ответ

1 голос
/ 01 мая 2020

После долгих исследований я получил правильный способ получения обновленных / обработанных закодированных данных, известных как поток.

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.

Спасибо

...