Проблема при создании PDF с использованием API iTextPDF: невозможно поддерживать порядок указанных элементов - PullRequest
1 голос
/ 31 марта 2010

Я использую API-интерфейсы itextPDF в своем проекте. Сценарий состоит в том, чтобы добавить несколько абзацев, затем добавить изображение, а затем добавить серию текста.

скажем: n раз 1. текстовое содержание 2.Image 3. ТЕКСТОВОЕ СОДЕРЖАНИЕ

Я добавил # 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 ]

1 голос
/ 31 мая 2011

Добавьте эту строку перед объявлением писателя:

writer.setStrictImageSequence(true);

Раньше у меня была такая же проблема. Я решил их с помощью этой строки.

Я нашел решение здесь: iText - вставить изображение в PDF

Документация: API

1 голос
/ 31 марта 2010

Вы хотите, чтобы изображение отображалось на самой странице? Одним из решений является использование document.next () для вставки разрыва страницы до и / или после изображения. Вы также можете попробовать обернуть все 3 ваших элемента в другой объект, такой как фразы и куски в IText.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...