2017-05-02 1 views
0

Ich benutze MigraDoc, um ein PDF zu erzeugen. Ich möchte einige Inhalte am Ende der letzten Seite ausrichten. Dies sind Informationen zum Haftungsausschluss, die mein Unternehmen immer in diesen Arten von Dokumenten enthält. Ziel ist es, den Inhalt vollständig zu halten und ihn immer oberhalb der Fußzeile auf der letzten Seite erscheinen zu lassen. Wenn auf der letzten Seite des tatsächlichen Inhalts nicht Platz ist, um sie zusammen zu halten, sollte ein Seitenumbruch erfolgen und der Inhalt der Tabelle sollte sich auf einer eigenen Seite befinden.MigraDoc: Ausrichten von Text oder einer Tabelle am Fuß der Seite über der Fußzeile

Ich möchte dies tun, ohne die Höhe des Inhalts zu messen.

Ich habe den Eindruck, dass ich mit TextFrame irgendwie helfen kann, aber ich kann keine Dokumentation darüber finden. Die Fragen und Beispiele, die ich online gefunden habe, beziehen sich darauf, den TextFrame "absolut positionieren" zu können, aber keines der Beispiele scheint genau das zu tun.

Als Ausgangspunkt versuche ich einen Textabsatz so zu positionieren, wie ich es auf einer ansonsten leeren Seite beschrieben habe. Hier ist mein letztes Experiment:

static void AddBoilerPlate(Section section) { 
     var sectionWidth = PdfSharp.PageSizeConverter.ToSize(PageSize.Letter).Width - section.Document.DefaultPageSetup.LeftMargin.Point - 
      section.Document.DefaultPageSetup.RightMargin.Point; 

     section.AddPageBreak(); 
     var frame = section.AddTextFrame(); 
     frame.RelativeVertical = RelativeVertical.Page; 
     frame.Width = sectionWidth; 
     frame.Top = ShapePosition.Bottom; 
     frame.AddParagraph(DisclaimerText); 
    } 

Der Text beginnt knapp oberhalb der Fußzeile (die blauen Linie in diesem Screenshot) und läuft dann über die Fußzeile:

enter image description here

Sobald ich einen Absatz des Textes erhalten ausgerichtet, dann werde ich in der Lage sein, stattdessen eine Tabelle mit einer Spalte und einer Zeile zu verwenden und dann meinen gesamten Inhalt dort hineinzulegen.

Update: hier ist ein Screenshot mein Ziel zeigt (gefälscht einen Seitenumbruch mit und Spacebefore):

enter image description here

Update: Hier sind einige relevante Artikel, die ganz verstehen Sie mich nicht, wo ich bin zu gehen versucht: mit einem Textframe

Update: Beachten Sie, dass auf die Textframe eine Höhe Hinzufügen macht den Text ausrichten, wie ich brauche es. Es ist nicht ideal, weil ich die Höhe lieber nicht fest codiere. Aber es produziert, um den gewünschten Effekt:

static void AddBoilerPlate(Section section) { 
     var sectionWidth = PdfSharp.PageSizeConverter.ToSize(PageSize.Letter).Width - section.Document.DefaultPageSetup.LeftMargin.Point - 
      section.Document.DefaultPageSetup.RightMargin.Point; 

     section.AddPageBreak(); 
     var frame = section.AddTextFrame(); 
     frame.RelativeVertical = RelativeVertical.Page; 
     **frame.Height = new Unit(75, UnitType.Millimeter);** 
     frame.Width = sectionWidth; 
     frame.Top = ShapePosition.Bottom; 
     frame.AddParagraph(DisclaimerText); 
    } 

Update: Beachten Sie jedoch, dass die Textframe-Höheneinstellung nicht das ultimative Problem nicht lösen. Inhalt, der vor dem Textbaustein hinzugefügt wurde, sollte den Textbaustein auf die nächste Seite verschieben, wenn nicht genügend Platz dafür vorhanden ist, und das ist nicht der Fall.

Antwort

0

Update: Nach dem Ausprobieren selbst (ich hatte das gleiche Problem), fügen Sie ein unsichtbares Element mit der Höhe, die Sie kurz vor dem unteren Element haben möchten. Falls das unsichtbare Element nicht passt, scheint der Seitenumbruch wegen des unteren Elements aufgetreten zu sein. Funktioniert wie ein Charme. (Tipp Ich habe einen Rahmen für beide Elemente zum Testen hinzugefügt, so dass ich sicherstellen konnte, dass das Layout korrekt war)

+1

Vorschläge sollten als Kommentar hinzugefügt werden. – Sunil

Verwandte Themen