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
{
тр.разрыв страницы {дисплей: блок;разрыв страницы-после: всегда; }
}
Что я уже пробовал:
Я запустил приведенный выше код, но я могу получить правильный отчет с разрывом страницы .