2015-04-10 7 views
1

Я пытаюсь нарисовать линии на изображении, которое должно быть загружено в pdf-документ, так же, как мы рисуем графику на событии рисования любого элемента управления, но это не удается.Рисование линий в изображении в формате PDF с использованием ItextSharp

Любые предложения?

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 так, что он может рисовать линии на изображении?

+0

Это почти дубликат [Как добавить текст к изображению?] (Http://stackoverflow.com/questions/26814958/how-to-add-text-to-an-image) с основной разницей что этот новый вопрос касается добавления строк вместо текста. Однако принцип остается прежним: вместо добавления текста в 'PdfContentByte' вы добавляете строки, используя команды' MoveTo() ',' LineTo() 'и' Stroke() '. Для получения более похожих ответов, пожалуйста, скачайте бесплатную электронную книгу [The Best iText Questions on StackOverflow] (http://pages.itextpdf.com/ebook-stackoverflow-questions.html) –

+0

Нет, здесь я хочу нарисовать линии на основе изображения на x и y cordinates –

+0

Есть ли другой способ, кроме PdfContentbyte –

ответ

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

Как вы можете видеть, форма эллипса и положение линий различны для разных изображений, потому что я определил свои координаты основанный на ширине и высоте изображения.