Python-docx динамически добавлять гиперссылки - PullRequest
0 голосов
/ 29 января 2019

Это мой первый запрос.Я юрист, и я пытаюсь найти надежный способ динамически вставлять гиперссылки в мои документы.

Я прочитал ответы на предыдущие посты, но не нашел способа решить мою проблему.

Это моя проблема:

  • У меня есть папка с документами для прикрепления, которая должна следовать определенному шаблону (например, 01_act.pdf; 02_contract.pdf; 03_invoice.pdf и т. Д .;
  • У меня есть документ, в котором я должен добавить к некоторому конкретному вхождению гиперссылку на нужный документ: (например, я должен прикрепить гиперссылку к 01_act.pdf к вхождению "doc. 1", гиперссылку на 02_contract.pdf, чтобыdoc.2 "и т. д .;

Я обнаружил программное обеспечение, которое было опубликовано в этом хранилище

Если я отмечу вхождения", док. 1"с полужирным шрифтом и подчеркнутым я увидел, что в документе создается новый прогон, и система, кажется, работает, но с некоторым странным поведением.

Например, если у меня 1 Меня зовутРобердо ( док.1 ), программа распознала прогон и правильно добавила гиперссылку (и это работает!), Но вывод довольно странный: 1 **** doc.1 Меня зовут Роберто (),

Это код, который повторяет все параграфы:

# scansione dell'atto e aggiunta degli hyperlinks
for p in atto.paragraphs:
    for run in p.runs:
        for link in linksArray:
            found_link = link.__eq__(run.text)
            if(found_link):
                hyperlink.add(p, run, found_link)

# informo che la scansione è completata
print('Scansione completata\n Salvataggio in corso..')

atto.save(path.join(pathDir,'new-atto.docx'))

, и это функция для добавления гиперссылки в прогон (которую я взял из других ответов):

import docx

def add(paragraph, run, url):
    runs = paragraph.runs
    for i in range(len(runs)):
        if runs[i].text == run.text:
            break

    # This gets access to the document.xml.rels file and gets a new relation id value
    part = paragraph.part
    r_id = part.relate_to(url, docx.opc.constants.RELATIONSHIP_TYPE.HYPERLINK, is_external=True)

    # Create the w:hyperlink tag and add needed values
    hyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')
    hyperlink.set(docx.oxml.shared.qn('r:id'), r_id, )
    hyperlink.append(run._r)
    paragraph._p.insert(i+1,hyperlink)

Заранее извиняюсь за любую ошибку, но я не профессиональный разработчик, просто юрист, который увлечен кодированием: -)

...