2017-10-03 10 views
0

まずは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を設定しないと、デフォルト値になりますか?誰かが説明できたら、私は感謝しています!

答えて

0

デフォルトでは、ClojureはColorやFontを設定するのに特別なことはありません。私はAWTに精通していませんが、Color/Fontのデフォルトが間違っているために何も見えない可能性があります。あなたはmake-page内部から参照することができますすなわち

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

、名前空間でフォントを定義することができます。

後半の応答のため申し訳ありません
(defn make-page [] 
    (let [sfont (.Font "Serif", Font.PLAIN , 64)] 
    (reify Printable 
     (print [graphics page-format page-index] 
     ;; .. rest of code 
     )))) 
+0

また、あなたはそうのように、匿名でフォントを定義するためにreifyを使用することができます!私はそれを試みたが運がない。私は、Javaの知識が不足していることから、Javaの相互運用機能に何か不足していると思います。 :/ – narocath

関連する問題