:::

DSpace加強Browse功能的BrowseUtil

布丁布丁吃布丁

DSpace加強Browse功能的BrowseUtil

image

DSpace具備強大的Browse功能,可是唯獨換頁的功能卻只有薄弱的「next」(下一頁)跟「prev」(上一頁)。因此我寫了一支BrowseUtil來提供這方面的功能,也把[dspace-jspui-webapp]/browse/中full.jsp、single.jsp能作到的功能也加了進去,提供程式設計師在修改Browse功能時能夠有靈活的彈性。


安裝BrowseUtil

請下載以下檔案,並放置指定的位置:

  • BrowseUtil.java (SkyDriveMiroko)
    [dspace-source]/dspace-jspui/src/main/java/org/dspace/app/webui/util/BrowseUtil.java
  • BrowseInfo.java (SkyDriveMiroko)
    [dspace-source]/dspace-jspui/src/main/java/org/dspace/browse/BrowseInfo.java
  • full.jsp (SkyDriveMiroko)
    single.jsp (SkyDriveMiroko)
    [dspace-source]/dspace/modules/jspui/src/main/webapp/browse/full.jsp
    [dspace-source]/dspace/modules/jspui/src/main/webapp/browse/single.jsp

然後請重新編譯DSpace,作mvn package跟ant update的動作。

使用BrowseUtil

引用與建立BrowseUtil物件

在JSP檔案裡面,請輸入以下語法以引用BrowseUtil:

<%@ page import="org.dspace.app.webui.util.BrowseUtil" %>

BrowseUtil物件建立需要輸入兩個參數,個別是HttpServletRequest跟BrowseInfo(這是DSpace的Browse物件),建立範例如下;

<%
BrowseInfo bi = (BrowseInfo) request.getAttribute("browse.info"); //先取得BrowseInfo物件
BrowseUtil bu = new BrowseUtil(request, bi); //建立BrowseUtil
%>

然後我們就可以以這個bu物件來取得連結了。

取得換頁連結
<%
String next = bu.getNextLink(); //下一頁
String last = bu.getLastLink(); //最後一頁
String prev = bu.getPrevLink(); //前一頁
String first = bu.getFirstLink(); //第一頁
%>

取得頁碼

以下語法會取得每一頁頁碼與連結,但是會排除自己的頁碼:

<%= bu.getPagesList() %>

結果如下:

<<first < previous 1 2 3 4 5 6 next > last >>

以下語法會取得該頁前後2頁之內的頁碼:

<%= bu.getPagesLink(2) %>

結果如下:

<<first < previous ... 2 3 4 5 6 ... next > last >>


其他BrowseInfo其實還有小功能,如果有需要的話就請自行看看程式碼囉。寫小功能還是非常讓人愉快的,大家加油!

(more...)

DSpace擴增Collection Browse功能

布丁布丁吃布丁

DSpace擴增Collection Browse功能

image

DSpace內建了非常強大的Browse功能,只是一般好像比較少看到有人善加利用。這次主要是要擴增Browse功能,讓他具備可以找出特定Metadata欄位中的值。


安裝方法

請下載以下檔案,依照同樣的目錄結構放到[dspace-source]當中,再重新編譯DSpace即可。


使用方法

舉例來說,下面網址與圖片顯示是在預設情況下全部的item:(因為這是區域網路,所以下面的網址應該連不到這個網頁)

http://192.168.1.30:8080/jspui/handle/123456789/56/browse?type=title&submit_browse=Title

image

但是只要在網址的GET參數當中加入「fdc[0]=欄位=值」(fdc是FilterDCValue的縮寫),就會出現特定item的效果,如下,注意紅字的位置:

http://192.168.1.30:8080/jspui/handle/123456789/56/browse?type=title&submit_browse=Title&fdc[0]=dc.title=121212

image

如果你要找出具備兩個條件的item,那就輸入「fdc[0]=欄位=值&fdc[1]=欄位=值」,例如下面的網址與圖:

http://192.168.1.30:8080/jspui/handle/123456789/56/browse?type=title&submit_browse=Title&fdc[0]=dc.title=121212&fdc[1]=dc.date.issued=2009

image

裡面的所有連結我都已經調整過了,會自動帶入fdc的參數進去。至於細微的版面調整,那就是大家各自努力囉。


DSpace的Browse功能意外地複雜,解析物件的結構、資料的流向花了我不少的時間。雖然瀏覽感覺上只是個小功能,但是既然DSpace都有提供了,還是希望大家能夠好好利用吧!

(more...)

使用SWFTools把PDF轉成可以瀏覽的SWF檔案

布丁布丁吃布丁

使用SWFTools把PDF轉成可以瀏覽的SWF檔案

image

SWFTools,是個功能強大的SWF工具,可以把AVI影片、PNG JPEG圖片、PDF轉換成SWF格式的檔案。SWF格式是Adobe Flash匯出後的檔案,現在大部分都支援Flash的瀏覽器中都可以直接播放,Wikipedia寫說有99%的網路使用者都可以讀取swf檔案,包括任天堂Wii或是Sony的PSP。

image

其中pdf2swf + rfxview viewer 的功能最讓我感到驚豔。如名稱所示,他可以把PDF轉換成SWF之後,再結合rfxview viewer輸出成一個可供瀏覽的SWF檔案。瀏覽的項目包括放大、縮小、拖曳、換頁等功能,而且可以直接在網頁上播放,非常令人讚賞!有興趣的話可以先開啟範例網頁來玩玩看!

詳細的SWFTools指令,可以參考「光头的专栏 - SWFTools 命令」,裡面也介紹了中文字的解決方案。

我也把SWFTools加入了DSpace的Media-filter功能當中,這一篇則是先單純地介紹怎麼安裝SWFTools,並且把PDF轉換成SWF、並結合到SWFTools。


安裝SWFTools

SWFTools下載網頁:http://www.swftools.org/download.html,內有Windows版本跟Linux版本。

如果你跟我一樣是用CentOS的話,我們可以直接使用yum指令來直接安裝SWFTOOLS喔!

請以root身份登入,然後輸入以下指令:

[root@dspace ~]# yum -y install swftools

安裝完成之後,就可以用「pdf2swf [來源的pdf檔] [輸出的swf檔]」來作轉換喔,例如下面的指令:

[root@dspace ~]# pdf2swf input.pdf output.swf

取得rfxview.swf瀏覽器

直接用pdf2swf轉換出來的swf檔案並不具備瀏覽器的功能,必須搭配rfxview.swf才有這個效果。

rfxview.swf可以從SWFTools下載頁面中的swftools-0.9.0.tar.gz找到,我也另外備份了一份到SkyDriveMiroko空間當中。

實作範例

請先把PDF檔案、rfxview.swf瀏覽器放到同一個資料夾當中。
PDF範例檔案可以使用我的Blog(SkyDrive下載Miroko下載)

轉換的指令如下:

pdf2swf -z -B [rfxview.swf瀏覽器的路徑] -s flashversion=7 -t [來源PDF] -o [輸出SWF]

於是實際上輸入的指令如下:

[dspace@dspace-course ~]$ pdf2swf -z -B rfxview.swf -s flashversion=7 -t 1.pdf -o 2.swf

你可以用以下HTML程式碼寫在網頁中以開啟轉換後的2.swf:

<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 WIDTH="595"
 HEIGHT="842"
 CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=8,0,0,0">
  <PARAM NAME="MOVIE" VALUE="2.swf">
  <PARAM NAME="PLAY" VALUE="true">
  <PARAM NAME="LOOP" VALUE="true">
  <PARAM NAME="QUALITY" VALUE="high">
  <EMBED SRC="2.swf" WIDTH="595" HEIGHT="842"
   PLAY="true" ALIGN="" LOOP="true" QUALITY="high"
   TYPE="application/x-shockwave-flash"
   PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
  </EMBED>
</OBJECT>

輸出結果應該要如下所示(SkyDrive下載Miroko下載):


SWFTools轉出來的PDF2SWF+rfxview仍有個缺點,就是他的大圖瀏覽在一開始的顯示比例跟位置不是說很好,開啟之後無法預設用「全畫面」來瀏覽。不過暫時也找不到其他的開放原始碼的替代方案,所以就期待SWFTools繼續改版吧。

(more...)