Я пытаюсь использовать следующий код для отображения файла PNG в PDF.Я поместил PNG в тот же каталог, что и код, чтобы исключить любые проблемы с неправильными путями к каталогам, но все, что я получаю, это маленький квадрат в PDF, где должен быть расположен PNG.Я использую NReco.PDFGenerator для создания PDF.Ниже приведены соответствующие части кода:
Сохранение PDF в HTML-таблицу ...
protected void expPDF_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
HtmlGenericControl div = new HtmlGenericControl("div");
div = BuildHTMLTable();
export dmc = new export();
var sb = new StringBuilder();
div.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
string s = sb.ToString();
dmc.exportPDF("JCPS Collegiate Transcript", "Portrait", s);
}
protected HtmlGenericControl BuildHTMLTable()
{
//Inner Div
HtmlGenericControl div = new HtmlGenericControl("div");
HtmlGenericControl divHeader = new HtmlGenericControl("div");
//HeaderLabel
Table t = new Table();
t.Width = Unit.Percentage(100);
TableRow tr = new TableRow();
tr.VerticalAlign = VerticalAlign.Middle;
tr.HorizontalAlign = HorizontalAlign.Center;
tr.Font.Name = "Calibri";
//JCPS Logo
TableCell tc = new TableCell();
Image img = new Image();
img.ImageUrl = "JCPS Logo.png";
tc.Controls.Add(img);
tr.Cells.Add(tc);
t.Rows.Add(tr);
divHeader.Controls.Add(t);
div.Controls.Add(divHeader);
return div;
}
Функция, которая создает и выталкивает PDF:
public void exportPDF(string fileName, string Orientation, string html)
{
HtmlToPdfConverter pdf = new HtmlToPdfConverter();
html = html.Replace("\n", "");
html = html.Replace("\t", "");
html = html.Replace("\r", "");
html = html.Replace("\"", "'");
switch (Orientation)
{
case "Portrait":
pdf.Orientation = PageOrientation.Portrait;
break;
case "Landscape":
pdf.Orientation = PageOrientation.Landscape;
break;
default:
pdf.Orientation = PageOrientation.Default;
break;
}
//In case needed for future
//pdf.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";
pdf.Margins = new PageMargins { Top = 5, Bottom = 5, Left = 5, Right = 5 };
pdf.PageFooterHtml = createPDFFooter();
var pdfBytes = pdf.GeneratePdf(createPDFScript() + html + "</body></html>");
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".pdf");
HttpContext.Current.Response.AddHeader("Content-Length", pdfBytes.Length.ToString());
HttpContext.Current.Response.BinaryWrite(pdfBytes);
HttpContext.Current.Response.Flush();
}
private string createPDFScript()
{
return "<html><head><style>td,th{line-height:20px;} tr { page-break-inside: avoid }</style><script>function subst() {var vars={};var x=document.location.search.substring(1).split('&');for(var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}" +
"var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];for(var i in x) {var y = document.getElementsByClassName(x[i]);" +
"for(var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];}}</script></head><body onload=\"subst()\">";
}
private string createPDFFooter()
{
return "<div><table style='font-family:Tahoma; font-size:9px; width:100%'><tr><td style='text-align:left'>Research Dept|DD:FC:jpg</td><td style='text-align:right'>Page <span class=\"page\"></span> of <span class=\"topage\"></span></td></div>";
}