LINUX.ORG.RU

помогите с reportlab.pdfgen

 ,


1

2

пытаюсь напечатать отрывной календарь с ивритскими датами.

генерировать файл со страницей на каждый день получается.

не получается отображать ивритские буквы.

добавил ивритский фонт.

но выглядит так будто не использует настройки фонта , меняю в скрипте размер а в пдф не меняется

hebcal -H  5785  -8 -d -e -w -h -H >hcal.txt
from reportlab.pdfgen import canvas
from reportlab.pdfbase  import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont(TTFont('alef','/usr/share/fonts/truetype/alef/TTF/Alef-regular.ttf'))


f = open("hcal.txt", "r")
lines = f.readlines()
c = canvas.Canvas("out.pdf", pagesize=(200,100))
c.setFont('alef', 20)
for line in lines:
  c.drawString(5, 5, line.strip())
  c.rect(0, 0, 200, 100)
  c.showPage()
c.save()


Последнее исправление: bloodmeri (всего исправлений: 1)

о , спасибо , надо было фонт устонавливать для каждой страницы


```
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont(TTFont('alef','/usr/share/fonts/truetype/alef/TTF/Alef-regular.ttf'))


f = open(«hcal.txt», «r»)
lines = f.readlines()
c = canvas.Canvas(«out.pdf», pagesize=(200,100))
for line in lines:
c.setFont('alef', 20)
c.drawString(5, 5, line.strip())
c.rect(0, 0, 200, 100)
c.showPage()
c.save()

```

bloodmeri
() автор топика

Третья версия , делает пдф файл на календарный год.

Так вроде лучше



```
from dateutil.tz import datetime_exists
from fontTools.afmLib import readlines
from pyluach.dates import HebrewDate
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import datetime
from pyluach import dates , hebrewcal

def StrRevers(s):
return s[::-1]
def HebrewWeekName(w):
weeknames= «ראשון» , «שני» , «שלישי» , «רביעי» , «חמישי» , «שישי» , «שבת»
return weeknames[w]


today = datetime.datetime.today()
startdate = datetime.date(2024, 1, 1)
pdfmetrics.registerFont(TTFont('alef', '/usr/share/fonts/truetype/alef/TTF/Alef-regular.ttf'))
c = canvas.Canvas(«365.pdf», pagesize=(200, 100))
for DayInYear in range(0, 366, 1):
c.setFont('alef', 6)
c.drawString(2, 2, str(DayInYear + 1))
ThisDay = startdate + datetime.timedelta(days=DayInYear)
c.setFont('alef', 14)
c.drawRightString(195, 5, ThisDay.strftime('%A %d/%m/%Y'))
GD=dates.GregorianDate (ThisDay.year , ThisDay.month , ThisDay.day )
HD=GD.to_heb()
#SHD=HebrewDate( HD.year, HD.month, HD.day)
c.drawString(5, 20, StrRevers(HD.hebrew_date_string(True) ))
#c.drawString(5, 49, HebrewWeekName( int(SHD.weekday())))
c.rect(0, 0, 200, 100)
c.showPage()
c.save()

```

bloodmeri
() автор топика
Ответ на: комментарий от ei-grad

А если пдф надо? Wkhtml2pdf уже лет 8 как deprecated. Reportlab самый нормальный вариант. Сами поролись с этой задачей, вариантов мало

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)