在文本模式下使用ColumnText时,如何在iText中添加内嵌图像

时间:2015-06-15 10:43:33

标签: java itext

private void processImage(Phrase phrase, Picture picture, ColumnText column)
{
    // TODO Auto-generated method stub
    byte[] pictureData = picture.getContent();
        float ls = 12.0f;
        float multiline = 1.0f;
        column.setLeading(ls, multiline);
        pictureData = WordToPdfUtils.getMetaFileAsImage(pictureData);           

    if (pictureData != null) {
        try {
            Image pic = Image.getInstance(pictureData);
            float[] scwh = scaleInlinePicture(picture);
            pic.scaleAbsolute(scwh[0], scwh[1]);
            phrase.add(new Chunk(pic, 0, 0, true)); 
            column.addText(phrase);         
        } catch (BadElementException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

当我将包含内嵌图像的短语添加到ColumnText时,图像在生成的pdf中的上述段落上重叠,如何在使用ColumnText时添加内嵌图像。 使用该问题生成的示例pdf文件的链接如下所示

pdf sample with inline picture issue 谢谢。

1 个答案:

答案 0 :(得分:0)

请查看ColumnTextChunkImage示例。它添加了一个包含Chunk包含图像的文本。根据图像的高度自动调整前导:

enter image description here

实现此目的的代码与您的代码非常相似:

Image dog = Image.getInstance(DOG);
Image fox = Image.getInstance(FOX);
Phrase p = new Phrase("quick brown fox jumps over the lazy dog.");
p.add("Or, to say it in a more colorful way: quick brown ");
p.add(new Chunk(fox, 0, 0, true));
p.add(" jumps over the lazy ");
p.add(new Chunk(dog, 0, 0, true));
p.add(".");
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(new Rectangle(50, 600, 400, 800));
ct.addText(p);
ct.go();

我看到的唯一明显区别是你使用:

column.add(phrase);

这种方法并不存在于iText的官方版本中。您可以addText()(文本模式)或addElement()(复合模式)。我的猜测是你正在使用非官方版的iText。不幸的是,有些人使用FFF原理创建了iText的分叉:Fork,F ***,Forget。如果您使用的是这样的叉子并且不想被人理解或忘记,请切换到使用官方版本的iText。