我正在尝试在需要加载到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对象,以便它可以在图像上绘制线条?
答案 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:
如您所见,椭圆的形状和线条的位置因不同的图像而不同,因为我根据图像的宽度和高度定义了我的坐标。