diff --git a/src/clj_htmltopdf/options.clj b/src/clj_htmltopdf/options.clj index 2d3221f..ce598ff 100644 --- a/src/clj_htmltopdf/options.clj +++ b/src/clj_htmltopdf/options.clj @@ -46,24 +46,43 @@ (defn ->page-size-css [{:keys [size orientation] :as page-options}] (if (or size orientation) - (string/trim - (str - (cond - (keyword? size) (name size) - (sequential? size) (string/join " " size) - :else size) - " " - (if (keyword? orientation) - (name orientation) - orientation))))) + [[:size + (string/trim + (str + (cond + (keyword? size) (name size) + (sequential? size) (string/join " " size) + :else size) + " " + (if (keyword? orientation) + (name orientation) + orientation)))]])) + +(defn ->page-margin-css + [{:keys [margin] :as page-options}] + (let [default-margin (get-in default-options [:page :margin])] + (cond + (map? margin) + [[:margin-left (or (:left margin) default-margin)] + [:margin-top (or (:top margin) default-margin)] + [:margin-right (or (:right margin) default-margin)] + [:margin-bottom (or (:bottom margin) default-margin)]] + + (sequential? margin) + [[:margin (string/join " " margin)]] + + :else + [[:margin (str (or margin default-margin))]]))) (defn page-options->css [page-options] - (let [styles (->> [[:size (->page-size-css page-options)]] - (into []) - (remove #(nil? (second %))) - (reduce #(assoc %1 (first %2) (second %2)) {}))] - [["@page" styles]])) + (let [page-options (merge (:page default-options) page-options)] + [["@page" + (->> (concat + (->page-size-css page-options) + (->page-margin-css page-options)) + (remove #(nil? (second %))) + (reduce #(assoc %1 (first %2) (second %2)) {}))]])) (defn append-stylesheet-link-tags! [^Element parent stylesheets]