使用C#将HTML文件导出到ASP.NET中的pdf [英] Export HTML file to pdf in ASP.NET with C#

查看:68
本文介绍了使用C#将HTML文件导出到ASP.NET中的pdf的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在pdf文件中导出html文件并且我有图像问题,

图像显示大不正确的pdf文件格式

使用iTextSharp生成pdf 







使用此代码..



public void ExportToPdf(DataTable myDataTable)

{



// Invoice(Bill)的虚拟数据。

string companyName =ASPSnippets;

int orderNo = 2303;

DataTable dt = new DataTable();

dt.Columns.AddRange(new DataColumn [5] {

new DataColumn(ProductId,typeof(string)),

new DataColumn(Product,typeof(string)),

new DataColumn(Price,typeof(int)),

new DataColumn(Quantity,typeof(int)),

new DataColumn( 总计,typeof(int))});

dt.Rows.Add(101,Sun Glasses,200,5,1000);

dt.Rows.Add(102,Jeans,400,2,800);

dt.Rows.Add(103,Trousers,300,3,900);

dt.Rows.Add(104,Shirts,550,2,1100) ;



使用(StringWriter sw = new StringWriter())

{

using(HtmlTextWriter hw = new HtmlTextWriter(sw))

{

StringBuilder sb = new StringBuilder();



//生成发票(比尔)标题。

sb.Append();

sb.Append();

sb.Append( );

sb.Append();

sb.Append();

sb.Append(

订单号:);

sb.Append(orderNo);

sb.Append(
日期:);

sb.Append(DateTime.Now);

sb.Append(
公司名称:);

sb.Append(companyName);

sb.Append(
);

sb.Append(
);



//生成发票(比尔)项目网格。

sb.Append();

sb.Append();

foreach(dt.Columns中的DataColumn列)

{

sb.Append();

}

sb.Append();

foreach(dt.Rows中的DataRow行)

{

sb.Append ();

foreach(Dat dt.Columns中的aColumn列)

{

sb.Append();

}

sb .Append();

}

sb.Append();

sb.Append();

sb.Append(
);

sb.Append(column.ColumnName);

sb.Append(
);

sb.Append(row [column]);

sb.Append(
sb.Append(dt.Columns.Count - 1);

sb.Append(>总计
);

sb.Append(dt.Compute(sum(总计),));

sb.Append(
);



//将HTML字符串导出为PDF格式。

StringReader sr = new StringReader(sb.ToString());

文档pdfDoc =新文档(PageSize.A4,10f,10f,10f,0f);

HTMLWorker htmlparser = new HTMLWorker(pdfDoc);

PdfWriter writer = PdfWriter.GetInstance(pdfDoc,Response.OutputStream);

pdfDoc.Open();

htmlparser.Parse(sr);

pdfDoc.Close();

Response.ContentType =application / pdf;

响应。 AddHeader(content-disposition,attachment; filename = Invoice_+ orderNo +。pdf);

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.Write(pdfDoc);

Response.End();

}

}

} < br $>


谢谢......



我尝试过的事情:



图像无法在pdf生成文件中正确显示使用iTextSharp

解决方案

您好,



我建议使用另一个开源工具WKHTMLTOPDF。我已经在许多项目中使用它并且工作正常。





wkhtmltopdf





public byte [] WkHtmlToPdf(string url,string wkHtmlDir)

{

////获取身份验证cookie

var cookieName = FormsAuthentication.FormsCookieName;

var authCookie = HttpContext.Request.Cookies [cookieName ];



const string fileName = - ;

var wkHtmlExe = wkHtmlDir +\\wkhtmltopdf.exe; < br $>


var p = new流程

{

StartInfo =

{

CreateNoWindow = true,

RedirectStandardOutput = true,

RedirectStandardError = true,

RedirectStandardInput = true,

UseShellExecute = false,

FileName = wkHtmlExe,

WorkingDirectory = wkHtmlDir

}

};



var switches =;

开关+ = - print-media-type;

if (authCookie!= null)switch + = string.Format( - cookie {0} {1},authCookie.Name,authCookie.Value);

switch(reportTypeId)

{

案例4:

开关+ = - margin-top 0mm - margin-bottom 0mm --margin-right 0mm --margin-左边15mm;

休息;

默认:

开关+ = - margin-top 20mm - margin-bottom 10mm - margin-right 10mm --margin-left 10mm;

休息;

}



开关+ = --P年龄大小A4;

//开关+ = - head-html http://+ Request.Url.Authority +/Content/html/header.html;

if(延迟)

开关+ = - javascript-delay 1000;

p.StartInfo.Arguments = switches +\ + url +\+ fileName;

p.Start();



//读取输出

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(读< = 0)

{

break;

}

ms.Write(缓冲区,0,读取);

}

file = ms.ToArray();

}



//等待或退出

p.WaitForExit(60000);



//读取退出代码,关闭流程

var returnCode = p。 ExitCode;

p.Close();



var filePath = wkHtmlDir +\\\log.txt;

FileHelper.WriteLine(filePath,string.Format(Url:{0},url));

FileHelper.WriteLine(filePath,string.Format(ReturnCode:{0 },returnCode.ToString(CultureInfo.InvariantCulture)));

FileHelper.WriteLine(filePath,string.Format(File Length:{0},(file.Length)));



返回returnCode == 0? file:null;



}



希望这会有所帮助



问候,

Vinod

定制软件开发公司

I have export html file in pdf file and i have image issue,
Image dispaly vary large not set proper in pdf file format

pdf generate using iTextSharp


.

Using this code..

public void ExportToPdf(DataTable myDataTable)
{

//Dummy data for Invoice (Bill).
string companyName = "ASPSnippets";
int orderNo = 2303;
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[5] {
new DataColumn("ProductId", typeof(string)),
new DataColumn("Product", typeof(string)),
new DataColumn("Price", typeof(int)),
new DataColumn("Quantity", typeof(int)),
new DataColumn("Total", typeof(int))});
dt.Rows.Add(101, "Sun Glasses", 200, 5, 1000);
dt.Rows.Add(102, "Jeans", 400, 2, 800);
dt.Rows.Add(103, "Trousers", 300, 3, 900);
dt.Rows.Add(104, "Shirts", 550, 2, 1100);

using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
StringBuilder sb = new StringBuilder();

//Generate Invoice (Bill) Header.
sb.Append("");
sb.Append("");
sb.Append("");
sb.Append("");
sb.Append("");
sb.Append("

Order No: ");
sb.Append(orderNo);
sb.Append("
Date: ");
sb.Append(DateTime.Now);
sb.Append("
Company Name: ");
sb.Append(companyName);
sb.Append("
");
sb.Append("
");

//Generate Invoice (Bill) Items Grid.
sb.Append("");
sb.Append("");
foreach (DataColumn column in dt.Columns)
{
sb.Append("");
}
sb.Append("");
foreach (DataRow row in dt.Rows)
{
sb.Append("");
foreach (DataColumn column in dt.Columns)
{
sb.Append("");
}
sb.Append("");
}
sb.Append("");
sb.Append("");
sb.Append("
");
sb.Append(column.ColumnName);
sb.Append("
");
sb.Append(row[column]);
sb.Append("
sb.Append(dt.Columns.Count - 1);
sb.Append("">Total
");
sb.Append(dt.Compute("sum(Total)", ""));
sb.Append("
");

//Export HTML String as PDF.
StringReader sr = new StringReader(sb.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=Invoice_" + orderNo + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
}
}
}

Thankx...

What I have tried:

Image not display proper in pdf generate file using iTextSharp

解决方案

Hi,

I suggest to use another open source tool WKHTMLTOPDF. I have used in Many projects and it is working fine.


wkhtmltopdf


public byte[] WkHtmlToPdf(string url, string wkHtmlDir)
{
//// Get the authentication cookie
var cookieName = FormsAuthentication.FormsCookieName;
var authCookie = HttpContext.Request.Cookies[cookieName];

const string fileName = " - ";
var wkHtmlExe = wkHtmlDir + "\\wkhtmltopdf.exe";

var p = new Process
{
StartInfo =
{
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false,
FileName = wkHtmlExe,
WorkingDirectory = wkHtmlDir
}
};

var switches = "";
switches += "--print-media-type ";
if (authCookie != null) switches += string.Format("--cookie {0} {1} ", authCookie.Name, authCookie.Value);
switch (reportTypeId)
{
case 4:
switches += "--margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 15mm ";
break;
default:
switches += "--margin-top 20mm --margin-bottom 10mm --margin-right 10mm --margin-left 10mm ";
break;
}

switches += "--page-size A4 ";
//switches += "--header-html http://" + Request.Url.Authority + "/Content/html/header.html ";
if (delay)
switches += "--javascript-delay 1000";
p.StartInfo.Arguments = switches + " \"" + url + "\" " + fileName;
p.Start();

//read output
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();
}

// wait or exit
p.WaitForExit(60000);

// read the exit code, close process
var returnCode = p.ExitCode;
p.Close();

var filePath = wkHtmlDir + "\\log.txt";
FileHelper.WriteLine(filePath, string.Format("Url: {0}", url));
FileHelper.WriteLine(filePath, string.Format("ReturnCode: {0}", returnCode.ToString(CultureInfo.InvariantCulture)));
FileHelper.WriteLine(filePath, string.Format("File Length: {0}", (file.Length)));

return returnCode == 0 ? file : null;

}

Hope this will help

Regards,
Vinod
custom software development companies


这篇关于使用C#将HTML文件导出到ASP.NET中的pdf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆