2010-12-09 105 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

相关问题