Разрыв страницы при HTML в PDF с AbcPdf

Я пытаюсь создать отчет в формате PDF с помощью abcPdf. Все работает, но я хотел бы добавить номер страницы и полей в нижней части каждой страницы, а также избежать урезания в середине строки, как вы можете видеть на картинке:

page break

var theDoc = new Doc { TopDown = true };
var pageRef = theDoc.AddImageUrl(pdfUrl, true, 1903, true);
while (theDoc.Chainable(pageRef))
{
    theDoc.Page = theDoc.AddPage();
    //I guessI have to do something here???
    pageRef = theDoc.AddImageToChain(pageRef);
}

кто-нибудь знает, возможно ли это?

4 ответов


это сработало, но я думаю, что AbcPdf использует HTML-рендеринг IE, поэтому лучшее, что вы можете сделать, это вручную установить движок рендеринга в gecko (не забывайте, что вам нужна и дополнительная DLL) или обновить IE на вашем веб-сервере.

theDoc.HtmlOptions.Engine = EngineType.Gecko; 

затем, чтобы добавить разрыв страницы просто использовать

<div style="page-break-before:always">&nbsp;</div> 

спасибо feeela за комментарий.


ABCpdf включает два механизма рендеринга HTML.

MSHTML один основан на Trident и будет производить вывод в целом похож на версию IE, установленную в вашей системе.

геккон один основан вокруг Firefox и по состоянию на июнь 2013 года будет производить выход в целом похож на то, что вы видите в Firefox 21.

вы можете переключаться между двумя двигателями с помощью док.HtmlOptions.Свойство двигателя.

оба движка поддерживают CSS разрыва страницы стили. Вы можете использовать следующее:

<div style="page-break-before:always">some text</div>
<div style="page-break-after:always">some text</div> 
<div style="page-break-inside:avoid">some text</div> 

обратите внимание, что разрыв страницы внутри является дополнением к базовому поведению MSHTML.

два двигателя обрабатывают эти конструкции немного по-разному. В целом MSHTML более Прощающий и интуитивный. Однако элемент, к которому применяется стиль, должен быть видимым для его работы.

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

стили разрыва страниц в движке Gecko не всегда применяются так интуитивно, как в MSHTML. Корень этого-спецификация CSS, которая говорит, что стили разрыва должны быть применимы к элементам уровня блока в "нормальном потоке корневого элемента". Он позволяет применять эти стили к другим элементам, но не уполномочивает его.

в результате этого в Gecko engine стили разрыва страницы не могут применяться в таблицах к таким элементам, как строки таблицы. Если вы не уверены в том, что что-то может работать, просто попробуйте Print Preview из Firefox 21.0 в качестве простой проверки здравомыслия.


есть лучший способ исправить это. Вместо того, чтобы положить это <div /> чтобы заставить разрыв страницы, вы можете поставить CSS атрибут в контейнере вашего html (т. е. <div />, <table /> и т. д.). В css установите page-break-inside to auto .

// in CSS
#ContainerID
{
    page-break-inside: auto;
}

Да, я занимался этой проблемой, мы решили ее, добавив строку в таблицу и увидев, будет ли она по-прежнему помещаться на странице, проверив высоту html против прямоугольника.

Он отлично работает после всех настроек, но немного медленнее