Frage an grails, java, rendering, pdf-generation – Grails Rendering Plugin CSS-Problem

3

Ich habe gerade das Grails-Rendering-Plugin installiert und möchte es zum Generieren von PDF-Dateien verwenden. Ich habe eine einfache Vorlage erstellt, diese wird jedoch ohne CSS-Stile exportiert. Wenn ich einfach eine Vorlage aus Grails rendere, wird die Seite mit allen Stilen in meinem Webbrowser angezeigt.

Meine Frage ist also, wie man CSS-Dateien während des PDF-Generierungsprozesses korrekt einfügt.

Meine Vorlage:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
    <link rel="stylesheet" href="${resource(dir:'css',file:'webui.css')}" />
    <r:layoutResources/>
    <title>Report</title>
</head>
<body>
    <div id="content">
        <div id="center-container">
        <h1><g:message code="default.list.label" args="[entityName]" /></h1>
        <table>
            <thead>
                <tr>
                    <th class="trip">trip</th>
                </tr>
            </thead>
            <tbody>
                <tr class="odd">
                    <td>
                        ${tip}
                    </td>
                </tr>
            </tbody>
        </table>
</div>
    </div>
</body>
</html>

Und ich habe style .odd in meiner webui.css, aber es wird nicht auf die Zeile angewendet.

Jede Hilfe wäre dankbar.

Edit1: Ich habe herausgefunden, dass Stile abgerufen werden, wenn ich das folgendermaßen mache:

<link rel="stylesheet" href="my_appname${resource(dir:'css',file:'main.css')}" />

Ich möchte den Anwendungsnamen jedoch nicht fest codieren (dies ist auch ein Basiskontextpfad). Gibt es eine bessere Möglichkeit, einen richtigen Link zu einer CSS-Datei zu generieren?

Deine Antwort

3   die antwort
3

aber ich wollte meine Erfahrungen hier mit dem Rendern von PDF in Grails teilen. Ich habe die folgenden Schritte ausgeführt und bin zum nächsten übergegangen, bis ich ein PDF erhalten habe:

Verwendete das Ressourcen-Plugin in der Vorlage gsp, um ein Modul zu finden, in dem CSS gebündelt wurde.

Zum Beispiel: Test.gsp

<html>
<head>
  <r:require modules="bootstapApp"/>
  <r:layoutResources/>
</head>
<body>
   ....
   <r:layoutResources/>
</body>
</html>

Das Obige hat gut funktioniert, aber die Stile wurden nach dem Rendern nicht im PDF verwendet. Ich musste zu Schritt 2 übergehen.

2. Begonnen mit dem Tag, wie oben in der Problembeschreibung erwähnt. Ergebnis: Keine Änderung. Ich konnte die Formatvorlagen nicht im PDF abrufen. Failover zu Schritt 3

3.Fügte die Stile inline in der Vorlage gsp hinzu. Und dann konnte ich sie auf das PDF anwenden. Beachten Sie, dass das Einfügen von Inlinern in die Vorlage umständlich ist, wenn Sie Schritt 3 ausführen und CSS wie bootstrap.css verwenden. Vergessen Sie nicht, sie in das Medien-Tag einzufügen, auch wenn wir sie hinzufügen. Für mich hat das Folgende perfekt funktioniert:

<style type="text/css">
@media all {
    //CSS styles goes here
}
</style>
0

aber am Ende habe ich nur den Inhalt der externen Datei in die gsp für das PDF-Rendering eingebettet:

https://stackoverflow.com/a/32767378/1599616

2

grails.serverURL in Config.groovy zur App-URL (z. B. grails.serverURL = http: // localhost: 8080 / appname). Das Plugin löst alle relativen Links über diese Einstellung auf

Danke für die Antwort. Es ist tatsächlich so eingestellt: development {grails.logging.jul.usebridge = true grails.serverURL = "localhost: 8080 / ${App Name}" } Alex K.
Ja, vor 'localhost' steht ein 'http'. Auch ich habe versucht, absoluten Pfad zu verwenden, aber in diesem Fall wird er wie http: // localhost: 8080 / appname / css / main.css erzeugt, was falsch ist, da css in appname / static / css / main.css liegt Alex K.
Ich habe das beobachtetlocalhost: 8080 / appname / css / main.css Weiterleitungen werden sowieso nach ../static/ .. weitergeleitet, das sollte also kein Problem sein. aldrin
Gibt es ein 'http' vor 'localhost'? Sie können auch die Verwendung der absoluten Pfadressource erzwingen (dir: 'css', file: 'main.css', absolute: true), um sicherzustellen, dass das Plugin die CSS-Datei korrekt erhält. aldrin

Verwandte Fragen