2009-07-22 41 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のオーバーライドに必要なすべてを与えられます。上記のsomeContentの代わりにcanvases[PdfPTable.BASECANVAS]を使用します。

パターンペインターを隠して再利用して、使用しているセルごとに複製を作成しないようにしてください。そうすれば、恐ろしいファイルが肥大化する可能性があります。ベノはありません。

+0

答えをありがとう。このプロジェクトはほぼ1年前に終了しましたが、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); 
      } 

チャオ

+0

これは画像を伸ばしたり、タイル張りしますか? – jocull

関連する問題