Текст внутри ячейки таблицы неправильно выровнен

Я использую xhtml2pdf (бывшая pisa , или это наоборот? :)) для создания PDF-файла из шаблона django. Шаблон визуализируется нормально, но PDF, который я получаю из этого шаблона, поврежден очень странным образом: текст в ячейках таблицы поднимается до верхней части ячейки, поэтому заглавные буквы касаются верхней границы ячейки:

введите описание изображения здесь

Хотя в браузере это выглядит так:

введите описание изображения здесь

Я пробовал:

  1. Применение vertical-align – похоже, что оно просто игнорируется, по крайней мере, я не заметил никаких изменений в pdf, даже если они были в сгенерированном html
  2. Применение padding-top – перемещает текст вниз, но увеличивает также высоту ячейки.
  3. Обтекание текста в span с margin-top – тот же эффект, что и padding-top

Я думаю, причина в том, что текст отображается xhtml2pdf на самой верхней части строки, в то время как браузеры, как правило, делают его где-то посередине блока. Другими словами, текстовый блок занимает ту же позицию как в pdf, так и в html, но текст внутри блока смещается. Но это только мои предположения.

Итак, кто-нибудь столкнулся с той же проблемой? Я делаю что-то неправильно? Возможны ли какие-либо обходные пути?

Кусочки кода:

  • Rendered html: http://pastebin.com/4jMCLrA4
  • CSS: http://pastebin.com/vAn8HXkY
  • Код, который генерирует PDF: http://pastebin.com/6wBULrhx

Спасибо за пример J0HN – красиво сделано. Пока не так много примеров weasyprint, плавающих вокруг сети.

Я обнаружил, что выравнивание по вертикали не срабатывало, когда я применял высоту к строке или ячейке таблицы. Я понял, что если я создал пустую ячейку в строке, назначил ей ширину 0 и желаемую высоту, то другие ячейки в этой строке я мог бы применить выравнивание по вертикали, и они будут отображаться правильно.

Вот пример (создание страницы с размером карты с 1 текстовым блоком, расположенным по горизонтали и вертикали на странице):

 doc_css = CSS(string='''@page { size: 3.75in 2.75in; margin: .25in } html, body {margin: 0; padding: 0; width: 100%; height: 100%; }''') doc = HTML(string=''' <table style="height: 100%; width: 100%; margin: 0; padding: 0; border: 1px solid black"> <tr> <td style="height: 100%; width: 0px;"> /This sets the row height - empty cell <td style="vertical-align: middle; text-align: center; border: 1px solid blue"> The text to be centered here. </tr> </table> ''', base_url='/home/Desktop').render(stylesheets=[doc_css]) doc.write_pdf('./weasy_print_sample_pages_list.pdf')