我试图将图形列表导出为PDF格式的单独帧,然后借助外部实用程序(例如pdf2swf)编译矢量SWF动画。不幸的是,导出的PDF文件中的某些特殊字符(例如,度符号或三点)已损坏。这也是所有俄罗斯信件的命运。请注意,当Mathematica从Mma直接导出到SWF时,会在列表中对图形进行栅格化处理,这在我的情况下会产生令人不满意的结果。
有没有办法在导出的图形中保留这些字母?
可以在图形编辑器中手动编辑单个图形,但几百帧的视频几乎不可能。以下自定义函数可以保留一些符号:
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]]]
]
不幸的是,它并不总是有帮助。
答案 0 :(得分: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导出的here一般提示。
另一种看似可靠的方法是将仅西里尔文本转换为轮廓,然后将其放在图形中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"]]
答案 1 :(得分:0)
Mathematica的PDF导出目前不支持西里尔语,只支持罗马语,希腊语,日语和一些技术符号。如果您使用的是Mac,可以选择文件>打印>另存为PDF作为解决方法。