Проще понять, что происходит, если вы просматриваете источник . Таблица в iText хранит свойство под названием DefaultCell
, которое многократно используется снова и снова. Это делается для того, чтобы основные свойства ячейки сохранялись от ячейки к ячейке. Когда вы вызываете AddCell(Image)
, изображение DefaultCell
устанавливается на изображение, затем добавляется в таблицу, и, наконец, изображение получает null'd out.
543 defaultCell.Image = image;
544 AddCell(defaultCell);
545 defaultCell.Image = null;
Конструктор PdfCell(Image)
фактически вызывает внутреннюю перегрузку PdfPCell(Image, bool)
и передает false
в качестве второго параметра, fit
. Вот условие конструктора при подгонке:
152 if (fit) {
153 this.image = image;
154 Padding = borderWidth / 2;
155 }
156 else {
157 column.AddText(this.phrase = new Phrase(new Chunk(image, 0, 0, true)));
158 Padding = 0;
159 }
Если вы передадите false
для подгонки, что является значением по умолчанию, вы увидите, что изображение добавляется гораздо более сложным способом.
Таким образом, в принципе, вы можете добавить изображение тремя основными способами (хорошо, гораздо больше, если вы используете вложенные таблицы, фрагменты или фразы), первое ниже выбирает значения по умолчанию и, вероятно, то, что вы хотите. Второй более сырой, но приближает вас к тому, что вы, вероятно, хотите. Третий - самый грубый и предполагает, что вы знаете, что делаете.
var qrImg = iTextSharp.text.Image.GetInstance(sampleImage1);
//Use the DefaultCell, including any existing borders and padding
pdfTable.AddCell(qrImg);
//Brand new cell, includes some padding to get the image to fit
pdfTable.AddCell(new PdfPCell(qrImg, true));
//Brand new cell, image added as a Chunk within a Phrase
pdfTable.AddCell(new PdfPCell(qrImg));