TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Darshan Kshirasagar
NA
317
68.7k
WkhtmltoPdf Page Break Not Working Properly
Apr 6 2017 2:21 AM
Hello All ,
Generate PDF using HTML string with page break is not proper working ... Below is my Code and Output
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wkhtmltopdfTest._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="PrintStyle.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Download" OnClick="btnExport_Click" />
<div >
<asp:Panel ID="pnlPerson" runat="server">
<div>
<table style="width: 785px;">
<tr>
<td>
First Page
</td>
</tr>
<tr class="page-break">
<td >
</td>
</tr>
<tr>
<td>
Second Page
</td>
</tr>
<tr class="page-break">
<td >
</td>
</tr>
<tr>
<td>
Third Page
</td>
</tr>
<tr class="page-break">
<td >
</td>
</tr>
<tr>
<td>
Fourth Page
</td>
</tr>
<tr class="page-break">
<td >
</td>
</tr>
<tr>
<td>
Five Page
</td>
</tr>
</table>
</div>
</asp:Panel>
</div>
</form>
</body>
</html>
Default.cs.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace wkhtmltopdfTest
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnExport_Click(object sender, EventArgs e)
{
try
{
string PrintStyle = System.IO.File.ReadAllText(Server.MapPath("/PrintStyle.css"));
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnlPerson.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
string outXml = "<html> <head> " +
"<style type=\"text/css\"> " + PrintStyle + " </style> " +
"</head> <body> <div>" + sw.ToString() + " " +
" </div></body> </html>";
//table, tr, td, th, tbody, thead, tfoot { page-break-inside: avoid !important;}
//tr{display:block;}
byte[] result = ConvertHtmlToPdf(outXml);
HttpContext.Current.Response.Clear();
Response.ContentType = "application/pdf";
string outputFilename = "Report" + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fff") + ".pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + outputFilename);
Response.CacheControl = "No-cache";
MemoryStream ms = new MemoryStream(result);
ms.WriteTo(Response.OutputStream);
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch(Exception ex)
{
}
}
protected byte[] ConvertHtmlToPdf(string html)
{
System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
string conPath = System.IO.Path.GetDirectoryName(ass.CodeBase);
Uri uri = new Uri(conPath);
conPath = uri.AbsolutePath.Replace("%20", " ").Replace("25", "");
conPath = Path.GetFullPath(Path.Combine(conPath, @"..\"));
conPath = conPath + "bin\\wkhtmltopdf.exe";
var p = new Process
{
StartInfo =
{
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false,
FileName = conPath
}
};
string s = "-q ";
s += "--margin-bottom 0 ";
s += "--margin-right 0 ";
s += "--margin-left 0 ";
s += "--margin-top 0 ";
s += "--page-size A4 ";
s += "--print-media-type ";
s += "--disable-smart-shrinking ";
s += "- -";
p.StartInfo.Arguments = s;
p.Start();
StreamWriter myStreamWriter = new StreamWriter(p.StandardInput.BaseStream, Encoding.UTF8);
myStreamWriter.Write(html);
myStreamWriter.Close();
var buffer = new byte[32768];
byte[] file;
using (var ms = new MemoryStream())
{
while (true)
{
var read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);
if (read <= 0)
{
break;
}
ms.Write(buffer, 0, read);
}
file = ms.ToArray();
}
p.WaitForExit(60000);
var returnCode = p.ExitCode;
p.Close();
return returnCode == 0 ? file : null;
}
}
}
PrintStyle.css
@media print
{
tr.page-break {display: block;page-break-after: always; }
}
Output :
Reply
Answers (
0
)
want to change xml attribute name.
datatable from 1 form to another