まずはClojureの新機能です。文字列をプリンタに印刷する方法が不思議でした。私が理解しているように、私はJava interopを使用する必要があります。私は、Javaコードを検索し、コードのこれらの行が見つかりました:Clojureでデフォルトのシステムプリンタに文字列を送信する方法
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);
}
}
ときに、私はPrinterJob
を作成し、印刷可能に設定し、その後proxy
と でPrintable
インタフェースをロードする必要があることを理解し、私は混乱してしまいます私はこれを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クラスは、Clojureのにそれを変換する方法のGraphics2Dに渡され、なぜ起こっている最初のサンプルコードでは、私はちょうどグラフィックを渡すことができます意味ですか?また、ColorクラスとFontを設定しないと、デフォルト値になりますか?誰かが説明できたら、私は感謝しています!
:
また、あなたはそうのように、匿名でフォントを定義するために
reify
を使用することができます!私はそれを試みたが運がない。私は、Javaの知識が不足していることから、Javaの相互運用機能に何か不足していると思います。 :/ – narocath