Поддержание форматирования импортированного текста с помощью mako и rst2pdf

Я создал шаблон, который отображает PDF-файлы из CSV-ввода. Однако, когда поля ввода csv содержат пользовательское форматирование с разрывами строки и отступами, это портит механизм форматирования rst2pdf. Есть ли способ последовательно работать с пользовательским вводом таким образом, чтобы не нарушать поток документов, но также поддерживать форматирование вводимого текста? Пример скрипта ниже:

from mako.template import Template
from rst2pdf.createpdf import RstToPdf

mytext = """This is the first line
Then there is a second
Then a third
   This one could be indented

I'd like it to maintain the formatting."""

template = """
My PDF Document
===============

It starts with a paragraph, but after this I'd like to insert `mytext`. 
It should keep the formatting intact, though I don't know what formatting to expect.

${mytext}

"""

mytemplate = Template(template)
pdf = RstToPdf()
pdf.createPdf(text=mytemplate.render(mytext=mytext),output='foo.pdf')

Я попытался добавить следующую функцию в шаблон, чтобы вставить | в начале каждой строки, но это тоже не работает.

<%!
def wrap(text):
    return text.replace("\\n", "\\n|")
%>

затем ${mytext} станет |${mytext | wrap}, Это выдает ошибку:

<string>:10: (WARNING/2) Inline substitution_reference start-string without end-string.

1 ответ

Решение

На самом деле оказывается, что я был на правильном пути, мне просто нужно было место между | и текст. Так работает следующий код:

from mako.template import Template
from rst2pdf.createpdf import RstToPdf

mytext = """This is the first line
Then there is a second
Then a third
    How about an indent?

I'd like it to maintain the formatting."""

template = """
<%!
def wrap(text):
    return text.replace("\\n", "\\n| ")
%>

My PDF Document
===============

It starts with a paragraph, but after this I'd like to insert `mytext`. 
It should keep the formatting intact.

| ${mytext | wrap}

"""

mytemplate = Template(template)
pdf = RstToPdf()
#print mytemplate.render(mytext=mytext)
pdf.createPdf(text=mytemplate.render(mytext=mytext),output='foo.pdf')
Другие вопросы по тегам