Поля формы, заполненные Python, не отображаются в панели предварительного просмотра Проводника - PullRequest
0 голосов
/ 09 апреля 2020

Я создал FormFields для PDF в Foxit PDF.

Я написал программу на Python, чтобы заполнить эти поля FormFields. Я объединяю этот PDF (который я заполнил Python) с помощью другие таблицы с моим кодом (pdf2merge). Весь этот PDF-файл является временным файлом («TIJDELIJKE_TF_FILE.pdf»), когда это делается, я делаю копию этого файла и сохраняю его в указанном c месте (userpdflocation_compleet). После этого я удаляю временный файл.

Когда все это завершено, появляется странная вещь. Когда я устанавливаю панель предварительного просмотра в проводнике, я вижу, что текстовые поля пусты.

Когда я открываю документ, текстовые поля заполняются. Это ссылки на скриншоты: Панель предварительного просмотра в проводнике Когда я открываю документ PDF

Это отображается для временного файла и завершенного файла.

Так что теперь мне нужно, чтобы каждый документ выполнял «Microsoft print to PDF», потому что в противном случае люди думают, что PDF не завершен. Когда я загружаю весь этот документ на платформу, например, в облако. Панель предварительного просмотра в этом облаке почти такая же, как моя панель предварительного просмотра в проводнике файлов, пустая ....

while uitvoering >= 1:

    print("Workbook wordt geladen")
    wb=load_workbook(filepath,data_only = True)
    print("Workbook is geladen")
    sheet=wb.active
    infile = sheet["V4"].value

    rij=sheet["O5"].value
    print("rij is:")
    print(rij)
    einderij=sheet["Q5"].value
    print("einde rij is:")
    print(einderij)
    Aantaltekstvelden = sheet["S7"].value
    if sheet["S7"].value == None :
        Aantaltekstvelden = input('Hoeveel tekstvelden zijn er? ')
    else:
        print("tekstvelden zijn uitgelezen")
        print(Aantaltekstvelden)
    Firstrun=1
    int(Aantaltekstvelden)
    Aantaltekstvelden = Aantaltekstvelden + 12
    print(Aantaltekstvelden)

    while rij<=einderij:
        if sheet.cell(row=rij,column=1).value == "Frontpage":
            print("er staat frontpage")
            outfile = sheet.cell(row=rij,column=47).value
            def set_need_appearances_writer(writer):
                # See 12.7.2 and 7.7.2 for more information:
                # http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
                try:
                    catalog = writer._root_object
                    # get the AcroForm tree and add "/NeedAppearances attribute
                    if "/AcroForm" not in catalog:
                        writer._root_object.update({
                            NameObject("/AcroForm"): IndirectObject(len(writer._objects), 0, writer)})

                    need_appearances = NameObject("/NeedAppearances")
                    writer._root_object["/AcroForm"][need_appearances] = BooleanObject(True)
                    return writer

                except Exception as e:
                    print('set_need_appearances_writer() catch : ', repr(e))
                    return writer

            inputStream = open(infile, "rb")
            pdf_reader = PdfFileReader(inputStream, strict=False)
            if "/AcroForm" in pdf_reader.trailer["/Root"]:
                pdf_reader.trailer["/Root"]["/AcroForm"].update(
                    {NameObject("/NeedAppearances"): BooleanObject(True)})

            pdf_writer = PdfFileWriter()
            set_need_appearances_writer(pdf_writer)
            if "/AcroForm" in pdf_writer._root_object:
                pdf_writer._root_object["/AcroForm"].update(
                    {NameObject("/NeedAppearances"): BooleanObject(True)})

            field_dictionary = {}
            i = 12

            print("O5 is uitgelezen")
            while i<Aantaltekstvelden:
                name = sheet.cell(row=10, column=i).value
                print(name)
                waarde = sheet.cell(row=rij, column=i).value
                print(waarde)
                field_dictionary[name]=waarde
                i=i+1

            print("gedaan met field_dictionary")

            pdf_writer.addPage(pdf_reader.getPage(0))
            pdf_writer.updatePageFormFieldValues(pdf_writer.getPage(0), field_dictionary)

            outputStream = open(outfile, "wb")
            pdf_writer.write(outputStream)

            inputStream.close()
            outputStream.close()
        else:
            print("geen frontpage")

Извините за мой плохой английский sh.

...