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

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"> </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 против прямоугольника.
Он отлично работает после всех настроек, но немного медленнее