2016-06-27 9 views
0

Guten Tag alle!itextpdf anderer Rand auf bestimmter Seite

Ich habe einige Fragen in Bezug auf Dokument:

  1. Hat itextpdf die Möglichkeit hat, eine andere Marge auf einer bestimmten Seite zu haben? Ich habe versucht,

document.setMargin

dann

document.newPage

zu verwenden, aber es scheint, dass jede Seite die gleiche Marge bekommen.

  1. Gibt es eine Möglichkeit zu verhindern, dass sich Header und Element überschneiden?

Dank!

EDIT

Hier ist die Methode, die den Inhalt des Dokuments ergänzt:

@Override 
    void addDocumentContent(Document doc, PdfWriter writer, AbstractDiplomaDataModel diplomaData) throws DiplomaPdfFileProducerException { 
     try { 
      doc.setMargins(DefaultPdfDocumentSettings.LEFT_MARGIN, DefaultPdfDocumentSettings.RIGHT_MARGIN, 0f, 0f); 
      doc.newPage();   
      doc.add(new DiplomaPdfDataGenerator(diplomaData).generateFirstPagePdf()); 
      doc.setMargins(DefaultPdfDocumentSettings.LEFT_MARGIN, DefaultPdfDocumentSettings.RIGHT_MARGIN, DefaultPdfDocumentSettings.TOP_MARGIN,DefaultPdfDocumentSettings.BOTTOM_MARGIN); 
      doc.newPage();   
      doc.add(new DiplomaPdfDataGenerator(diplomaData).generateOtherPagesPdf()); 
     } catch (Exception e) { 
      throw new DiplomaPdfFileProducerException(e.getMessage()); 
     } 
    } 

und das ist das Ergebnis:

title page, margin is changed

overlap

+0

Was ergeben 'DiplomaPdfDataGenerator.generateFirstPagePdf()' und 'DiplomaPdfDataGenerator.generateOtherPagesPdf()' return? Und wie generieren Sie Ihre Header? Und was sind die Werte dieser 'DefaultPdfDocumentSettings' Konstanten? Ansonsten sieht der Code wie der Code in meiner Antwort aus, der wie erwartet funktioniert. Daher ist etwas Besonderes an diesen Objekten oder Mechanik. – mkl

+0

Es hat funktioniert. Die generateFirstPagePdf() und generateOtherPagesPdf() geben Absatz/Element zurück. Ich habe gerade den Unterschied nicht bemerkt, weil DefaultPdfDocumentSettings.TOP_MARGIN 20 ist. Ich habe den oberen Rand auf 60 geändert, und ich habe den Unterschied bemerkt – triForce420

+1

Großartig! Ich begann mich zu fragen, was diese Methoden zurückgeben könnten, damit das Ergebnis die Ränder ignoriert ...;) – mkl

Antwort

5

Ich habe gerade versucht, was Sie beschrieben:

StringBuilder builder = new StringBuilder("test"); 
for (int i = 0; i < 100; i++) 
    builder.append(" test"); 
String test = builder.toString(); 

try ( OutputStream pdfStream = new FileOutputStream(new File(RESULT_FOLDER, "ChangingMargins.pdf"))) 
{ 
    Document pdfDocument = new Document(PageSize.A4.rotate(), 0, 0, 0, 0); 
    PdfWriter.getInstance(pdfDocument, pdfStream); 
    pdfDocument.open(); 

    for (int m = 0; m < pdfDocument.getPageSize().getWidth()/2; m += 100) 
    { 
     pdfDocument.setMargins(m, m, 100, 100); 
     pdfDocument.newPage(); 
     pdfDocument.add(new Paragraph(test)); 
    } 

    pdfDocument.close(); 
} 

(ChangeMargins.java Methode testChangingMargins)

Das Ergebnis:

Screenshot

So wird Ihr Artikel unter Berücksichtigung 1: Ja, iText kann einen anderen Rand auf einer bestimmten Seite haben.

Die OP fragte sich in einem Kommentar:

wie etwa oberen und unteren Rand?:/

Dazu änderte ich die Schleife oben:

for (int m = 0; m < pdfDocument.getPageSize().getWidth()/2 && m < pdfDocument.getPageSize().getHeight()/2; m += 100) 
    { 
     pdfDocument.setMargins(m, m, m, m); 
     pdfDocument.newPage(); 
     pdfDocument.add(new Paragraph(test)); 
    } 

Und das Ergebnis:

Screenshot

verschiedene obere und unteren Rand der Arbeit, zu So.


Unter Berücksichtigung Ihrer Ausgabe 2, ob es eine Möglichkeit, Kopf- und Element zu verhindern überlappt: In der Regel überlappen sie nicht.

+0

Wie wäre es mit dem oberen und unteren Rand? :/ – triForce420

+0

Vgl. mein Schnitt, nach dem offensichtlichen Wechsel verändern sich auch die vertikalen Ränder. – mkl

+0

Ich habe meinen Post bearbeitet, um eine Codezeile und einen Screenshot hinzuzufügen, was nach dem Hinzufügen von Inhalten passiert – triForce420