首先,我是Clojure的新手。我想知道如何将字符串打印到打印机。据我所知,我需要使用Java互操作。我搜索了Java代码并找到了这些代码行:
import java.awt.*;
import java.awt.print.*;
public class foo implements Printable {
private static Font sFont = new Font("Serif", Font.PLAIN , 64);
public int print(Graphics g, PageFormat Pf, int pageIndex)
throws PrinterException {
if (pageIndex > 0) return NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D)g;
g2.setFont(sFont);
g2.setPaint(Color.black);
g2.drawString("Save a tree!", 96, 144);
return PAGE_EXISTS;
}
public static void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob( );
job.setPrintable(new foo( ));
if (job.printDialog( )) {
try {
job.print( );
}
catch (PrinterException e) {}
}
System.exit(0);
}
}
我了解我需要使用Printable
加载proxy
界面
之后创建PrinterJob
并将其设置为可打印,但我感到困惑
当我试图把它翻译成Clojure时。
到目前为止我的尝试是:
(ns controller.core
(:gen-class)
(:require [clj-http.client :as client]
[cheshire.core :refer :all]
[clojure.edn :as edn]
[clojure.java.io :as io]
[clojure.string :as str]
)
(:import [java.awt.print PrinterJob Printable PrinterException]
[java.awt Graphics2D Color]
)
)
(defn make-page []
(proxy [Printable] []
(print
[graphics page-format page-index]
(if (> page-index 0)
Printable/NO_SUCH_PAGE
(let [g2 graphics]
(.drawstring g2 ("foooooooo" 96 144))
Printable/PAGE_EXISTS
))
)
(defn prnt []
(let [print-j (PrinterJob/getPrinterJob)]
(.setPrintable print-j (make-page))
(.print print-j)))
(defn -main
[& args]
(prnt)
)
同样在第一个示例代码中,当Graphics类传递给Graphics2D时,如何将其转换为clojure以及为什么会发生,我的意思是我可以通过图形吗?另外如果我没有设置Color类和Font它们会是一些默认值吗?如果有人能解释我会感激不尽!
答案 0 :(得分:0)
Clojure默认设置Color或Font没什么特别之处。我不熟悉AWT,但是你可能没有看到任何东西,因为Color / Font默认值不正确?您可以在命名空间中定义字体,即
(def sfont (Font. "Serif" Font.Plain 64)
,您可以从make-page
内部引用。
或者,您可以使用reify
匿名定义字体,如下所示:
(defn make-page []
(let [sfont (.Font "Serif", Font.PLAIN , 64)]
(reify Printable
(print [graphics page-format page-index]
;; .. rest of code
))))