在样式

时间:2018-04-11 10:32:25

标签: pdf itext

我正在研究动态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标记上的Widthimg属性有关,但我无法解决。

注意:当我从Height标记中删除Widthimg或两个属性时,图片会正确显示。但是每次使用我的代码的实际用户都不会在HTML中添加新图像时这样做,所以我在这里寻找合适的解决方案。

提前感谢您提出任何建议和解决方案。

1 个答案:

答案 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宽的图像!

所以要容纳图像,你可以

  • 将文档大小更改为更宽的内容,或
  • 在将HTML输入到iTextSharp之前应用预处理步骤,检查它是否有不合适的属性值并修复它们,或者
  • 将HTML生成过程更改为不会生成此类不适当的属性值。

在您要求的其他评论中

  

为了正确打印图像,图像的最大宽度和最大高度应该是多少?

考虑到您明确将左边距,右边距和上边距设置为0,将下边距明确设置为18个用户单位(默认情况下用户单位为1/72英寸),最大图像宽度可能约为794像素,最大图像高度约为(1122 - 18 * 96/72)px = 1098px。确保减去另外几个像素。

这当然取决于您的HTML不添加额外的边距或单元格边框或图像周围的任何内容......