Разрыв страницы, когда 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);
}
Знает ли кто-нибудь, возможно ли это?
Ответы
Ответ 1
Это сработало, но я думаю, что AbcPdf использует HTML-рендеринг IE, поэтому самое лучшее, что вы можете сделать, это вручную настроить механизм рендеринга как gecko (не забывайте, что вам нужно и дополнительную DLL) или обновить IE в своем веб сервер.
theDoc.HtmlOptions.Engine = EngineType.Gecko;
Затем, чтобы добавить разрыв страницы, просто используйте
<div style="page-break-before:always"> </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 против прямоугольника.
Он работает красиво после установки, но немного медленнее