Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 2.86 KB

README.adoc

File metadata and controls

65 lines (52 loc) · 2.86 KB

clj-jasper

A Clojure library to work with Jasper Reports (Clojars Project)

GitHub clj jasper ClojarsDownloads GitHub release (latest by date) GitHub Release Date GitHub tag (latest by date) GitHub last commit

Usage

Add the following to your Leiningen’s project.clj:

project.clj
[net.tbt-post/clj-jasper "0.1.0"]
example.clj
(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)})))

Notes and limitations

  1. Current implementation supports only PDF generations.

  2. 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.

  3. Well tested with Java versions:

    1. OpenJDK 11.0.12

    2. OpenJDK 15.0.1

    3. GraalVM 19.3.6.r11

    4. Corretto 8.322.06.1

  4. Version v0.0.9 and v0.0.10 may be runtime incompatible with uberjar build in some circumstances

  5. JasperReports is very dependent on the SAX parser and requires at least a basic X setup on the server in order to render.

  6. Default font have to be available in JVM

  7. Final app is very sensitive to AOT compilation so pay attention on:

    1. 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.

    2. For some circumstances this may be not enough, and complete avoiding of AOT for particular class might be required.

    3. For some rare and very complex cases even complete avoiding :uberjar {:aot :all} might be highly recommended

  8. In order to get properly rendered reports see: Jasper Reports Fonts Sample and use a right fonts in your *.jrxml files

License

Copyright © 2018-2022 MelKori, onoha, UPD Consulting

Distributed under the MIT License.