Экспорт TextField в Django - модель Python в PDF с использованием ReportLab - разрыв строки становится непечатными символами
У меня есть атрибут модели, который сохраняет пользовательский текстовый ввод HTML. Потому что, когда пользователь нажимает ввод в Textarea, отправленной форме, я написал небольшой код Javascript для автоматического ввода "\n", что приводит к разрыву строки.
Когда я пытаюсь экспортировать этот атрибут в PDF с помощью ReportLab, я получаю непечатаемые символы, которые выглядят как 2 черных прямоугольника. Когда я пытаюсь скопировать их в текстовую панель, он становится "n".
вот код из модели
class Package(models.Model):
content = models.TextField()
Вот JavaScript и HTML для конкретного поля:
<form action="" role="form" method="post">{% csrf_token %}
<textarea class="form-control" autofocus name="content">{{content}}</textarea>
<br/>
</form>
<script type="text/javascript">
$('textarea').keypress(function(event) {
if (event.which == 13) {
event.preventDefault();
var s = $(this).val();
$(this).val(s+"\n");
}
});
</script>
Это код Reportlab из views.py:
from reportlab.pdfgen import canvas
from reportlab.platypus import Spacer
from reportlab.lib.pagesizes import letter
def create(pdf):
packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
p_content = str(package.content)
textobject = can.beginText(0.5*inch, 4.75*inch)
for line in p_content:
textobject.textOut(line)
if line=="\n":
textobject.textLines(p_content)
can.save()
Пожалуйста помоги. Я не могу понять это.
Большое спасибо.
1 ответ
Я получил помощь извне, поэтому я просто опубликую ее здесь для всех, кто заинтересован.
Проблема в этой строке кодов:
for line in p_content:
textobject.textOut(line)
if line=="\n":
textobject.textLines(p_content)
can.save()
Смысл в том, что я ПЕЧАТАЮ, прежде чем проверю спасательный персонаж. Правильный код должен быть
for c in p_content:
if c == '\n':
textobject.textLine()
elif c == '\r':
pass # do nothing
else:
textobject.textOut(c)