2012-01-09 3 views
34

Я работаю над проектом с использованием рубинов на рельсах (3.1). Мое требование состоит в том, чтобы создать pdf-файл из html-содержимого. Поэтому я использую драгоценный камень pdfkit.Wkhtmltopdf Персонажи в одной строке частично разрезаны между страницами

На некоторых страницах символы в одной строке частично разрезаны между страницами. Когда я конвертировать HTML конвертировать в PDF с помощью pdfkit Gem

версия wkhtmltopdf: wkhtmltopdf - 0.11.0 RC1

Операционная система: Linux CentOS 5.5

На изображении ниже показывает характер частично разрезать между страницами.

Пожалуйста, предложите решение.

Пример 1

enter image description here

Пример 2

enter image description here

+1

Что такое полная команда, которую вы используете для генерации PDF? –

+0

Команда, созданная из драгоценного камня pdfkit: \t wkhtmltopdf "--page-size" "A4" "--margin-top" "5mm" "--margin-right" "5mm" "--margin-bottom" "5mm" "--margin-left" "5mm" "--encoding" "UTF-8" "--quiet" "1011284.html" "test.pdf" – amexn

+0

Что произойдет, если вы измените маржу? он все еще отключил его? – Matt

ответ

7

В соответствии с some documentation я обнаружил (см страницу ломки), это известная проблема, и предлагает использовать CSS разрывы страниц для вставки разрывов страниц (при условии, что вы используете исправленную версию от QT):

Текущий алгоритм разбивки страницы WebKit оставляет желать лучшего . В основном webkit будет отображать все на одну длинную страницу, , а затем разрезать ее на страницы. Это означает, что если у вас есть два столбца текста, где один по вертикали сдвинут на половину строки. Затем webkit вырезает линию на куски, отображая верхнюю половину на одной странице. И нижняя половина на другой странице. Он также сломает изображение в два и и так далее. Если вы используете исправленную версию QT, вы можете использовать свойство CSS- для разрыва страницы, чтобы исправить это. Существует не так просто решение этой проблемы, пока это не решится, попробуйте организовать ваши HTML-документы так, чтобы в нем было много строк, на которых могут быть .

Смотрите также: http://code.google.com/p/wkhtmltopdf/issues/detail?id=9, http://code.google.com/p/wkhtmltopdf/issues/detail?id=33 и http://code.google.com/p/wkhtmltopdf/issues/detail?id=57.

+1

Это уже не так. Ответ, приведенный @Besi, разрешает любые проблемы с разрывом страницы, не говоря уже о получении последней версии 'wkhtmltopdf' (0.12.2.1). Добавьте в свой CSS следующее: 'table, img, blockquote {page-break-inside: avoid;}' – craned

+0

@craned не правильно. Проблема только частично решена и ее все еще существует. 'Page-break-inside' будет использоваться только для всего блока, к которому вы его добавляете. Например, если 1 абзац/блок длиннее страницы, то 'page-break-inside' не поможет, и в некоторых случаях текст будет разрезан. Его можно исправить, если это статический текст, но это проблема с динамически сгенерированным текстом, когда вы не знаете, как долго этот конкретный блок будет. Таким образом, проблема все еще существует и только частично разрешена. – Neel

+0

@Ниль, в этом случае я бы сказал, что это в основном решено. По крайней мере, в моем конкретном сценарии 1 параграф/блок никогда не будет проблемой. Честно говоря, абзац/блок никогда не должен быть длиннее обычной страницы, но в том, что кажется редким случаем, то да, это будет место, где проблема все еще существует. – craned

9

Я просто столкнулся с этим и нашел то, что разрешило проблему для меня. В моем конкретном случае были divs с display: inline-block; margin-bottom: -20px;. Как только я сменил их, чтобы заблокировать и сбросить нижнюю границу поля, расщепление линии исчезло. YMMV.

+0

Спасибо, у меня была такая же проблема с элементом "article". После добавления 'display: block' он работал как шарм. – nils

+0

@nvahalik: на какой элемент вы добавили отображение: block? У меня аналогичная проблема с экспортом таблицы в формате pdf. SO вопрос здесь - http://stackoverflow.com/questions/17046385/wicked-pdf-rendering-the-last-row-across-two-pages – usha

1

Проблема с разрезанным текстом - это известная проблема вебкита, и разработчикам удалось найти решение внутри wkhtmltopdf. Обновление до 0.12.1 исправит проблему разреза (если вы не хотите тратить время на компиляции, вы можете просто взять двоичный файл здесь: https://github.com/h4cc/wkhtmltopdf-amd64).

+1

Я использую 0.12.2.1, что является более обновленной версией wkhtmltopdf , У меня все еще есть эта проблема, поэтому я не думаю, что это исправление (так как я сомневаюсь, что они вернули ошибку в более новую версию). – rageandqq

+0

Я подтверждаю, что 0.12.1 работал на данный момент - с этого не играл. –

+0

Использование wkhtmltopdf 0.12.2.1 (с исправленным qt), все еще проблема. –

4

Я имел эту проблему с помощью таблицы:

enter image description here

Затем я добавил это в моем CSS:

table, img, blockquote {page-break-inside: avoid;} 

Это устранило проблему:

enter image description here

+0

Это не сработало для меня. Я попробовал настройки этого атрибута при включении td, tr и div, и линия все еще обрезана. –

1

В моем случае проблема была ресо lved закомментировав следующий CSS:

html, body { 
    overflow-x: hidden; 
} 

В общем, проверьте, если какие-либо метки имеют overflow набор как hidden и удалить его или установить его в visible.

Btw, я использую wkhtmltopdf version 0.12.2.1 на Windows 8.

 Смежные вопросы

  • Нет связанных вопросов^_^