2016-08-15 3 views
1

Пару дней назад я начал использовать ReportLab с Python34. Это довольно хороший пакет, но у меня есть одна большая проблема, и я не знаю, как ее преодолеть.Отсутствует буква č в ReportLab pdf, созданная с помощью Python 3.4

Может ли кто-нибудь проверить мой код и помочь мне преодолеть это? Проблема связана с буквой č на словенском языке. В названии нет проблем, но позже в pdf-файле я не вижу эту букву.

Мой код ниже:

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.rl_config import defaultPageSize 
from reportlab.lib.units import inch 

from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfgen import canvas 
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('Vera', 'Vera.ttf')) 

PAGE_HEIGHT=defaultPageSize[1] 
PAGE_WIDTH=defaultPageSize[0] 
styles = getSampleStyleSheet() 

Title = "Izračun pokojnine" 
bogustext =("""ččččččččččččččččččč""") 

def myPage(canvas, doc): 
    canvas.saveState() 
    canvas.setFont('Vera',16) 
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title) 
    canvas.restoreState() 

def go(): 
    doc = SimpleDocTemplate("phello.pdf") 
    Story = [Spacer(1,2*inch)] 
    style = styles["Normal"] 
    p = Paragraph(bogustext, style) 
    Story.append(p) 
    Story.append(Spacer(1,0.2*inch)) 
    doc.build(Story, onFirstPage=myPage) 

go() 

Когда я сделать PDF-файл я получаю это: enter image description here

Почему существует разница между буквой С в названии и тексте?

Заранее благодарен!

С наилучшими пожеланиями, Дэвид

+0

python 2.x или 3.x? –

+0

@joel goldstick: Python 3.4 – DavidV

ответ

1

Проблема заключается в том, что в названии используется Vera как шрифт в тексте используется шрифт, используемый по умолчанию ReportLab, который Times-Roman (если я правильно помню).

Черные боксы, которые вы видите, показывают, что текущий шрифт (Times-Roman) не имеет символа для символа, который вы пытаетесь отобразить. Поэтому, чтобы исправить это, вам придется изменить шрифт текста на шрифт, который содержит символ для č. Один из способов сделать это путем создания нового стиля, как это:

ParagraphStyle('MyNormal', 
       parent=styles['Normal'], 
       fontName='Vera') 

В некоторых случаях это может быть проще заменить недостающие символы с символом образуют резервный шрифт в этом случае вы можете захотеть, чтобы проверить this answer I posted earlier this year.

+1

Большое спасибо @ B8vrede :) Это работает как шарм. Прежде чем прочитать свой ответ, я почти добрался до одного и того же решения ... но я должен признать, что ты мне очень помог :) Еще раз спасибо! – DavidV