5

将 illustrator 文件或 PDF 处理为 XAML 的替代方法是什么。我当前的工作流程是这样的:

  1. 在 Adob​​e illustrator 中打开 PDF 文件
  2. 将文件另存为 .ai (Adobe Illustrator) 文件
  3. 在表达式设计中打开
  4. 做一些处理,主要是把元素分层,去掉不需要的部分。
  5. 另存为 XAML
  6. 将 XAML 添加到 Blend 项目

我唯一的问题是这样文本被转换为路径。我想将我的文本也保留在 XAML 中,而不是路径。

有没有其他方法可以做到这一点,所以我保留文字?还有其他工具吗?

4

4 回答 4

4

我认为您想要的是拥有 Glyphs 元素而不是路径。问题是 Glyphs 元素要求您指定字体文件的 URI。此外,Glyphs 元素通过索引将字形引用到字体文件中(可能会发生生成 Glyphs 元素的转换器 - 如 Microsoft XPS Document Writer - 使用字体子集文件的索引:因此这些索引可能不是正确的索引与原始字体文件中定义的字形相同)。我已经能够使用我自己的 PDF 到 XAML 转换工具以两种方式“解决”这个问题。

1. 方法:在生成的 XAML 代码中嵌入 BASE64 编码的字体子集文件,并让应用程序实现一个类,该类在加载时将嵌入的字体子集文件提取和解码到临时位置,并将有效的 URI 传递给将该临时文件返回给 XAML 加载程序。

或者,2. 方法:已经与我的应用程序一起安装了大多数字体文件,并且再次添加我的应用程序的一些支持,在加载 XAML 代码时将字体名称替换为已安装字体文件的 URI。第二种方法的问题是字形索引需要正确映射到安装的字体文件,这可能不是那么简单。(您可以在我的博客上找到为这种加载方式生成的示例文件的链接:特别是查看文件truncatedcone-xaml.txt

简而言之:这两种解决方案都需要一个特殊的 PDF 到 XAML 转换器并得到加载应用程序的支持。我想这样做而不是仅仅将我的 PDF 转换为路径的原因是我的应用程序是一个共享白板:因此我希望我的矢量图形尽可能。(在大多数情况下,转换为路径往往会使 XAML 代码炸毁 10 倍或更多)。

我正在考虑实施第三种方法:这将包括为每个只使用一次的字形生成轮廓然后通过我的应用程序添加支持,以与必须生成的 Glyphs 元素所做的非常相似的方式转换和定位这些字形轮廓。优点是生成的 XAML 仍然相对较小(与上述第二种方法相比),不需要与应用程序一起安装相关的字体文件,也不需要将字形索引从子集文件映射到安装的字体文件。我还没有认真尝试实现这一点的原因有两个:首先,我目前的(第二种)方法已经很好地满足了我目前的需要;其次,这第三种方法在加载和/或渲染方面可能存在性能问题。

于 2010-12-27T05:23:35.673 回答
2

有一个(免费的)Adobe Illustrator 插件可以导出到 XAML。不过,不确定它是否完全符合您的要求。

在http://www.mikeswanson.com/XAMLExport/上找到它

于 2010-09-03T14:30:10.887 回答
1

那么 XPS 文件实际上是一个 ZIP 文件。因此,如果您使用 ZIP 存档程序打开它,或者将其扩展名重命名为 ZIP,您可以看到里面的内容。它已经包含作为 XAML 代码的页面(这些文件的格式为 [pagenumber].fpage)。但是,该 XAML 代码可能会引用该 ZIP 存档中包含的其他文件(如光栅图像和字体子集文件,这些通常是 odttf 文件 - 基本上是加密的真实类型文件)。这意味着,您在 XPS 文档中找到的 XAML 代码可能无法在您的应用程序中直接用作纯 XAML。我编写了 python 脚本来转换从 XPS 文档(由 Microsoft XPS 文档编写器生成)获取的 XAML 以获取我的应用程序可以加载的 XAML 文件(参见上面的方法 1 和 2)。

于 2010-12-29T17:07:57.637 回答
1

@gyurisc:保留字体文件应该可以,但保留文本可能会成为问题,因为您会看到,字形不是字符。您可能可以通过检查给定字形所属的字体文件来找出字符,但这将涉及解析字体文件。如果您不走运,您的 PDF 到 XPS 转换器甚至无法在字体子集文件中保留足够的信息来找出给定字形(很可能)代表的字符。

例如:如果我在 Microsoft 的 XPS Document Writer 的帮助下将 PDF 文件转换为 XPS,然后尝试从该 XPS 文档中选择一段文本,我可以(显然)将其复制到剪贴板。但是,如果我将其粘贴回 Word 文档中,我会得到垃圾。而如果我在原始 PDF 文档中选择一段文本并将其粘贴到同一个 Word 文档中,我会得到相当有意义的文本。因此,Microsoft 的 XPS Document Writer 显然并不关心将“字形运行”解释为文本,因此在我看来,在生成的 XPS 代码中找到的字形索引与它们所指的字符之间的联系很可能代表在那个时候已经被打破了。(但是,诚然,这只是一个猜测。)

我想,文本的表示(与一系列字形相反)将是 XAML 中的 TextBlock 元素。但是,我的猜测是典型的 PDF 到 XPS 转换器不太可能生成 TextBlock 元素。XPS 主要用于呈现 - 在屏幕上或在纸上 - 它并不认为自己是一种特别适合数据交换(在您的情况下交换文本)的文件格式。

于 2010-12-31T18:32:23.570 回答