2009-07-22 4 views
5

J'essaye de paver une image ou une image d'arrière-plan dans une cellule de table dans iTextSharp. Le plus proche que j'ai obtenu est d'attacher une image directement à la cellule en utilisant un PdfPTable et PdfPCell.iTextSharp: Image de tuile dans la cellule de table

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

Cela a ses problèmes, cependant. Les cellules n'ont jamais la même taille dans mes tableaux, donc les images sont mises à l'échelle automatiquement en largeur. Cela peut rendre certaines cellules très hautes comparativement à d'autres cellules, ou seulement à moitié pleines de l'image si elles sont étroites.

Des suggestions sur la façon d'obtenir les images en mosaïque, si cela est possible avec iTextSharp? Merci!

Répondre

2

Si tout le reste échoue, vous pouvez créer un motif de remplissage et définir que dans le cas de la cellule (ou remplir derrière la table entière).

Vous allez dessiner votre image dans un modèle PdfPatternPainter avec les limites que vous souhaitez pour le motif répété. Vous dessinez alors votre image dans ce modèle à l'échelle que vous voulez.

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

Votre PdfPCellEvent sera donné tout ce dont vous avez besoin dans la commande prioritaire CellLayout. Vous voudrez probablement utiliser canvases[PdfPTable.BASECANVAS] au lieu de someContent ci-dessus. Vous voudrez stocker et réutiliser votre patternPainter pour ne pas avoir de doublon pour chaque cellule dans laquelle vous l'utilisez. Cela pourrait causer un bourrage de fichier assez horrible. Pas beuno.

+0

Merci pour la réponse. Ce projet a pris fin il y a presque un an, mais si jamais nous rencontrions le même problème avec les PDF, je serais sûr de le revoir! – jocull

0

Essayez de réutiliser les éléments suivants 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

Est-ce que cela va étirer l'image ou la coller? – jocull

Questions connexes