У меня есть странная проблема с изображениями в iTextSharp библиотеке. Я добавляю изображение к PdfPCell, и по некоторым причинам это увеличено. Как я сохраняю его к первоначальному размеру?
Я, хотя это изображения было бы тем же при печати, но различием на рис. является то же на печатной версии. Необходимость вручную масштабировать изображение с ScaleXXX, чтобы заставить это исправляться кажется немного нелогичной и не дает хороший результат.
Таким образом, как я помещаю изображение в его первоначальный размер в PdfPCell таблицы, не имея необходимость масштабировать его?
Вот мой код:
private PdfPTable CreateTestPDF()
{
PdfPTable table = new PdfPTable(1);
table.WidthPercentage = 100;
Phrase phrase = new Phrase("MY TITLE", _font24Bold);
table.AddCell(phrase);
PdfPTable nestedTable = new PdfPTable(5);
table.WidthPercentage = 100;
Phrase cellText = new Phrase("cell 1", _font9BoldBlack);
nestedTable.AddCell(cellText);
cellText = new Phrase("cell 2", _font9BoldBlack);
nestedTable.AddCell(cellText);
cellText = new Phrase("cell 3", _font9BoldBlack);
nestedTable.AddCell(cellText);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(@"d:\MyPic.jpg");
image.Alignment = iTextSharp.text.Image.ALIGN_CENTER;
PdfPCell cell = new PdfPCell(image);
cell.HorizontalAlignment = PdfPCell.ALIGN_MIDDLE;
nestedTable.AddCell(cell);
cellText = new Phrase("cell 5", _font9BoldBlack);
nestedTable.AddCell(cellText);
nestedTable.AddCell("");
string articleInfo = "Test Text";
cellText = new Phrase(articleInfo, _font8Black);
nestedTable.AddCell(cellText);
nestedTable.AddCell("");
nestedTable.AddCell("");
nestedTable.AddCell("");
table.AddCell(nestedTable);
SetBorderSizeForAllCells(table, iTextSharp.text.Rectangle.NO_BORDER);
return table;
}
static BaseColor _textColor = new BaseColor(154, 154, 154);
iTextSharp.text.Font _font8 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font8Black = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
iTextSharp.text.Font _font9 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 9, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font9BoldBlack = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 9, iTextSharp.text.Font.BOLD, BaseColor.BLACK);
iTextSharp.text.Font _font10 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font10Black = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
iTextSharp.text.Font _font10BoldBlack = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.BOLD, BaseColor.BLACK);
iTextSharp.text.Font _font24Bold = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 24, iTextSharp.text.Font.BOLD, _textColor);
Я использую iTextSharp v4.1.2 и получаю следующее поведение:
Используя этот код, добавляю изображение непосредственно в таблицу с помощью метода AddCell изображение масштабируется до размера ячейки:
nestedTable.AddCell(image);
Используя этот код, добавляя изображение в ячейку, а затем добавляя ячейку в таблицу, изображение отображается в исходном размере:
PdfPCell cell = new PdfPCell(image);
cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
nestedTable.AddCell(cell);
Have вы добавили изображение непосредственно в PDF-документ (за пределами таблицы), просто чтобы сравнить / перепроверить размеры изображений?
document.add(image);
Я предполагаю, что вы хотите, чтобы изображение было центрировано в ячейке с некоторым пространством вокруг него. В крайнем случае вы можете изменить свой имидж. Сделайте это png с прозрачным фоном и просто убедитесь, что есть какие-то прозрачные «поля» по всем краям вашего изображения.
РЕДАКТИРОВАТЬ
Я только что загрузил v5.0.2 и получаю те же результаты, что и упомянутые выше. Я пробовал это с изображениями, которые и меньше, и больше, чем размер ячейки, и поведение такое же; первый метод масштабирует изображение, второй - нет.
РЕДАКТИРОВАТЬ
Ну, очевидно, я много лет ошибался насчет DPI, когда дело касалось изображений.Кажется, я не понимаю, что это вообще имеет значение, каков DPI изображения.
Я создал изображение 600x400 пикселей с тремя разными разрешениями: 72, 96 и 110 точек на дюйм. Затем я добавил каждое из этих изображений в новый документ размером ровно 600x400.
Dim pSize As Rectangle = New Rectangle(600, 1000)
Dim document As Document = New Document(pSize, 0, 0, 0, 0)
Для каждого из трех файлов изображений, когда они добавлены в документ с помощью
document.add(image)
, они идеально вписываются в документ, без различий для различных настроек DPI.