Экспорт 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)
Другие вопросы по тегам