2

我有一个模型属性可以保存用户的 HTML Textarea 输入。因为当用户在 Textarea 中敲回车时,表单提交时,我编写了一个小的 Javascript 代码来自动输入“\n”,呈现换行符。

当我尝试使用 ReportLab 将此属性导出为 PDF 时,我收到了看起来像 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>

这是 view.py 中的 Reportlab 代码:

     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()

请帮忙。我似乎无法弄清楚这一点。

非常感谢。

4

1 回答 1

0

我收到了外界的帮助,所以我会在这里发布给任何有兴趣的人。

问题是这行代码:

      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)
于 2014-09-07T19:25:57.740 回答