我正在研究动态HTML到PDF文档,并使用ckeditor编写HTML,然后使用itextsharp 5.5.10从中生成可下载的PDF。以下是我正在使用的代码
string htmlText = "some basic HTML I wrote in ckeditor 4.0 and save in my DB to retrieve later"
StringReader sr = new StringReader(htmlText);
Document pdfDoc = new Document(PageSize.A4, 0, 0, 0, 18f);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
// instantiate the custom PdfPageEventHelper
MyPageEventHandler e = new MyPageEventHandler()
{
ImageHeader = imageHeader
};
writer.PageEvent = e;
pdfDoc.Open();
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
pdfDoc.Close();
// Auto Download option
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=Proposal-" + pid + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
现在一切正常,感谢这个伟大的库itextsharp,但有时它没有添加少量图像到PDF文件。
在调试过程中,我发现变量htmlText
具有使用ekeditor保存的相同输入HTML,并且它也包含所有img
个标签,但仍然有些图像没有以PDF格式显示。
下面是我的HTML中的几个标签
<img alt="" src="http://www.mydomain/fullpath/13101571jjc-banner.png" />
<img alt="" src="http://www.mydomain/fullpath/0c1bc6fbchart-1.png" style="width:400px" />
<img alt="" src="http://www.mydomain/fullpath/f7802520graph1.png" style="height:288px; width:643px" />
<img alt="" src="http://www.mydomain/fullpath/4cd70c03sample_s-l_DISTRIBUTION.jpg" style="height:756px; width:1056px" />
我的PDF中和第4张图片未显示。**
我知道它可能与Height
标记上的Width
和img
属性有关,但我无法解决。
注意:当我从Height
标记中删除Width
或img
或两个属性时,图片会正确显示。但是每次使用我的代码的实际用户都不会在HTML中添加新图像时这样做,所以我在这里寻找合适的解决方案。
提前感谢您提出任何建议和解决方案。
答案 0 :(得分:1)
一方面,问题图片的style
属性如下所示:
style="height:756px; width:1056px"
另一方面,您使用A4尺寸的文件
Document pdfDoc = new Document(PageSize.A4, 0, 0, 0, 18f);
A4页的宽度约为8.27英寸,每英寸96px约为794像素。
因此,A4页面的宽度不足以容纳1056px宽的图像!
所以要容纳图像,你可以
在您要求的其他评论中
为了正确打印图像,图像的最大宽度和最大高度应该是多少?
考虑到您明确将左边距,右边距和上边距设置为0,将下边距明确设置为18个用户单位(默认情况下用户单位为1/72英寸),最大图像宽度可能约为794像素,最大图像高度约为(1122 - 18 * 96/72)px = 1098px。确保减去另外几个像素。
这当然取决于您的HTML不添加额外的边距或单元格边框或图像周围的任何内容......