2010-12-09 43 views
8

我正嘗試使用打印命令(在documentation for Raphael中提到)來打印帶有不錯字體的文本。 [我發現這可以使用「文本」功能很好地完成,並且我看到了使用Cufon生成的帶有打印功能的字體的網頁示例(如在這些examples for 'text' and 'print'中),但是我正在做的和我一樣接近可以使它的文檔中的例子,我不工作,我想知道爲什麼]我可以在沒有Cufon的情況下在Raphael使用打印嗎?

這裏是我的代碼:

<html> 
    <head> 
     <title>Raphael Print Test</title> 
     <script src="raphael.js" type="text/javascript" charset="utf-8"></script> 
     <script type="text/javascript" charset="utf-8"> 
     window.onload = function() { 
      var paper = new Raphael('holder', 640, 480); 
      paper.ellipse(320, 240, 320, 240).attr({stroke: "grey"}); 
      paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30); 
      paper.text(50, 50, "Raphaël\nkicks\nbutt!"); 
     } 
     </script> 
     <style type="text/css"> 
      #holder { width: 640px; height: 480px; border: 2px solid #aaa; } 
     </style> 
    </head> 
    <body> 
     <div id="holder"></div> 
    </body> 
</html> 

的重要行是:

paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30); 

as documented here

當我嘗試它(在Chrome和Opera在OS X上,到目前爲止)我得到:

  • 白色區域上
  • 繪製一個灰色橢圓
  • 文本「拉斐爾\ nkicks \ nbutt!」

但我沒有看到:「測試字符串」在任何地方。

我正在使用Raphael v 1.4.7(我認爲這是昨天的最新版本,但我發現版本1.5.2現在已經出來)。

回答

20

如果不顯式註冊字體(通過調用registerFont()),則不能使用print(),並且Cufon似乎是通常的做法。 Cufon允許您使用自定義字體。如果您想使用標準字體,可以使用text()並使用attr()函數設置字體屬性。


我花了一段時間才弄明白爲什麼當我嵌入到自己的頁面時,「打印」功能不起作用。簡單的答案是,如果不先調用「registerFont」函數,就不能使用「打印」功能。

如果您仔細查看Raphael參考頁面的來源,您將不會注意到他們正在使用的'registerFont'調用,因爲它被嵌入在'museo.js'頁面中。在那裏你會看到'registerFont'調用。您還會注意到,他們實際上在其打印示例代碼中使用了「Museo」字體的打印功能,而不是「Times」字體。

在這一點上,我意識到text()函數與attr()函數結合足以滿足我的需求,所以我沒有深入Cufon(抱歉)。

下面是一段簡單的代碼,它顯示了text()和attr()函數如何用標準字體之一顯示某些內容。

paper.text(50, 50, "Raphaël\nkicks\nbutt!").attr(
    {"font-family":"serif", 
    "font-style":"italic", 
    "font-size":"30"}); 

您只需在text()函數的輸出中調用attr(),並指明所需的屬性。

希望可以幫助您瞭解問題以及可能的解決方案,如果您不需要自定義字體。

+1

解決了我的問題。這也適用於谷歌網頁字體。 – bennedich 2011-07-30 17:02:31

相關問題