Подтвердить что ты не робот

Разрыв страницы, когда 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);
}

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

4b9b3361

Ответ 1

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

theDoc.HtmlOptions.Engine = EngineType.Gecko; 

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

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

Спасибо за комментарий для комментария.

Ответ 2

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

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

The Gecko один основан на Firefox, и по состоянию на июнь 2013 года будет производиться вывод, похожий на тот, который вы видите в Firefox 21.

Вы можете переключаться между двумя двигателями, используя свойство Doc.HtmlOptions.Engine.

Оба движка поддерживают стили 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, в которой говорится, что стили break должны быть применимы к элементам уровня блока в "нормальном потоке корневого элемента". Это позволяет применять эти стили к другим элементам, но не дает им мандата.

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

Ответ 3

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

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

Ответ 4

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

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