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

Java 在文本模式下使用ColumnText时如何在iText中添加内联图像,java,itext,Java,Itext,当我向ColumnText添加包含内联图像的短语时,图像似乎与生成的pdf中的上述段落重叠,即如何在使用ColumnText时添加内联图像。 与该问题一起生成的示例pdf文件的链接如下所示 谢谢。请看一下示例。它添加了一个包含包装在块中的图像的文本。根据图像的高度自动调整前导: 实现这一点的代码与您的非常相似: private void processImage(Phrase phrase, Picture picture, ColumnText column) { // TODO

当我向ColumnText添加包含内联图像的短语时,图像似乎与生成的pdf中的上述段落重叠,即如何在使用ColumnText时添加内联图像。 与该问题一起生成的示例pdf文件的链接如下所示

谢谢。

请看一下示例。它添加了一个包含包装在
块中的图像的文本。根据图像的高度自动调整前导:

实现这一点的代码与您的非常相似:

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();
        }
    }
}
我看到的唯一明显区别是,您使用:

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();

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

是的,对不起,add方法不存在,我键入了源代码中没有粘贴的代码,这是错误,但高度并没有像u回答的那样调整:)如果我在添加短语之前将前导值设置为其他值,我认为默认值是覆盖,并且图像占据了前导值,对吗?我不知道,因为你没有给我显示一个。我做了一个例子来演示前导是经过调整的,这样图像就不会与前一行重叠。如果你需要帮助,你应该提供一个相反的例子。
column.add(phrase);