2016-06-02 22 views
0

Wir verwenden Migradoc, um PDFs zu generieren, die Header-Abschnitte enthalten, so dass die Header auf jeder Seite angezeigt werden.Dynamische Headerhöhe von PDF erhalten

Die Höhe des Inhalts in der Kopfzeile kann jedoch variieren. Ich stelle die Position des Körperinhaltes unter Verwendung document.DefaultPageSetup.TopMargin ein. Dies ist jedoch derzeit ein festgelegter "Best Rate" -Wert. Manchmal ist der Inhalt größer und verursacht eine Überlappung.

Ich brauche eine Möglichkeit, die Höhe des Headers zu berechnen, so dass ich den document.DefaultPageSetup.TopMargin Wert entsprechend einstellen kann.

Ich gehe davon aus, ich muss es in zwei Durchgängen tun - z. Generieren Sie die PDF-Datei, überprüfen Sie die Höhe der gerenderten Kopfzeile und erstellen Sie die PDF-Datei erneut, indem Sie document.DefaultPageSetup.TopMargin eingeben.

Ich sehe keine Möglichkeit, die Höhe der Kopfzeile zu überprüfen, sobald ich das PDF zum ersten Mal gerendert habe. Ich bemerke, dass es eine Methode namens GetRenderInfoFromPage() in der DocumentRenderer gibt. Das sieht so aus, wie ich es will, außer dass es die Headerdaten nicht zu enthalten scheint. Wenn ich in der ersten PDF-Generierung nur den Header auf der ersten Seite rendere und keinen Inhalt, dann gibt GetRenderInfoFromPage(1) ein leeres Array zurück. Wenn ich es auf einer anderen Seite als 1 anrufe, gibt es null zurück.

Wir verwenden auch PdfSharp als letzten Durchgang, um ein Wasserzeichen hinzuzufügen. Also möglicherweise, wenn ich die Headerhöhe mit diesem abfragen kann - das könnte auch funktionieren? Ich kann aber auch keinen Weg finden, dies zu tun.

Weiß jemand, ob es möglich ist, die gerenderte Headerhöhe abzufragen?

Antwort

1

Ich habe das funktioniert mit der Methode, die ich in meiner Frage erwähnt, außer dass für den ersten Durchlauf habe ich den Header-Inhalt in den Körper anstelle des Header-Bereich gerendert. Das bedeutete, dass die DocumentRenderer.GetRenderInfoFromPage() dann funktionierte. Dieser Durchlauf wurde nur zur Berechnung der Header-Inhaltshöhe verwendet. Dann rendert es für den zweiten Durchlauf den Header-Inhalt wie üblich in den Header.