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

时间:2010-03-31 14:45:35

标签: itext

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

说:n次 1.TEXT内容 2.IMAGE 3.TEXT内容

我在段落中添加了#1 TEXT CONTENT,#2.IMAGE和#3,然后进行了记录。 我尝试了两个小图像和一个大图像(需要在pdf上呈现一页) 小的工作正常,但是当试图添加更大的图像时,上面的顺序不合适。

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

整页所以继续下一页,但是当前页面上的文字在图片上悄悄上升,这是不可预期的。

我尝试使用Paragraph添加到章节,该章虽然有效,但总是显示章节编号。当我设置chapter.setTriggerNewPage(false)相同时

看到上面详述的行为。

我已经附上了这两个来源,我是否可以请求您帮我解决此问题。

1。使用段落

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

       document.add(p2);
       document.add(p1);        
       document.add(p);



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

}

2.使用章节

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

}

提前致谢, 基兰

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

writer.setStrictImageSequence(true);

我曾经遇到过同样的问题。我用这条线解决了他们。

我在这里找到了解决方案:iText - Insert image into PDF

文档:API