2009-07-22 21 views
5

Próbuję wstawić obraz lub obraz tła w komórce tabeli w iTextSharp. Najbliższym, co udało mi się uzyskać, jest dołączenie obrazu bezpośrednio do komórki za pomocą PdfPTable i PdfPCell.iTextSharp: obraz płytki w komórce tabeli

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

Ma to jednak swoje problemy. Komórki nigdy nie mają tego samego rozmiaru w tabelach, więc obrazy są skalowane automatycznie według szerokości. Może to spowodować, że niektóre komórki będą nadzwyczaj wysokie w stosunku do innych komórek lub tylko połowa wypełni obraz, jeśli są wąskie.

Jakieś sugestie dotyczące sposobu układania obrazów, jeśli jest to nawet możliwe w iTextSharp? Dzięki!

Odpowiedz

2

Jeśli wszystko inne zawiedzie, można utworzyć wypełnienie wzoru i ustawić, że w przypadku komórek (lub wypełnić za całej tabeli).

Narysujesz swój obraz w szablonie PdfPatternPainter z odpowiednimi granicami dla powtarzającego się wzoru. Następnie narysuj swój obraz w tym szablonie w dowolnej skali.

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(); 

Twój PdfPCellEvent otrzyma wszystko, czego potrzeba w ręcznym cellLayout. Prawdopodobnie będziesz chciał użyć canvases[PdfPTable.BASECANVAS] zamiast powyższego someContent.

Będziesz chciał ukryć i ponownie użyć swojego wzorcaPainter, aby nie uzyskać duplikatu dla każdej komórki, w której go używasz. To może spowodować, że całkiem przerażający plik stanie się nieznośny. Bez beuno.

+0

Dzięki za odpowiedź. Ten projekt zakończył się prawie rok temu, ale jeśli kiedykolwiek napotkamy ten sam problem z plikami PDF, na pewno jeszcze raz to sprawdzę! – jocull

0

Spróbuj ponowne następujące 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

Czy to może rozciągnąć obraz lub go ułożyć? – jocull

Powiązane problemy