Darshan E Ksheerasagar Ответов: 1

Wkhtmltopdf разрыв страницы не работает должным образом


Всем Привет ,

Генерация PDF с помощью HTML-строки с разрывом страницы не является правильной работой ... Ниже приведен мой код и вывод

Умолчанию.aspx-файл

&ЛТ;%@ страницы язык="в C#" AutoEventWireup значение="истинной" отделенного кода="по умолчанию.aspx-файл.КС" наследует="wkhtmltopdfTest._Default " % & gt;

<!Элемент DOCTYPE в HTML общественности "-//W3C для//определения DTD XHTML 1.0 переходный//ванной" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&ГТ;


& lt;название>

< meta http-equiv=" Content-Type "content=" text / html; charset=utf-8" />



<asp: Button ID= "Button1" runat=" server "Text=" Download "OnClick=" btnExport_Click " />

&ЛТ;АСП:панели ID="pnlPerson" атрибут runat="сервер"и GT;





























Первая Страница
вторая полоса
Третья Страница
Четвертая Страница
Пять Страниц










Умолчанию.КС.aspx-файл

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
использование системы.Сеть;
используя системы.Веб.ИП;
используя системы.Веб.Пользовательского интерфейса.WebControls;
использование системы.Диагностика;
использование системы.ИО;
используя системы.Текст;
используя системы.Текст.RegularExpressions;

пространство имен wkhtmltopdfTest
{
общественный разделяемого класса _default : на системы.Веб.Пользовательского интерфейса.Страницы
{
protected void Page_Load(отправитель объекта, EventArgs e)
{
}
охраняемых недействительными btnExport_Click(объект отправителя, EventArgs в электронной)
{
пробовать
{
система строк стилей печати =.ИО.Файл.ReadAllText(Сервер.MapPath ("/PrintStyle. css"));

StringWriter sw = новый StringWriter();
HtmlTextWriter hw = новый HtmlTextWriter(sw);

пнлперсон.RenderControl(hw);
StringReader sr = новый StringReader(sw.Метод toString());



string outXml = "" +
"<стиль тип=\"текст/CSS в\"&ГТ; "+ стилей печати + "" +
"
"+ ео.Метод toString() + "" +
"
";
//стол, тр, тд, го, элемента tbody, элементы thead, tfoot { разрыв страницы-внутри: избежать !важно;}
//tr{дисплей: блок;}

byte[] result = ConvertHtmlToPdf(outXml);


Свойство HttpContext.Тока.Ответ.Четкий();
Ответ.ContentType = " приложение / pdf";
строковый параметр outputfilename = "отчет" + "_" + Датавремя.Сейчас.Метод toString("гггг-ММ-ДД-чч-мм-СС-ФФФ") + ".формат PDF";
Ответ.AddHeader ("content-disposition", "attachment;filename=" + outputFilename);
Ответ.CacheControl = " No-cache";
MemoryStream ms = новый MemoryStream(результат);
МС.Требуется Написание(Ответ.Выходной поток);
Ответ.Промывать();
Ответ.SuppressContent = истина;
Свойство HttpContext.Тока.ApplicationInstance.CompleteRequest();

}
поймать(исключение бывший)
{
}
}
защищенный байт [] ConvertHtmlToPdf(string html)
{
Система.Отражение.Сборка ass = система.Отражение.Собрание.GetExecutingAssembly();
система строкой conPath =.ИО.Путь.GetDirectoryName(зад.Кодовая база);
Uri uri = новый Uri(conPath);
conPath = uri.Абсолютный Путь.("%20", " "). Заменить("25", "");
conPath = путь.GetFullPath(Путь.Combine(conPath, @"..\"));
conPath = conPath + "bin\\wkhtmltopdf.exe";
var p = новый процесс
{
свойство StartInfo =
{
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = истина,
RedirectStandardInput = true,
UseShellExecute = false,
Имя файла = conPath
}
};
строка s = " - q ";
s + = " --margin-bottom 0 ";
s + = " --margin-right 0 ";
s + = " --margin-left 0 ";
s + = " --margin-top 0 ";
s + = " --размер страницы A4 ";
s + = " --print-media-type ";
s + = " --disable-smart-shrinking ";
с += "- -";
p. StartInfo.Аргументы = s;
p. начало();
StreamWriter myStreamWriter = новый StreamWriter(p. StandardInput.Базовый Поток, Кодирование.Кодировке utf8);
myStreamWriter.Запись (html);
myStreamWriter.Закрывать();
var buffer = новый байт[32768];
байт [] файл;
использование (var ms = new MemoryStream())
{
в то время как (правда)
{
ВАР читать = Р.StandardOutput.BaseStream.Читать(буфера, 0, буфер.Длина);
if (read <= 0)
{
перерыв;
}
ms. Write(буфер, 0, чтение);
}
файл = ms.Метод toArray();
}
p. WaitForExit(60000);
var returnCode = p. ExitCode;
p. закрыть();
return returnCode == 0 ? файл: null;
}
}
}


Стилей печати.в CSS

@media print
{
тр.разрыв страницы {дисплей: блок;разрыв страницы-после: всегда; }
}

Что я уже пробовал:

Я запустил приведенный выше код, но я могу получить правильный отчет с разрывом страницы .

1 Ответов

Рейтинг:
1

Vitaliy Fedorchenko

Явный разрыв страницы (с правилом CSS 'page-break-after') внутри таблиц (тег tr в вашем случае) не поддерживается wkhtmltopdf.

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

<div style='page-break-after:always;'></div>


Darshan E Ksheerasagar

Благодарю Вас Сэр