2012年9月14日 星期五

PDF中的索引和書籤(五)

在使用 swig 結合 c++ 的這個方向遇到困難後,回過頭來看看 evince 。結果發現 evince 根本就沒有用到 c++ 的介面,而是使用了純粹的 c 的介面(evince-3.5.90\libdocument\ev-document-links.c(52))。get_links_model 負責將索引組建成為樹狀結構(evince-3.5.90\backend\pdf\ev-poppler.cc(1384)),此結構剛好在 http://search.cpan.org/~tsch/Gtk2-1.203/xs/GtkTreeModel.xs 提供了 perl 介面。document 則由 ev_document_factory_get_document 取得(evince-3.5.90\libdocument\ev-document-factory.h(37)),其參數剛好是 char* ,非常有可能直接使用 swig 即可順利完成perl介面。很諷刺的是,本來一開始是想研究 evince 並繞過它直接呼叫 poppler ,沒想到 evince 本身可能已經完成了很多工作。這或許不是壞事,因為如果能整合 evince 本身的(自訂的)書籤系統的話,那麼我們很可能可以直接處理這個系統來得到想要的功能。

另一方面來說,evince 在 python 的介面似乎一直有人在維護,可以參考以下兩個連結
https://mail.gnome.org/archives/evince-list/2009-December/msg00007.html
http://www.techques.com/question/1-3672847/How-to-embed-Evince

不過這條路看起來也不輕鬆,尤其是有些package並沒有port到新版的ubuntu:
Choosing between Lucid and Squeeze packages? 由下連結可知,evince-python只更新到11.04版
http://packages.ubuntu.com/source/natty/gnome-python-desktop

這時又發現有python-poppler這個package,看來是最省事的作法
sudo apt-get install python-poppler
參考以下連結,寫個簡單的grep,看來還行
 http://lucasvr.gobolinux.org/etc/pdfGrep

沒有留言:

張貼留言