Windows+Officeを使っている筆者は、通常図をOfficeのPowerPointで作成している。某雑誌は提出するファイルにEPS形式を要求しているが、PowerPointから出力できるベクターファイル形式で最も一般的なものはSVGファイルである。
このSVG(ベクター画像)ファイルをベクター情報を保持したままEPSファイルに変換する方法はあるのだろうか?
結論から言うと、条件はあるものの、Windows+Inkscapeで変換が可能である。
Inkscapeというソフトウェアをインストールしよう。いまは無料のようだ。EXEに署名が入っていないが多分大丈夫。最新版のPythonがバンドルされているが、既にインストールされている場合は必要ない。
次に、Inkscapeの実行ファイルのある場所にPATHを通す。筆者の環境ではC:\Program Files\Inkscape\bin
だった。SVGをEPSに変換するコマンドは以下の通り。
inkscape -z -o filename.eps filename.svg
比較のためにPDFファイルも作る。筆者の環境では、SVGファイルをGoogle Chromeで開いて、AdobePDFとして印刷した後、Acrobat(有料)でトリミングして生成した。有料なので使えない人は申し訳ない。
図を作る時、PowerPointの図形、文字、ペン、画像を使う。それぞれの組み合わせで図を作った時に、どう変換されるか確認してみた。
まずは、「図形」+「文字」のケース
PNGはラスター画像でありかつ解像度が悪いのでギザギザが見えるが、EPSとPDFはベクター情報が保持されていてきれいに描画されている。EPSは文字情報を保持しているが、PDFは文字情報は失われているため、検索などでは引っかからない。
次に、「図形」+「文字」+「ペン」のケース
ペンはラスター画像に変換されることは想定していたが、EPSとPDFの両方で「図形」と「文字」もラスター画像に変換されてしまった。EPSの方を拡大すると、
となり、確かに縁が滲んでいる。
次に、「図形」+「文字」+「画像」のケース
画像はもちろんラスター画像だが、「図形」と「文字」はベクター情報が保持されている。EPSでは文字情報も保持されている。EPSの方を拡大すると、
問題なさそうだ。
結論
- PowerPointから出力できるSVGファイルは文字情報を保持したベクター画像である。
- SVG(ベクタ画像)ファイルはinkscapeを使うと無料でEPSファイルに変換できる。
- SVGからAcrobatで変換したPDFファイルは文字情報を保持できない。
- SVGからinkscapeで変換したEPSファイルは文字情報を保持できる。
- SVGに「ペン」情報がある場合は、EPS、PDFへの変換で「図形」と「文字」のベクター情報が失われる。
- SVGに「ペン」情報がない場合は、EPS、PDFへの変換で「図形」と「文字」のベクター情報は保持できる。
ということのようだ。
inkscape --help Usage: org.inkscape.Inkscape [OPTION…] file1 [file2 [fileN]] Process (or open) one or more files. Help Options: -?, --help Show help options --help-all Show all help options --help-gapplication Show GApplication options --help-gtk Show GTK+ Options Application Options: -V, --version Print Inkscape version --debug-info Print debugging information --system-data-directory Print system data directory --user-data-directory Print user data directory File import: -p, --pipe Read input file from standard input (stdin) --pdf-page=PAGE PDF page number to import --pdf-poppler Use poppler when importing via commandline --convert-dpi-method=METHOD Method used to convert pre-0.92 document dpi, if needed: [none|scale-viewbox|scale-document] --no-convert-text-baseline-spacing Do not fix pre-0.92 document's text baseline spacing on opening File export: -o, --export-filename=FILENAME Output file name (defaults to input filename; file type is guessed from extension if present; use '-' to write to stdout) --export-overwrite Overwrite input file (otherwise add '_out' suffix if type doesn't change) --export-type=TYPE[,TYPE]* File type(s) to export: [svg,png,ps,eps,pdf,emf,wmf,xaml] --export-extension=EXTENSION-ID Extension ID to use for exporting -- Export geometry: -C, --export-area-page Area to export is page -D, --export-area-drawing Area to export is whole drawing (ignoring page size) -a, --export-area=x0:y0:x1:y1 Area to export in SVG user units --export-area-snap Snap the bitmap export area outwards to the nearest integer values -d, --export-dpi=DPI Resolution for bitmaps and rasterized filters; default is 96 -w, --export-width=WIDTH Bitmap width in pixels (overrides --export-dpi) -h, --export-height=HEIGHT Bitmap height in pixels (overrides --export-dpi) --export-margin=MARGIN Margin around export area: units of page size for SVG, mm for PS/PDF Export options: -i, --export-id=OBJECT-ID[;OBJECT-ID]* ID(s) of object(s) to export -j, --export-id-only Hide all objects except object with ID selected by export-id -l, --export-plain-svg Remove Inkscape-specific SVG attributes/properties --export-ps-level=LEVEL Postscript level (2 or 3); default is 3 --export-pdf-version=VERSION PDF version (1.4 or 1.5); default is 1.5 -T, --export-text-to-path Convert text to paths (PS/EPS/PDF/SVG) --export-latex Export text separately to LaTeX file (PS/EPS/PDF) --export-ignore-filters Render objects without filters instead of rasterizing (PS/EPS/PDF) -t, --export-use-hints Use stored filename and DPI hints when exporting object selected by --export-id -b, --export-background=COLOR Background color for exported bitmaps (any SVG color string) -y, --export-background-opacity=VALUE Background opacity for exported bitmaps (0.0 to 1.0, or 1 to 255) --export-png-color-mode=COLOR-MODE Color mode (bit depth and color type) for exported bitmaps (Gray_1/Gray_2/Gray_4/Gray_8/Gray_16/RGB_8/RGB_16/GrayAlpha_8/GrayAlpha_16/RGBA_8/RGBA_16) Query object/document geometry: -I, --query-id=OBJECT-ID[,OBJECT-ID]* ID(s) of object(s) to be queried -S, --query-all Print bounding boxes of all objects -X, --query-x X coordinate of drawing or object (if specified by --query-id) -Y, --query-y Y coordinate of drawing or object (if specified by --query-id) -W, --query-width Width of drawing or object (if specified by --query-id) -H, --query-height Height of drawing or object (if specified by --query-id) Advanced file processing: --vacuum-defs Remove unused definitions from the <defs> section(s) of document --select=OBJECT-ID[,OBJECT-ID]* Select objects: comma-separated list of IDs --actions=ACTION(:ARG)[;ACTION(:ARG)]* List of actions (with optional arguments) to execute --action-list List all available actions --verb=VERB[;VERB]* List of verbs to execute --verb-list List all available verbs Interface: -g, --with-gui With graphical user interface (required by some actions/verbs) --batch-process Close GUI after executing all actions/verbs --shell Start Inkscape in interactive shell mode Examples: Export input SVG (in.svg) to PDF (out.pdf) format: inkscape --export-filename=out.pdf in.svg Export input files (in1.svg, in2.svg) to PNG format keeping original name (in1.png, in2.png): inkscape --export-type=png in1.svg in2.svg See 'man inkscape' and http://wiki.inkscape.org/wiki/index.php/Using_the_Command_Line for more details.