使用ItextSharp在PDF中绘制图像上的线条

时间:2015-04-10 12:26:08

标签: c# visual-studio-2010 pdf itextsharp

我正在尝试在需要加载到pdf文档上的图像上绘制线条,就像我们在任何控件的绘制事件上绘制图形一样,但它没有这样做。

任何建议?

Document pdfDoc = new Document(PageSize.A2, 10f, 10f, 10f, 0f);
pdfDoc.AddHeader("Batting Report - ", txtSearchBox.Text);

iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(Properties.Resources.bgWW
                        , System.Drawing.Imaging.ImageFormat.Jpeg);


PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
pdfDoc.Open();

pdfDoc.Add(pic);

那么,如何修改ItextSharpImage的pic对象,以便它可以在图像上绘制线条?

1 个答案:

答案 0 :(得分:3)

请查看WatermarkedImages4示例。它基于我在评论中提到的WatermarkedImages1示例。这两个示例之间唯一不同的是我们在回答How to add text to an image?的回答中添加了文本 而我们在回答你的问题的例子中添加了行。

我们添加如下图像:

document.add(getWatermarkedImage(cb, Image.getInstance(IMAGE1)));

getWatermarkedImage()方法如下所示:

public Image getWatermarkedImage(PdfContentByte cb, Image img) throws DocumentException {
    float width = img.getScaledWidth();
    float height = img.getScaledHeight();
    PdfTemplate template = cb.createTemplate(width, height);
    template.addImage(img, width, 0, 0, height, 0, 0);
    template.saveState();
    template.setColorStroke(BaseColor.GREEN);
    template.setLineWidth(3);
    template.moveTo(width * .25f, height * .25f);
    template.lineTo(width * .75f, height * .75f);
    template.moveTo(width * .25f, height * .75f);
    template.lineTo(width * .25f, height * .25f);
    template.stroke();
    template.setColorStroke(BaseColor.WHITE);
    template.ellipse(0, 0, width, height);
    template.stroke();
    template.restoreState();
    return Image.getInstance(template);
}

如您所见,我使用moveTo()lineTo()stroke()添加了两条绿线。我还使用ellipse()stroke()方法添加了一个白色椭圆。

这会生成如下所示的PDF:

enter image description here

如您所见,椭圆的形状和线条的位置因不同的图像而不同,因为我根据图像的宽度和高度定义了我的坐标。