Поддержание форматирования импортированного текста с помощью 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')