forked from clj-pdf/clj-pdf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsvg.clj
25 lines (22 loc) · 1.03 KB
/
svg.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(ns clj-pdf.svg
(:use [clj-pdf.graphics-2d :only [with-graphics]])
(:import [org.apache.batik.bridge BridgeContext DocumentLoader GVTBuilder UserAgentAdapter]
[org.apache.batik.dom.svg SAXSVGDocumentFactory]
[org.apache.batik.gvt GraphicsNode]
[org.apache.batik.util XMLResourceDescriptor]
[java.io Reader StringReader]))
(defn- make-ctx []
(let [user-agent (UserAgentAdapter.)
loader (DocumentLoader. user-agent)
ctx (BridgeContext. user-agent loader)]
(.setDynamicState ctx BridgeContext/DYNAMIC)
ctx))
(defn- ^Reader get-content [content-or-file]
(if (string? content-or-file)
(StringReader. content-or-file)
(clojure.java.io/reader content-or-file)))
(defn render [meta svg-data]
(let [factory (SAXSVGDocumentFactory. (XMLResourceDescriptor/getXMLParserClassName))
document (.createSVGDocument factory nil (get-content svg-data))
gfx-node (.build (GVTBuilder.) (make-ctx) document)]
(with-graphics meta #(.paint gfx-node %))))