2017-10-03 1 views
0

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!

Antwort

0

Clojure tut nichts Besonderes, um Color oder Font standardmäßig zu setzen. Ich bin nicht vertraut mit AWT, aber es könnte möglich sein, dass Sie nichts sehen, weil die Farb-/Schrifteinstellungen nicht korrekt sind? Sie könnten die Schriftart im Namensraum, das heißt

(def sfont (Font. "Serif" Font.Plain 64) 

definieren, die Sie von innen make-page verweisen können.

Alternativ können Sie reify die Schriftart anonym zu definieren, etwa so:

(defn make-page [] 
    (let [sfont (.Font "Serif", Font.PLAIN , 64)] 
    (reify Printable 
     (print [graphics page-format page-index] 
     ;; .. rest of code 
     )))) 
+0

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

Verwandte Themen