Ich versuche, ein HTML-Dokument als PDF mit wkhtmltopdf.exe rendern, die ich von einer C # -Webanwendung aufrufen.
Das HTML-Dokument muss sowohl eine Fußzeile als auch eine Kopfzeile enthalten, die auf jeder Seite wiederholt werden. Dies ist mit wkhtmltopdf möglich, indem Sie --header-html <a path>
als Argument angeben.
Die Fußzeile wird jedoch dynamisch aus einer Razor-Ansicht gerendert, und ich möchte sie lieber nicht in einer temporären Datei auf der Festplatte speichern und diesen Pfad verwenden, aber ich möchte den gerenderten HTML-Code verwenden, der sich bereits im Speicher befindet. Das ist für das Dokument selbst möglich, indem Sie wie folgt in den StandardInput
stream schreiben:
Ist es möglich, dasselbe für den Header- und Footer-HTML zu tun, nämlich es inline weiterzugeben, ohne auf temporäre Dateien zurückgreifen zu müssen?
Ich habe es versucht:
%Vor%Aber natürlich behandelt es das nur als Teil des Dokuments, nicht als Fußzeile.
Der Hauptgrund, warum ich Footer und Header auch dynamisch rendern möchte, ist (meistens) durch ein anderes Problem verursacht. Es wäre zwar schön, eine dynamische Kopf- und Fußzeile zu haben, aber hauptsächlich, um das Problem zu lösen, dass ich Bilder mit einem absoluten Pfad verlinken muss (zB: C: \ templates \ images \ logo.png), weil relative Pfade (zB: images / logo.png) funktionieren nicht, wenn du stdin verwendest und einfach einen String Blob von HTML übergibst, also muss ich zur Laufzeit den absoluten Pfad durch Razor einfügen.
Für dieses Problem habe ich versucht, das Arbeitsverzeichnis des Prozesses so einzustellen, dass es den relativen Pfaden entspricht, aber ohne Erfolg:
%Vor%Wenn ich dieses Problem lösen könnte, würde das 90% des Problems ebenfalls lösen.
Beachten Sie, dass Sie diesen JulianR gelöst haben, und ich nehme auch an, dass Sie in MVC sind (?) Wenn nicht, können Sie den ursprünglichen Code unten ignorieren, aber ich hatte eine ähnliche Situation, bei der ich die Ausgabe direkt an wkhtmltopdf streamen musste, wegen der sicheren und eingeloggten Abschnitte einer Site.
Erstens können Sie in einer Steuerung die Ansicht, die Sie für die Anzeige benötigen, mit jeder anwendbaren Masterseite (die selbst Kopf- und Fußzeilen verwenden kann) ziehen:
%Vor%Sie erhalten dann eine aktuelle Ansicht mit allen notwendigen ViewData, Tempdata usw. und speichern diese in einer Zeichenkette (Inhalt unten):
%Vor%in diesem Stadium könnten Sie tatsächlich Ihre Ausgabe HTML in der Zeichenfolge ändern, falls erforderlich - z. um alle lokalen Pfade zu vollständigen Pfaden zu ändern
Wenn Sie HTML ausgeben, gehen Sie einfach in wkhtmltopdf über:
%Vor%Sie haben dann ein Byte-Array, das Ihren PDF-Inhalt der ganzen Seite enthält.
Tags und Links c# razor wkhtmltopdf stdin