在 Django 模板生成的 PDF 上自动扩展文本区域
Auto-Expanding TextAreas on PDF Generated from Django Template
我正在使用 pdfkit 生成 Django 模板的 PDF(通过从 Django 的 get_template
和 render
函数获取页面的 HTML 字符串并将其传递字符串到 pdfkit...参见 ).
在这个页面上,我有一些可以包含多行文本的 TextArea,默认情况下,它们会在生成 PDF 时被截断。
我试图通过使用一些 javascript 库(我尝试了几个)在页面加载时自动扩展 TextAreas 来解决这个问题。我可以让它们在普通页面上完美工作,但是当我尝试将它包含在 PDF 模板中时,我会遇到各种错误,从根本无法工作到过度扩展 TextArea。我的第一个假设是存在一些样式差异导致了问题,但我相当肯定我已经排除了这种可能性。我尝试将 PDF 模板直接作为视图加载,并且 TextArea 的大小调整正确,这让我相信 pdfkits 生成的某些东西在调整大小时效果不佳。
鉴于此,我试图查看 pdfkit 是否对此类问题有任何建议但找不到任何建议,并且我还尝试使用 TextAreas 以外的其他输入类型,none 其中能够正确显示换行符。
目前我想不出任何其他可能的解决方案,我愿意接受建议。如果您认为我应该提供更多信息,请告诉我,在此先感谢您。
我最终找到了一个相对简单的修复方法。因为我使用的是 django 表单,所以我可以很容易地从显示表单 Textarea:
进行更改
{{ form.paragraph_data }}
只显示纯文本:
{{ form.paragraph_data.initial }}
但是,这最初导致换行符无法正确显示,因为 HTML 没有在纯字符串中处理它们。所以我在创建表单时添加了一些处理,用 <br />
s:
替换换行符
form.fields['paragraph_data'].initial = form.fields['paragraph_data'].initial.replace('\n', '<br />')
最后,我不得不将 safe
过滤器添加到 Django 模板行以告诉它实际呈现 HTML 而不是清理它:
{{ form.paragraph_data.initial|safe }}
同样,由于 Django 表单,这在一定程度上很容易,但它应该相对容易地转换为更标准的 javascript/html 解决方案。
我正在使用 pdfkit 生成 Django 模板的 PDF(通过从 Django 的 get_template
和 render
函数获取页面的 HTML 字符串并将其传递字符串到 pdfkit...参见
在这个页面上,我有一些可以包含多行文本的 TextArea,默认情况下,它们会在生成 PDF 时被截断。
我试图通过使用一些 javascript 库(我尝试了几个)在页面加载时自动扩展 TextAreas 来解决这个问题。我可以让它们在普通页面上完美工作,但是当我尝试将它包含在 PDF 模板中时,我会遇到各种错误,从根本无法工作到过度扩展 TextArea。我的第一个假设是存在一些样式差异导致了问题,但我相当肯定我已经排除了这种可能性。我尝试将 PDF 模板直接作为视图加载,并且 TextArea 的大小调整正确,这让我相信 pdfkits 生成的某些东西在调整大小时效果不佳。
鉴于此,我试图查看 pdfkit 是否对此类问题有任何建议但找不到任何建议,并且我还尝试使用 TextAreas 以外的其他输入类型,none 其中能够正确显示换行符。
目前我想不出任何其他可能的解决方案,我愿意接受建议。如果您认为我应该提供更多信息,请告诉我,在此先感谢您。
我最终找到了一个相对简单的修复方法。因为我使用的是 django 表单,所以我可以很容易地从显示表单 Textarea:
进行更改{{ form.paragraph_data }}
只显示纯文本:
{{ form.paragraph_data.initial }}
但是,这最初导致换行符无法正确显示,因为 HTML 没有在纯字符串中处理它们。所以我在创建表单时添加了一些处理,用 <br />
s:
form.fields['paragraph_data'].initial = form.fields['paragraph_data'].initial.replace('\n', '<br />')
最后,我不得不将 safe
过滤器添加到 Django 模板行以告诉它实际呈现 HTML 而不是清理它:
{{ form.paragraph_data.initial|safe }}
同样,由于 Django 表单,这在一定程度上很容易,但它应该相对容易地转换为更标准的 javascript/html 解决方案。