Skip to content
This repository has been archived by the owner on May 27, 2023. It is now read-only.
/ clj-jasper Public archive
forked from source-c/clj-jasper

A Clojure bindings to Jasper Reports

License

Notifications You must be signed in to change notification settings

tbt-post/clj-jasper

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

A Clojure bindings to Jasper Reports

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages

  • Clojure 100.0%