Автоматическое изображение изменяет размер в PdfPCell с iTextSharp

У меня есть странная проблема с изображениями в 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);
10
задан Zoe 23 May 2019 в 19:02
поделиться

1 ответ

Я использую 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.

14
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: