2011-03-15 97 views
2

家伙嗨如果用户上传了一个新的标志我有一个表格字段,它比默认的标志大我有这样的情况:我有一个标志形象,一些作品的一部分。这iTextSharp的叠加图像

然后,我使用该表单域来定位新图像。

的问题是我需要设置表单字段为白色的背景色,以便它涵盖在新的图像比旧标志小事件的旧标识..

我做了什么是:

foreach (var imageField in imageReplacements) 
      { 
       fields.SetFieldProperty(imageField.Key, "bgcolor", iTextSharp.text.Color.WHITE, null); 
       fields.RegenerateField(imageField.Key); 

       PdfContentByte overContent = stamper.GetOverContent(imageField.Value.PageNumber); 
       float[] logoArea = fields.GetFieldPositions(imageField.Key); 
       if (logoArea != null) 
       { 
        iTextSharp.text.Rectangle logoRect = new iTextSharp.text.Rectangle(logoArea[1], logoArea[2], logoArea[3], logoArea[4]); 

        var logo = iTextSharp.text.Image.GetInstance(imageField.Value.Location); 
        if (logo.Width >= logoRect.Width || logo.Height >= logoRect.Height) 
        { 
         logo.ScaleToFit(logoRect.Width, logoRect.Height); 
        } 
        logo.Alignment = iTextSharp.text.Image.ALIGN_LEFT; 
        logo.SetAbsolutePosition(logoRect.Left, logoArea[2] + (logoRect.Height - logo.ScaledHeight)/2); 
        // left: logoArea[3] - logo.ScaledWidth + (logoRect.Width - logo.ScaledWidth)/2 

        overContent.AddImage(logo); 
       } 
      } 

的问题,这是该领域的背景颜色设置为白色和图像,然后没有出现..我删除SetFieldProperty和RegenerateField命令和图像替换工作正常..

有没有aw ay在图层上设置堆叠顺序?

回答

0

注解(例如表单域)始终位于页面内容的顶部。注释Z顺序只是给定页面上注释数组的顺序。

页面内容Z顺序就是所有内容中出现的顺序。新的绘图操作员在进行操作的人员之上。

如果要覆盖旧图像,请在其上绘制一个白色框,然后在顶部上绘制新徽标。无需担心注释。


实际上,您真正需要做的不是设置imageField的背景颜色。您已经在缩放新徽标以匹配旧徽标的大小。

但是,如果你真的必须绘制白色方块,这是相当简单:

overContent.setColorFill(iTextSharp.text.Color.WHITE); 
overContent.rectangle(logoRect); 
overcontent.fill(); 
+0

马克嗨,你碰巧有我怎么可能在是宽度上画一个白色矩形的例子和logoRect的高度?然后将图像添加到它? – TheLearningDev 2011-03-16 00:19:50