Как связать два абзаца с другим форматом отступов (python docx)? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь построить ОДИН абзац в созданном слове docx (через python docx), которое выглядит так:

text       kjdfkjshfkjshfdkjhskjdhf
           kjdhfksdfkhsgfdghsf
           ksjdgfkjsgkjfgjsgf

Дело в том, что мне нужно убедиться, что этот абзац не будет разбит на части, если на текущей странице недостаточно места для печати всего этого на одной странице. Поэтому мне нужно связать три абзаца, чтобы достичь того, что я хочу (чтобы иметь возможность сделать отступ в первой строке абзаца в середине, что является обязательным; верхняя и нижняя строки просто строятся без отступа с подчеркиванием). Это, однако, не сработало, когда я просто построил три абзаца и установил .paragraph_format.keep_together, а также .paragrapgh_format.keep_with_next modules = True, для первых двух абзацев (для последнего только .paragraph_format.keep_together было set = True). Выполнение кода ниже (только соответствующая часть) работает отлично, дело в том, что верхняя и / или нижняя строки разделяются, если на странице недостаточно места для всего этого, а средняя часть даже не заполняется половину страницы (было бы достаточно места, чтобы поместить все на одну страницу, но она ломается). Это говорит мне, что мне не удалось связать три абзаца друг с другом. Помогите? (Я копирую из таблицы слов, и все содержимое копируется идеально, как я хочу; единственная проблема на самом деле в том, что мой абзац разбивается на части).

limitor = doc.add_paragraph()
limitor.add_run(separator)
limitor.paragraph_format.keep_together = True
limitor.paragraph_format.keep_with_next = True

ProdPar = doc.add_paragraph()
ProdPar.paragraph_format.keep_together = True
ProdPar.style.font.name = "Times New Roman"
ProdPar.paragraph_format.first_line_indent = Inches(-0.6496)
ProdPar.paragraph_format.left_indent = Inches(0.6496)
ProdPar.add_run(AmountNum + " " + Stücke).bold = True
ProdPar.add_run().add_tab()
table = source.tables[0]
amountofrows = 0
for xx in table.rows:
     amountofrows += 1
rownum = amountofrows - 1
for ab in range(rownum):
       for par in table.rows[ab].cells[1].paragraphs:
              for run in par.runs:
                     copied_run = ProdPar.add_run(run.text)
                     if ab == 0:
                            copied_run.bold=True
                     elif ab == 1:
                            copied_run.italic=True
                     elif ab == 2:
                            copied_run.underline = True
                     if run.text == Spezif:
                            copied_run.italic = True
                            copied_run.underline = True
               ProdPar.add_run("\n")
        ProdPar.add_run("\n")
...