2009-07-22 5 views
5

Я пытаюсь создать изображение или фоновое изображение в ячейке таблицы в iTextSharp. Самое близкое, что я получил, - это прикрепить изображение непосредственно к ячейке с помощью PdfPTable и PdfPCell.iTextSharp: Изображение плитки в ячейке таблицы

tempCell = new PdfPCell(); 
tempCell.Image = iTextSharp.text.Image.GetInstance(Path.Combine(GetImageDirectory(), "my_image.gif")); 
table.AddCell(tempCell); 

У этого есть свои проблемы. Ячейки никогда не имеют одинакового размера в моих таблицах, поэтому изображения масштабируются автоматически по ширине. Это может сделать некоторые из клеток дополнительными высокими по сравнению с другими ячейками или только наполовину заполненными изображением, если они узкие.

Любые предложения о том, как получить изображения, если это возможно даже с iTextSharp? Благодаря!

ответ

2

Если все остальное терпит неудачу, Вы можете создать заливку шаблон и установить, что в случае ячейки (или заполнить за всю таблицу).

Вы рисуете изображение в шаблоне PdfPatternPainter с ограничениями, которые вы хотите повторить шаблон. Затем вы рисуете свое изображение в этом шаблоне в любом масштабе.

PdfPatternPainter patternPainter = someContent.createPattern(width, height); 
patternPainter.addImage(image, desiredImgSizeX, 0, 0, desiredImgSizeY, 0, 0); 

someContent.saveState(); 
someContent.setPatternFill(patternPainter); 

someContent.rectangle(llx, lly, wid, hei); 
someContent.fill(); 

someContent.restoreState(); 

Ваш PdfPCellEvent будет дано все, что нужно в cellLayout переопределения. Вероятно, вы захотите использовать canvases[PdfPTable.BASECANVAS] вместо someContent выше.

Вы хотите, чтобы скрыть и повторно использовать patternPainter, чтобы вы не получили дубликат для каждой ячейки, в которой вы его используете. Это может вызвать довольно жуткое надувание файла. Нет beuno.

+0

Спасибо за ответ. Этот проект закончился почти год назад, но если мы когда-нибудь столкнемся с одной и той же проблемой с PDF-файлами, я обязательно обязательно посмотрю это! – jocull

0

Попробуйте повторно использовать следующую Image imgLogo = Image.GetInstance(_pathToCustomLogo);

  if (imgLogo != null) 
      { 
       imgLogo.ScaleToFit(desiredLogoWidth, imgLogo.Height); 
       Cell cellWithImage = new Cell(); 
       cellWithImage.Add(imgLogo); 
       maintableHeader.AddCell(cellWithImage); 
      } 

Ciao

+0

Будет ли это растягивать изображение или плитки? – jocull