Поместить несколько изображений рядом друг с другом в pdfcell с itextsharp - PullRequest
2 голосов
/ 13 декабря 2011

Я использую itextsharp с проектом aspmvc для создания PDF-версий некоторых моих страниц.У меня есть очень простой синтаксический анализатор, который берет простой HTML (плюс некоторая информация о стиле поставляется отдельно) и создает PDF.Когда мой анализатор подключает таблицу, он перебирает строки, затем ячейки, создавая PdfPCell для каждой ячейки.Затем он перебирает дочерние элементы ячейки, добавляя их в PdfPCell.Это довольно простой, но он работает для меня до сих пор.

Проблема в том, что у меня теперь есть таблица, один столбец которой содержит несколько значков, указывающих другой статус для строки.Когда эти изображения добавляются, они оказываются друг над другом в файле PDF, а не рядом друг с другом.

Я создаю изображение с помощью

Dim I As iTextSharp.text.Image = Image.GetInstance(HttpContext.Current.Server.MapPath(El.Attributes("src").InnerText))

Я пробовал

I.Alignment = Image.TEXTWRAP Or Image.ALIGN_LEFT Or Image.ALIGN_MIDDLE

и добавление текстового чанка с пробелом, но это не помогает.Единственное предложение, которое я видел, это использовать I.SetAbsolutePosition().Я бы предпочел избежать абсолютной позиции, но я готов попробовать ее - разве что я не могу понять, как найти текущую позицию X для использования?

Любая помощь, высоко ценимая.

Адам

1 Ответ

5 голосов
/ 13 декабря 2011

Чтобы получить правильный параллельный поток, оберните изображения / текст в объект Paragraph, добавляя их одно за другим, используя объекты Chunk и Phrase. Что-то (извините, я не делаю VB), как это:

PdfPTable table = new PdfPTable(2);
PdfPCell cell = new PdfPCell();
Paragraph p = new Paragraph();
p.Add(new Phrase("Test "));
p.Add(new Chunk(image, 0, 0));
p.Add(new Phrase(" more text "));
p.Add(new Chunk(image, 0, 0));
p.Add(new Chunk(image, 0, 0));
p.Add(new Phrase(" end."));
cell.AddElement(p);
table.AddCell(cell);
table.AddCell(new PdfPCell(new Phrase("test 2")));
document.Add(table);

РЕДАКТИРОВАТЬ : Один из способов добавить пробел между изображениями. Будет только работать с изображениями; если вы попробуете это со смешанным текстом / изображениями, они будут перекрываться:

PdfPTable table = new PdfPTable(2);
PdfPCell cell = new PdfPCell();
Paragraph p = new Paragraph();
float offset = 20;
for (int i = 0; i < 4; ++i) {
  p.Add(new Chunk(image, offset * i, 0));
}
cell.AddElement(p);
table.AddCell(cell);
table.AddCell(new PdfPCell(new Phrase("cell 2")));
document.Add(table);

См. Документацию Chunk .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...