首页 文章

使用itextsharp将多个图像彼此相邻放在pdfcell中

提问于
浏览
2

我正在使用带有aspmvc项目的itextsharp来创建我的一些页面的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() . 我'd rather avoid absolute position but am prepared to try it - except I can' t弄清楚如何找到当前使用的X位置?

任何帮助非常感谢 .

亚当

1 回答

  • 5

    要获得正确的并排流程,请将图像/文本包装在 Paragraph 对象中,使用 ChunkPhrase 对象逐个添加它们 . 像这样的东西(对不起,我不做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);
    

    EDIT :在图像之间添加空格的一种方法 . 将 only 与图像一起使用;如果您使用混合文本/图像尝试此操作,它们将重叠:

    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 documentation .

相关问题