Clojure clj pdf中的模板
我正在使用生成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 "
自述文件所示,该库提供了一些基本的模板选项
例如,给定一个地图向量,例如:
(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,我并不认为它特别恐怖。