В: Как развернуть пустую строку в формате PDF? - PullRequest
0 голосов
/ 26 апреля 2020

Есть ли способ, которым я могу редактировать содержимое в pdf и расширять пустой текст в соответствии с длиной содержимого?

Кажется, что pypdf2 может объединить только два pdf вместо изменения исходного.

Itext может редактировать pdf на основе атрибута «текстовая зона», но я могу просто использовать положение пустого текста в pdf и объединить текст напрямую.

Кто-нибудь может мне помочь? Большое спасибо.


Обновление 4.27 Мой код:

def createmark(marks):
    width = letter[0]
    height = letter[1]
    markpdf = "mark.pdf"
    c = canvas.Canvas(markpdf, pagesize=letter)
    c.translate(0, height)
    #reportlab.pdfbase.pdfmetrics.registerFont(reportlab.pdfbase.ttfonts.TTFont('guofu', os.path.join(DataDir, 'font.ttf')))
    for mark in marks:
        text = str(mark["text"])
        bounding = mark["boundingBoxes"][0]
        leftx = bounding[0] * width
        leftupy = bounding[1] * height
        leftdowny = bounding[-1] * height
        gap = leftdowny - leftupy
        fontsize = random.uniform(gap / 3, gap / 2)
        #c.setFont('guofu', fontsize)
        position = random.uniform(leftupy, leftdowny + gap / 4) 
        #c.drawString(leftx, -leftdowny + gap / 2, text)
        c.drawString(leftx, -position, text)
        c.setFillAlpha(1)
    c.save()


def genpdf(inpdf, markpdf, outpdf):
    pdf_output = PdfFileWriter()
    input_stream = open(inpdf, 'rb')
    pdf_input = PdfFileReader(input_stream, strict=False)
    pdf_watermark = PdfFileReader(open(markpdf, 'rb'), strict=False)
    page = pdf_input.getPage(0)
    page.mergePage(pdf_watermark.getPage(0))
    page.compressContentStreams()  
    pdf_output.addPage(page)
    pdf_output.write(open(outpdf, 'wb'))

Если я хочу использовать «pypdf2» для добавления текста в PDF, я должен создать « mark.pdf ", который содержит текст, который я хочу добавить первым. А затем я объединяю два файла PDF в один.

В некоторых формах , мы должны заполнить пробел, например, имя, возраст и т. Д. c. Но если я просто объединю «mark.pdf» с формой, я не смогу изменить вид пробела, что означает, что если имя слишком длинное, текст будет пустым из имени.

Я попытался использовать Itext в java, который может обеспечить эту функцию. Но это требует, чтобы текстовый бланк имел атрибут «текстовая зона» при генерации PDF. И форма pdf (предоставляемая клиентами), которую я использую, может не иметь этого атрибута.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...