Я создаю парсер в python3 .7, который принимает xml файлы в качестве входных данных и создает файлы PDF в качестве выходных данных. Я использую reportlab 3.5, и все работает, кроме одной вещи. Текст, который я анализирую, использует определенный шрифт, который называется «Юникод». Шрифт используется правильно, за исключением того, что диакритические знаки (буквы, которые должны go над другой буквой, например «´», идут над «e», как этот é), сдвинуты вправо. Один пример здесь:
Я использую SimpleDocTemplate, и текст помещается в таблицу. Я немного упростил код:
pdfmetrics.registerFont(TTFont('Junicode', './fonts/Junicode.ttf'))
pdfmetrics.registerFont(TTFont('JunicodeBd', './fonts/Junicode-Bold.ttf'))
pdfmetrics.registerFont(TTFont('JunicodeBI', './fonts/Junicode-BoldItalic.ttf'))
pdfmetrics.registerFont(TTFont('JunicodeIt', './fonts/Junicode-Italic.ttf'))
document = SimpleDocTemplate("output_pdf/" + os.path.splitext(os.path.basename(imgfile))[0] + ".pdf",
pagesize=self.canvas_size,
rightMargin=Helpers.mm_to_pts(self.margin_right),
leftMargin=Helpers.mm_to_pts(self.margin_left),
topMargin=Helpers.mm_to_pts(self.margin_top),
bottomMargin=Helpers.mm_to_pts(self.margin_bottom))
frame = Frame(document.leftMargin, document.bottomMargin, document.width, document.height)
text_template = PageTemplate(id='textpage', frames=[frame], onPage=self.__draw_text_page)
document.addPageTemplates([text_template])
page_flow = [some_other_stuff , NextPageTemplate('textpage'), PageBreak()]
[... code to get line from xml]
table_data.append(['', line])
[...]
table_styles = [('ALIGN', (0, 0), (0, -1), 'RIGHT'),
('ALIGN', (2, 0), (2, -1), 'RIGHT'),
('SIZE', (0, 0), (-1, -1), self.font_size),
('FONT', (0, 0), (-1, -1), 'Junicode'),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ]
table = Table(table_data, rowHeights=self.table_row_height)
table.setStyle(TableStyle(table_styles))
page_flow.append(table)
document.build(page_flow)
Я пытаюсь получить диакритические знаки над буквами, например на изображении выше, я бы хотел, чтобы угол наклона ":" был на вершине y.
Кто-нибудь знает, откуда это исходит и есть ли решение для этого?
Спасибо, Павел