2013-05-06 56 views
1

我正在嘗試使用TextLayout類進行打印。當我打印一些數學符號時,會出現奇怪的行爲。在Java中打印數學符號會產生錯誤的輸出

下圖顯示了將字符串「First + 2」和「First \ u222A 2」打印到PDF文件的結果。當打印「聯合」符號(\ u222A)時,它看起來像符號後面的字符會覆蓋符號前面的字符。

enter image description here

下面是測試代碼打印不包含\ u222A並做另一個字符串的字符串:

public class PrintTest { 

public static void main(String[] args) { 
    PrinterJob pj = PrinterJob.getPrinterJob(); 

    pj.setPrintable(new Printable() { 
     public int print(Graphics g, PageFormat pf, int pageIndex) { 
      if (pageIndex != 0) return NO_SUCH_PAGE; 

      Graphics2D g2 = (Graphics2D) g; 
      Font font = new Font("SansSerif", Font.PLAIN, 10); 

      // Draw string with + char 
      TextLayout layout = new TextLayout("First + 2", font, g2 
        .getFontRenderContext()); 
      layout.draw(g2, 40, 80); 

      // Draw string with union character 
      layout = new TextLayout("First \u222A 2", font, g2 
        .getFontRenderContext()); 
      layout.draw(g2, 40, 100); 

      return PAGE_EXISTS; 
     } 
    }); 

    if (pj.printDialog()) { 
     try { 
      pj.print(); 
     } catch (PrinterException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

}

我上運行Java 1.7.0_17 Windows 7 & 8,並在多臺打印機上進行了測試,包括打印到PDF。所有測試都顯示相同的問題。我得到了'聯盟','交叉點'和'排除'符號的相同結果。

我真的被困在這裏。任何幫助將不勝感激。

更新:使用邏輯字體時似乎會出現問題。我測試了所有安裝的邏輯字體('Dialog','DialogInput','Monospaced','SansSerif'和'Serif'),並得到了同樣的問題。當我使用支持這些符號的物理字體('Lucida Sans'和'Arial Unicode MS')進行測試時,我獲得了所需的輸出。

enter image description here

這解決了眼前的問題對我來說,因爲我不依賴於使用邏輯字體。

回答

-1

其實,你一直在打印Unicode字符;您帖子的標題暗示您正在打印的不是Unicode。所有您正確打印的字母字符都以Unicode編碼,因爲這是Java對字符串進行編碼的方式。

因此,您試圖打印「聯合」符號,它不起作用。您有什麼證據證明您在打印的打印機上支持它?在您嘗試過的任何打印機上都可能不支持這種打印機,因此不可預知的行爲。這是最明顯的事情,可能導致這一點。

+0

聯合字符被打印,但後面的字符將打印在其前面的字符上。 – user2302873 2013-05-06 02:35:26

+0

好吧,我同意這很奇怪,並表明我不熟悉的問題。但是在尋求幫助時,請不要將其他字符稱爲「非Unicode」,因爲這是不正確的。你所擁有的是一種不經常使用的Unicode字符,它導致看起來像即時回車(沒有換行符)。我不知道會做什麼。如果您有任何其他方法將此字符輸出到此打印機,那麼這些結果會很有趣。您可以嘗試使用像cutePdf這樣的特殊驅動程序打印到文件,然後查看它的功能。祝你好運。 – arcy 2013-05-06 03:39:10

+0

感謝您輸入rcook。我修改了標題和文字以反映您的意見。我還附上了寫給Nitro PDF Creator時得到的輸出圖像。 – user2302873 2013-05-06 04:14:46