2010-12-27 5 views
3

Hallo Ich benutze itextsharp, um eine PDF-Datei zu generieren. Ich bin ein Backgound-Bild darauf und möchte dieses Bild auf allen Seiten. Aber wenn die erste Seite Der Text wird automatisch auf die nächste Seite verschoben, damit das Bild nicht auf der neuen Seite angezeigt wird.So erkennen Sie das Ende der Seite in PDF-Datei erreicht mit itextsharp

Gibt es eine Möglichkeit, das Ende der Seite zu identifizieren, so dass wir eine neue Seite hinzufügen und legen Sie dann das Bild zuerst werden so im Hintergrund erscheinen und dann den restlichen Text hinzufügen kann.

Alles ist ich will ein Bild im Hintergrund auf allen Seiten der PDF-Datei.

Antwort

1

einfach überprüfen PdfWriter.PageNumber Eigenschaft wie folgt:

 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(); 
     } 
+0

Wenn Sie etwas Großes in "etwas hinzufügen" hinzufügen, können Sie sogar eine Seite überspringen. Und wenn etwas etwas auf der nächsten Seite hängt, können Sie einen Teil davon mit Ihrem "Hintergrundbild" abdecken (abhängig davon, wie Sie das Bild hinzufügen) –

+0

Danke AS-CII für die Lösung. Ich kann das Hintergrundbild auf allen meinen PDF-Seiten mit Ihrer Lösung einstellen. –

2

Ich schlage vor, Sie eine Seite Ereignis verwenden:

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

Mit dem obigen Code wird backgroundImage auf die "unter Inhalt" hinzugefügt werden wie jede Seite erstellt wird. Sie brauchen sich keine Gedanken darüber zu machen, wann Sie es selbst hinzufügen müssen ... iText wird das für Sie herausfinden, und das erste, was im Unterinhalt jeder Seite steht, ist Ihr Bild. Sie müssen möglicherweise mit den verschiedenen Overrides von addImage herumspielen, um die gewünschte Größe zu erhalten.

Ich glaube, Sie auch doc für die aktuelle Seitengröße abfragen kann, wenn es in Ihrem Programm variiert. Wenn nicht, sollten Sie in der Lage sein, das Bild, an dem Sie teilnehmen, mit einer absoluten Position/Skala zu erstellen (was Sie möglicherweise bereits getan haben).


PdfPageEvent verfügt über eine Reihe anderer Ereignisse, die Sie überschreiben können. PdfPageEventHelper deckt alle Basen mit "no ops", so dass Sie nur das Ereignis überschreiben können [s] Sie wollen:

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

Generic Tag ist eigentlich wirklich praktisch. Sie können einem beliebigen Element in Ihrem Dokument ein generisches Tag (eine Zeichenfolge) zuweisen, und Ihr OnGenericTag-Override wird mit dem Rect aufgerufen, mit dem Sie gezeichnet haben, was auch immer Sie getaggt haben. Alle möglichen schlauen Möglichkeiten.