copy Bahij-Nazanin-Regular.ttf into
/usr/local/lib/python3.4/dist-packages/reportlab/fonts folder
1.将字体和样式添加到reportlab:
from reportlab.lib.enums import TA_RIGHT
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('Persian', 'Bahij-Nazanin-Regular.ttf'))
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='Right', alignment=TA_RIGHT, fontName='Persian', fontSize=10))
在下一步中,我们需要重塑波斯语文本字母到正确的形状,并使每个单词的方向从右到左:
from bidi.algorithm import get_display
from rtl import reshaper
import textwrap
def get_farsi_text(text):
if reshaper.has_arabic_letters(text):
words = text.split()
reshaped_words = []
for word in words:
if reshaper.has_arabic_letters(word):
# for reshaping and concating words
reshaped_text = reshaper.reshape(word)
# for right to left
bidi_text = get_display(reshaped_text)
reshaped_words.append(bidi_text)
else:
reshaped_words.append(word)
reshaped_words.reverse()
return ' '.join(reshaped_words)
return text
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
doc = SimpleDocTemplate("farsi_wrap.pdf", pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72,
bottomMargin=18)
Story = []
text = 'شاید هنوز اندروید نوقا برای تمام گوشیهای اندرویدی عرضه نشده باشد، ولی اگر صاحب یکی از گوشیهای نکسوس یا پیک' \
'سل باشید احتمالا تا الان زمان نسبتا زیادی را با آخرین نسخهی اندروید سپری کردهاید. اگر در کار با اندروید نوقا' \
' دچار مشکل شدهاید، با دیجیکالا مگ همراه باشید تا با هم برخی از رایجترین مشکلات گزارش شده و راه حل آنها را' \
' بررسی کنیم. البته از بسیاری از این روشها در سایر نسخههای اندروید هم میتوانید استفاده کنید. اندروید برخلاف iOS ' \
'روی گسترهی وسیعی از گوشیها با پوستهها و اپلیکیشنهای اضافی متنوع نصب میشود. بنابراین تجویز یک نسخهی مشترک برا' \
'ی حل مشکلات آن کار چندان سادهای نیست. با این حال برخی روشهای عمومی وجود دارد که بهتر است پیش از هر چیز آنها را' \
' بیازمایید.'
tw = get_farsi_bulleted_text(text, wrap_length=120)
p = Paragraph(tw, styles['Right'])
Story.append(p)
doc.build(Story)
4条答案
按热度按时间oug3syen1#
我使用reportlab创建PDF,但不幸的是reportlab不支持阿拉伯语和波斯语字母表,所以我使用Vahid Mardani的'rtl'库和Meir Kriheli的'pybidi'库来使文本在PDF结果中看起来正确。
首先,我们需要在reportlab中添加一个支持波斯语的字体:
1.在Ubuntu 14.04中:
1.将字体和样式添加到reportlab:
在下一步中,我们需要重塑波斯语文本字母到正确的形状,并使每个单词的方向从右到左:
而添加项目符号或 Package 文本,我们可以使用以下函数:
为了测试我们可以写的代码:
vnzz0bqm2#
在使用Reportlab工作了一段时间后,我们在组织和格式化它方面遇到了一些问题。这花费了很多时间并且有点复杂。所以我们决定使用pdfkit和jinja2。这样我们就可以用html和CSS来格式化和组织,并且我们不需要重新格式化波斯语文本。
首先,我们可以设计一个HTML模板文件,如下所示:
然后我们使用jinja2库将我们的数据渲染到Template中,然后使用pdfkit从渲染结果中创建一个pdf:
xmq68pz93#
如果有人想使用
Django
从html模板生成pdf,这是如何做到的:nr9pn0ug4#
将多字节(波斯语,阿拉伯语)字符串作为参数发送到下面的typescript函数,并将返回的字符串放入pdfMaker或任何其他PDF生成器