7

我正在尝试将图形列表导出为 PDF 格式的单独帧,以便在外部实用程序(例如 pdf2swf)的帮助下编译矢量 SWF 动画。遗憾的是,导出的 PDF 文件中的某些特殊字符(例如度数符号或三点)已损坏。这也是所有俄罗斯字母的命运。请注意,当 Mathematica 直接从 Mma 导出到 SWF 时,Mathematica 会光栅化列表中的图形,这在我的情况下会产生不令人满意的结果。

有没有办法在导出的图形中保留这些字母?

单个图形可以在图形编辑器中手动编辑,但对于数百帧的视频几乎不可能。一些符号可以通过以下自定义函数保留:

ExportPDF[filename_, elem_, 
  opts : OptionsPattern[{Export, Outlines -> True}]] := Module[{$elem},
  $elem = Style[elem, Background -> None];
 If[OptionValue[Outlines] == True
   , $elem = 
    First@ImportString[ExportString[$elem, "PDF"], "PDF", 
      "TextMode" -> "Outlines"]
   ];
  Export[filename, $elem, FilterRules[{opts}, Options[Export]]]
 ]

不幸的是,它并不总是有帮助。

4

2 回答 2

6

一种解决方法是导出为 EMF 而不是 PDF 格式:

Export["C:\\1.emf", 
 Plot[Sin[x], {x, 0, Pi}, PlotLabel -> 
   "\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b"]]

如果您愿意,可以进一步将 EMF 转换为 PDF 或 SWF。请参阅此处有关从Mathematica导出高质量 EMF 的一般提示。

另一种看似可靠的方法是将西里尔文文本转换为轮廓,然后使用Inset或 将其放置在图形中Labeled

plotLabel = 
  First@ImportString[ExportString[
    "\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b",
       "PDF"], "PDF"];
Labeled[Plot[Sin[x], {x, 0, Pi}], plotLabel, Top]

或者您可以直接使用概述的文本PlotLabel

Export["C:\\1.pdf", Plot[Sin[x], {x, 0, Pi}, PlotLabel -> plotLabel]]

您可以通过编写一个简单的例程来概括此方法:

cyrFix = First@ImportString[ExportString[#, "PDF"], "PDF"] &

您可以按如下方式使用它:

Export["C:\\1.pdf", 
 Plot[Sin[x], {x, 0, Pi}, PlotLabel -> 
  cyrFix@"\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b"]]
于 2011-06-16T09:45:14.407 回答
0

Mathematica 的 PDF 导出目前不支持西里尔字母,仅支持罗马、希腊、日语和一些技术符号。如果您使用的是 Mac,您可以选择“文件”>“打印”>“另存为 PDF”作为解决方法。

于 2011-09-13T13:18:27.180 回答