Как определить конец страницы достигается в PDF-файл, используя itextsharp - PullRequest
3 голосов
/ 27 декабря 2010

Привет Я использую itextsharp для создания PDF-файла. Я помещаю фоновое изображение на него и хочу, чтобы это изображение на всех страницах. Но когда первая страница завершена, текст автоматически перемещается на следующую страницу, поэтому изображение не появляется на новом стр.

Есть ли способ определить конец страницы, чтобы мы могли добавить новую страницу, а затем сначала установить изображение, чтобы оно отображалось в фоновом режиме, а затем можно было добавить оставшийся текст.

Все, что я хочу изображение в фоновом режиме на всех страницах PDF-файла.

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Я предлагаю вам использовать событие страницы:

myWriter.setPageEvent(new BackgroundPageEvent(backgroundImage));

class BackgroundPageEvent extends PdfPageEventHelper {
  Image backgroundImage = null;
  public BackgroundPageEvent( Image img ) {
    backgroundImage = img;
  }
  public void onStartPage(PdfWriter writer, Document doc) {
    PdfContentByte underContent = writer.getDirectContentUnder();
    underContent.addImage(backgroundImage);
  }
}

С указанным выше кодом, backgroundImage будет добавлено в «under content» при создании каждой страницы.Не нужно беспокоиться о том, когда добавлять его самому ... iText определит это для вас, и первым делом в недовольном содержании каждой страницы будет ваше изображение.Возможно, вам придется поэкспериментировать с различными переопределениями addImage, чтобы получить нужный размер.

Я полагаю, вы также можете запросить doc для текущего размера страницы, если он варьируется в вашей программе.Если нет, вы сможете создать изображение, которое вы передаете, с абсолютной позицией / масштабом (что может быть тем, что вы уже делаете).


PdfPageEvent имеет ряд других событий, которые вы можетепереопределения.PdfPageEventHelper покрывает все базы «без операций», поэтому вы можете просто переопределить нужные события:

  • OnStartPage
  • OnEndPage
  • OnCloseDocument
  • OnParagraph
  • OnParagraphEnd
  • OnChapter
  • OnChapterEnd
  • OnSection
  • OnSectionEnd
  • OnGenericTag

Общий тег действительно удобен.Вы можете присвоить универсальный тег (строку) практически чему-либо в вашем документе, и ваше переопределение OnGenericTag будет вызываться с прямоугольником, который использовался для рисования того, что было вами помечено.Все виды элегантных возможностей.

1 голос
/ 27 декабря 2010

Просто проверьте свойство PdfWriter.PageNumber следующим образом:

        using (FileStream fs = File.Create("test.pdf"))
        {
            Document document = new Document(PageSize.A4, 72, 72, 72, 72);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);

            document.Open();
            int pageNumber = -1;

            for (int i = 0; i < 20; i++)
            {
                if (pageNumber != writer.PageNumber)
                {
                    // Add image
                    pageNumber = writer.PageNumber;
                }

                // Add something else
            }

            document.Close();
        }
...