使用iTextPDF API创建PDF时遇到问题:无法维护指定元素的顺序

使用iTextPDF API创建PDF时遇到问题:无法维护指定元素的顺序,itext,Itext,我正在我的项目中使用itextPDF API。场景是添加几个段落,然后是一个图像,然后是一系列文本 说:n次 1.文本内容 2.形象 3.文本内容 我将#1文本内容#2图像和#3添加到段落中,然后添加到文档中。 我尝试了两幅图像,一幅小,一幅大(需要一页才能在pdf上呈现) 小的效果很好,但当试图添加一个更大的图像时,上面的序列不符合顺序 在图像开始出现后添加的文本,在图像滑到下一页之前。这是因为图像需要一个文本 整个页面继续到下一页,但图片下方的文本在当前页面上爬行,这是不可预料的 我尝试在章

我正在我的项目中使用itextPDF API。场景是添加几个段落,然后是一个图像,然后是一系列文本

说:n次 1.文本内容 2.形象 3.文本内容

我将#1文本内容#2图像和#3添加到段落中,然后添加到文档中。 我尝试了两幅图像,一幅小,一幅大(需要一页才能在pdf上呈现) 小的效果很好,但当试图添加一个更大的图像时,上面的序列不符合顺序

在图像开始出现后添加的文本,在图像滑到下一页之前。这是因为图像需要一个文本

整个页面继续到下一页,但图片下方的文本在当前页面上爬行,这是不可预料的

我尝试在章节中添加段落,这很有效,但始终会显示章节号。当我设置Chapter.setTriggerNewPage(false)时,设置相同

如上所述的行为已被观察到

我已经附上了这两个来源,我可以请求你帮助我解决这个问题

1.使用段落 2.使用章节
publictest3(){
//TODO自动生成的构造函数存根
}
公共静态图像getImageFromResource(字符串URI){
图像=空;
试一试{
image=image.getInstance(URI);
}捕获(Badelement异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回图像;
}
公共静态void main(字符串[]args){
文件=新文件(PageSize.A4、50、50、50、50);
试一试{
getInstance(文档,新文件输出流(“D:\\test\\TestPage.pdf”);
document.open();
第p段=新的第()段;
p、 添加(“图像前预期的文本”);
第p1段=新的第()段;
Image=getImageFromResource(“D:\\test\\test.jpg”);
p1.添加(图像);
第p2段=新的第()段;
p2.添加(“图像后预期文本”);

对于(int i=0;i是否希望在页面上呈现图像?一种解决方案是使用document.next()在图像之前和/或之后插入分页符。您还可以尝试将所有3个元素包装到另一个对象中,例如IText中的短语和块。

在编写器声明之前添加此行:

writer.setStrictImageSequence(true);
我以前也有同样的问题。我用这条线解决了它们

我在这里找到了解决方案:


文档:

您可以使用任何其他第三方dll创建pdf吗?如果可以,请告诉我,我将为您提供另一个用于创建pdf的第三方dll的参考。
public Test3() {
    // TODO Auto-generated constructor stub
}

public static Image getImageFromResource(String URI){       
    Image image = null;
    try {
        image = Image.getInstance(URI);
    } 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();
    }

    return image;
}
public static void main(String[] args) {

     Document document = new Document(PageSize.A4, 50, 50, 50, 50);
      try {


       PdfWriter.getInstance(document , new FileOutputStream("D:\\test\\TestPage.pdf"));

       document.open(); 

       Paragraph p = new Paragraph();

       p.add("TEXT EXPECTED BEFORE IMAGE ");

       Paragraph p1 = new Paragraph();
       Image image =  getImageFromResource("D:\\test\\Test.jpg");          
       p1.add(image);

       Paragraph p2 = new Paragraph();
       p2.add("TEXT EXPECTED AFTER IMAGE ");

       for(int i=0;i<10;i++){

       Chapter chapter1 = new Chapter(p, 1);

       Chapter chapter2 = new Chapter(p1, 2);

       Chapter chapter3 = new Chapter(p2, 3);         

       document.add(chapter1);
       document.add(chapter2);
       document.add(chapter3);
  }  




      } catch(DocumentException de) {
       System.err.println(de.getMessage());
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}
      document.close();

}
writer.setStrictImageSequence(true);