我可以在没有Cufon的拉斐尔使用印刷品吗?

Cli*_*ore 8 javascript raphael cufon

我正在尝试使用Raphael文档中提到的print命令来打印带有漂亮字体的文本.[我看到这可以很好地使用"文本"功能完成,我在网上看到使用Cufon生成的字体和打印功能的例子(如'text'和'print'的例子),但是我我正在做的尽可能接近我在文档中的例子并且对我不起作用,我想知道为什么.

这是我的代码:

<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>  
Run Code Online (Sandbox Code Playgroud)

重要的是:

paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30);
Run Code Online (Sandbox Code Playgroud)

如此处所述.

当我尝试它(在OS X上的Chrome和Opera中,到目前为止),我得到:

  • 一个可以吸引的白色区域
  • 灰色椭圆
  • 文字"Raphaël\nkicks \nbutt!"

但我没有看到:"测试字符串"在任何地方.

我正在使用Raphael v 1.4.7(我认为它是昨天的最新版本,但我看到版本1.5.2现在已经出来了).

小智 19

你不能在没有显式注册字体的情况下使用print()(通过调用registerFont()),而Cufon似乎是通常的方式.Cufon允许您使用自定义字体.如果要使用标准字体,可以使用text()并使用attr()函数设置字体属性.


我花了一段时间才弄清楚为什么示例'print'函数在嵌入到我自己的页面时不起作用.简单的答案是,如果不先调用'registerFont'函数就不能使用'print'函数.

如果仔细查看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"});
Run Code Online (Sandbox Code Playgroud)

您只需在text()函数的输出上调用attr(),并指出所需的属性.

如果您不需要自定义字体,希望能帮助您理解问题和可能的解决方案.