2018年11月14日 星期三

LyX 2.3.1 無法預覽插入的 pdf 圖形解決方法

最近發現 LyX 2.3.1 版本,插入 pdf 圖片時,會出現無法預覽的圖。


查詢了一下,發現有論壇說:
  1. 可能是 Ghostscript 版本太舊 (8.x) 造成的,更新到 9.x 版可解決。
  2. 可能是 ImageMagick 版本太新 (7.x) 造成的,安裝 6.x 版的可解決。
但我的環境是 Ubuntu 16.04, Ghostscript 9.25, ImageMagick 6.8.9,但還是失敗。經由直接在 console 執行 lyx 後,再插入 pdf 圖片後,會出現錯誤訊息:

convert: not authorized `/tmp/lyx_tmpdir.FNuQNXd11099/gconvertd11099.eps' @ error/constitute.c/ReadImage/412.
convert: no images defined `/tmp/lyx_tmpdir.FNuQNXd11099/gconvertd11099.png' @ error/convert.c/ConvertImageCommand/3210.


從這邊就可推測是 ImageMagick 程式造成的問題。後來檢查到原來是 ImageMagick 引入了安全機制,不允許轉換 PS/EPS/PDF/XPS 這幾種格式了。解決方法有 2 種:

方法一

將 ImageMagick 這種限制拿掉的。可修改 /etc/ImageMagick-6/policy.xml 這個檔案 (需要 root 權限), 將限制的部份註解掉 (如下)

  <!-- disable ghostscript format types -->
  <!-- comment or remove the lines below
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
  -->
之後即可正常預覽圖案了。

方法二

LyX 內建立新的 PDF to PNG 的轉換處理方式, 不使用預設的
  • PDF to EPS
  • EPS to PNG 方式。
從「工具 -> 偏好設定 -> 檔案處理 -> 格式轉換器」內,加入:
從格式: PDF (graphics) 到格式: PNG
轉換器 pdftoppm -png $$i > $$o
如下圖。如此插入 pdf 圖案後,即可正確預覽。
此法的缺點是: 插入 eps 圖案時,還是會無法預覽圖片,因為轉換器內定義的 EPS to PNG,
依然是用 ImageMagick 的 convert 程式做轉換。所以較好的方案就是這兩種方法都用了。