2017-10-03 3 views
0

우선 Clojure를 처음 사용했습니다. 나는 문자열을 프린터로 출력하는 방법을 궁금해했다. 이해하기 때문에 Java interop을 사용해야합니다. 나는 코드 줄을 자바 코드를 검색하고 발견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로 번역하려고합니다. 내 시도가 지금까지 이것이다 : Graphics 클래스가 Clojure에 해당 번역 왜, 난 그냥 그래픽을 전달할 수 있음을 의미 일어나고있는 방법의 Graphics2D에 전달되는 첫 번째 샘플 코드 또한

(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) 
    ) 

? 또한 Color 클래스와 Font를 설정하지 않으면 기본값으로 설정됩니까? 누구든지 설명 할 수 있다면 나는 감사 할 것이다!

답변

0

Clojure는 기본적으로 색상이나 글꼴을 설정하는 데 특별한 것은 없습니다. 필자는 AWT에 익숙하지 않지만 Color/Font 기본값이 올바르지 않기 때문에 아무 것도 볼 수 없을 수도 있습니다. 당신은 당신이 make-page 내부에서 참조 할 수 있습니다 즉

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

, 네임 스페이스에서 글꼴을 정의 할 수 있습니다.

양자 택일로, 당신은과 같이 익명 글꼴을 정의 할 reify을 사용할 수 있습니다 후반 응답 죄송합니다

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

을! 나는 그것을 시험해 보았지만 행운이 없었다. Java에 대한 지식이 부족하여 Java interop에 뭔가 빠져 있다고 생각합니다. : / – narocath