2009-07-22 39 views
5

Tôi đang cố gắng lát hình ảnh hoặc hình nền trong ô bảng trong iTextSharp. Gần nhất tôi đã nhận được là đính kèm hình ảnh trực tiếp vào ô bằng cách sử dụng PdfPTable và PdfPCell.iTextSharp: Hình ảnh xếp kề trong ô bảng

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

Điều này có vấn đề. Các ô không bao giờ có cùng kích thước trong các bảng của tôi, vì vậy các hình ảnh được tự động thu nhỏ theo chiều rộng. Điều này có thể làm cho một số tế bào cao thêm tương đối so với các tế bào khác, hoặc chỉ một nửa đầy đủ của hình ảnh nếu chúng hẹp.

Bất kỳ đề xuất nào về cách lấy hình ảnh ốp lát, nếu nó thậm chí có thể với iTextSharp? Cảm ơn!

Trả lời

2

Nếu vẫn thất bại, bạn có thể tạo một mẫu điền và thiết lập rằng trong trường hợp tế bào (hoặc điền vào đằng sau toàn bộ bảng).

Bạn sẽ vẽ hình ảnh của mình thành mẫu PdfPatternPainter với các giới hạn bạn muốn cho mẫu lặp lại. Sau đó, bạn vẽ hình ảnh của mình vào mẫu này ở bất kỳ quy mô nào bạn muốn.

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 của bạn sẽ được cung cấp mọi thứ bạn cần trong ghi đè cellLayout. Có thể bạn sẽ muốn sử dụng canvases[PdfPTable.BASECANVAS] thay cho số someContent ở trên.

Bạn sẽ muốn cất giấu và sử dụng lại patternPainter của mình để bạn không bị trùng lặp với từng ô bạn sử dụng. Điều đó có thể gây ra một số tệp bloat khá khủng khiếp. Không beuno.

+0

Cảm ơn câu trả lời. Dự án này đã kết thúc cách đây gần một năm nhưng nếu chúng tôi gặp phải vấn đề tương tự với các tệp PDF, tôi chắc chắn sẽ xem xét lại vấn đề này! – jocull

0

Cố gắng tái sử dụng sau 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

Thao tác này có kéo giãn hình ảnh hoặc lát không? – jocull

Các vấn đề liên quan