Zunächst einmal bin ich neu in Clojure. Ich habe mich gefragt, wie man eine Zeichenfolge an einen Drucker druckt. So wie ich es verstehe, muss ich Java interop verwenden. Ich suchte nach Java-Code und fand diese Codezeilen:So senden Sie eine Zeichenfolge an Standard-Systemdrucker in 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);
}
}
Ich verstehe, dass ich die Printable
Schnittstelle mit proxy
und danach laden müssen eine PrinterJob
zu erstellen und es bedruckbar, aber ich verwirrt wenn Ich versuche das auf Clojure zu übersetzen. Mein Versuch, so weit ist dies:
(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)
)
Auch in dem ersten Beispielcode, wenn die Graphics-Klasse zu Graphics2D übergeben wird, wie das zu clojure übersetzen und warum geschieht, ich meine, kann ich die Grafiken nur passieren? Wenn ich nicht die Color-Klasse und die Schriftart festlege, werden sie auch einige Standardwerte haben? Wenn jemand erklären könnte, wäre ich dankbar!
Sorry für die späte Antwort! Ich habe es versucht, aber ohne Glück. Ich denke, dass mir etwas in der Java-Interop fehlt, verursacht durch die schlechten Kenntnisse von Java. : / – narocath