A Clojure library to work with Jasper Reports (Clojars Project)
Add the following to your Leiningen’s project.clj
:
[net.tbt-post/clj-jasper "0.1.0"]
(ns my-app.jasper
(:require [clj-jasper.core :as jc]
[clojure.java.io :as io]))
(defn render [name data properties]
(binding [jc/*jr-templates-path* "my-templates"]
(let [out (jc/data->report {:name (format "my-reports/%s" name)
:data data
:ops properties})]
{:status 200
:headers {"Content-Type" (:type out)
"Content-Disposition" (format "attachment; filename=\"%s\"" (:name out))
"Cache-Control" "no-cache"}
:body (-> out :file io/input-stream)})))
-
Current implementation supports only PDF generations.
-
There is a bug in JAXP/XERCES (derived from CLJ←JR←Digester) that prevent the use of a parser that contains a schema with a DTD.
-
Well tested with Java versions:
-
OpenJDK 11.0.12
-
OpenJDK 15.0.1
-
GraalVM 19.3.6.r11
-
Corretto 8.322.06.1
-
-
Version v0.0.9 and v0.0.10 may be runtime incompatible with uberjar build in some circumstances
-
JasperReports is very dependent on the SAX parser and requires at least a basic X setup on the server in order to render.
-
Default font have to be available in JVM
-
Final app is very sensitive to AOT compilation so pay attention on:
-
Proper AOT compilation may require added line like
:uberjar-merge-with {#"^jasperreports_extension\.properties$" [slurp #(clojure.string/join "\r\n" %&) spit]}
into your project directly. -
For some circumstances this may be not enough, and complete avoiding of AOT for particular class might be required.
-
For some rare and very complex cases even complete avoiding
:uberjar {:aot :all}
might be highly recommended
-
-
In order to get properly rendered reports see: Jasper Reports Fonts Sample and use a right fonts in your *.jrxml files