Clojure clj pdf中的模板

Clojure clj pdf中的模板,clojure,clj-pdf,Clojure,Clj Pdf,我正在使用生成pdf文件。正如自述文件所示,该库提供了一些基本的模板选项 例如,给定一个地图向量,例如: (def employees [{:country "Germany", :place "Nuremberg", :occupation "Engineer", :name "Neil Chetty"} {:country "Germany", :place "Ulm", :occupation "Engineer", :name "

我正在使用生成pdf文件。正如
自述文件所示,该库提供了一些基本的模板选项

例如,给定一个地图向量,例如:

(def employees
  [{:country "Germany",
    :place "Nuremberg",
    :occupation "Engineer",
    :name "Neil Chetty"}
   {:country "Germany",
    :place "Ulm",
    :occupation "Engineer",
    :name "Vera Ellison"}])
和一个模板

(def employee-template
  (template
    [:paragraph
     [:heading $name]
     [:chunk {:style :bold} "occupation: "] $occupation "\n"
     [:chunk {:style :bold} "place: "] $place "\n"
     [:chunk {:style :bold} "country: "] $country
     [:spacer]]))
将产生以下输出:

(employee-template employees)

([:paragraph [:heading "Neil Chetty"] 
  [:chunk {:style :bold} "occupation: "] "Engineer" "\n" 
  [:chunk {:style :bold} "place: "] "Nuremberg" "\n" 
  [:chunk {:style :bold} "country: "] "Germany" [:spacer]] 
 [:paragraph [:heading "Vera Ellison"] 
  [:chunk {:style :bold} "occupation: "] "Engineer" "\n" 
  [:chunk {:style :bold} "place: "] "Ulm" "\n" 
  [:chunk {:style :bold} "country: "] "Germany" [:spacer]])
但是,我想知道如何在
pdf
函数中使用此模板。当我使用

(pdf
  [[:heading "Heading 1"]
   [:table
    {:width 100  :border false  :cell-border false  :widths [30 70]  :offset 35}
    [[:cell {:align :right}
      (employee-template employees)]
     [:cell "dummy"]]]
   [:heading "Heading 2"]]
  "output.pdf")
我得到了一个
无效标记
异常


如果我将
(员工模板员工)
更改为
(第一个(员工模板员工))
,它的工作原理与我预期的不同。使用模板的正确方法是什么?

可能使用apply和concat

(pdf
    (apply concat
           [[:heading "Heading 1"]]
           (employee-template employees)
           [[:heading "Heading 2"]])
    "output.pdf")

我认为应该有一个更好的选择来做这件事,concat可能效率不高。

这很有效。为每个员工生成一个新单元格

(pdf
  [[:heading "Heading 1"]
   [:table {:width 100  :border false  :cell-border false :widths [30 70]  :offset 35}
    (for [e (employee-template employees)]
      [:cell {:align :right} e])]
   [:heading "Heading 2"]]
  "output.pdf")

我复制并粘贴了你的代码,它不经修改就运行了。@KobbyPemson谢谢你指出。我现在更新了这个问题,它可能引发一个异常。在clj pdf自述文件中,使用
pdf
函数的示例都有
{}
(可选元数据的空映射)作为第一个参数。问题可能是您遗漏了它吗?(澄清一下,它实际上不是第一个参数,而是作为
pdf
的第一个参数提供的向量的第一个元素)@DaveYarwood空映射
{}
可以省略,这意味着使用默认设置。为什么您认为concat效率低下?恐怖案例将是10亿名员工,但由于concat只是创建了一个遍历底层集合的seq,我并不认为它特别恐怖。