如何使用iTextSharp在Rectangle中插入图像

时间:2018-01-19 13:17:17

标签: c# itext

我尝试将图片放在彩色矩形上,但图片未显示。

请建议任何答案。

PDF example.

这是我的代码: -

pcb.RoundRectangle(iXCoordinate + 5, iYCoordinate, 500, 100, 5);
pcb.SetRGBColorFill(198, 226, 255);
pcb.Fill();
pcb.RoundRectangle(iXCoordinate + 5, iYCoordinate, 500, 100, 5); pcb.Stroke();
pcb.ResetRGBColorFill();

pcb.BeginText();
pcb.SetFontAndSize(BaseFont.CreateFont(@"C:\Windows\Fonts\arial.ttf", BaseFont.CP1252, false), 10);
pcb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, sCustomerName, iXCoordinate + 30, iYCoordinate, 0); iYCoordinate -= 12;
pcb.EndText();

iTextSharp.text.Image myImage = iTextSharp.text.Image.GetInstance(@"D:\Maruti\Resources\logo.jpg");
myImage.SetAbsolutePosition(iXCoordinate + 410, iYCoordinate - 40);
myImage.ScaleAbsoluteHeight(35);
myImage.ScaleAbsoluteWidth(80);
doc.Add(myImage);

1 个答案:

答案 0 :(得分:1)

在您的代码中,您可以将表单和文本的立即绘制结合到页面内容流中(使用您PdfContentByte pcb中最有可能检索为DirectContent的{​​{1}})并间接绘制图像通过iText布局机制(使用PdfWriter)。

以这种混合方式添加的元素不一定会按照您在代码中添加它们的顺序出现在结果内容中。例如,在您的情况下,您最后添加的图片(通过Document doc)实际上首先出现在内容流中,然后是您通过Document添加的所有内容之前。因此,图像被(部分)覆盖后面绘制的圆角矩形。

通常,您只需使用DirectContentDocument在同一页面区域中绘图即可阻止此操作。例如,在您的情况下,您应该将图像添加到DirectContent,而不是DirectContent。为此替换

Document

通过

doc.Add(myImage);

现在所有的绘图都是使用pcb.AddImage(myImage); 完成的,图像是在圆角矩形之后绘制的,因此完全可见。

关于你的其他代码的两个注释:

  • 首先定义路径,然后设置填充颜色,然后填充路径:

    DirectContent

    严格地说,这会产生无效的内容流,因为PDF规范明确要求在路径定义和匹配路径绘制操作之间可能只有剪切路径操作符。但是,许多PDF查看器都会接受无效的内容流。

    因此,您应该在pcb.RoundRectangle(iXCoordinate + 5, iYCoordinate, 500, 100, 5); pcb.SetRGBColorFill(198, 226, 255); pcb.Fill(); 之前调出pcb.SetRGBColorFill

  • 如果您想要描边并填充相同的路径,则只能定义路径一次并调用pcb.RoundRectangle而不是定义两次,一次使用pcb.FillStroke(),一次使用Fill() {1}}。

因此,绘制表单的两种更简单,更正确的方法是

Stroke()