:::

DSpace擴增MediaFilter格式(安裝篇)

5月 19, 2009 30 Comments Edit Post

DSpace擴增MediaFilter的目錄:

本篇介紹DSpace擴增MediaFilter格式的安裝篇,安裝完之後,還要做一次[dspace]/bin/filter-media才能有展示篇的功能。

需求環境

  • DSpace 1.5.0 release (1.4.2或之後的版本似乎也可以)
  • 作業系統:CentOS 5 Final
  • 必須要具備yum的功能
  • 必須安裝OpenOffice 2.0以上

用yum安裝轉檔軟體

如果你不是root的話,先切換到root權限

[dspace@dspace ~]# su root

修改/etc/yum.repos.d/CentOS-Base.repo

[root@dspace ~]# vim /etc/yum.repos.d/CentOS-Base.repo

你可以上鳥哥來看一下vim文字編輯器要怎麼使用。

在該檔案最後加入以下設定:

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1

把金鑰加入RPM的資料庫

[root@dspace ~]# rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt


如果你沒辦法下載RPM-GPG-KEY.dag.txt的話,可以下載我的備份檔案。(雖然沒什麼意義,他的伺服器掛點的話,之後yum也沒辦法安裝所需要的檔案啊。)

執行yum的安裝指令

[root@dspace ~]# yum -y install ffmpeg mencoder imagemagick python python-imaging

如果安裝都順利進行的話,那麼這個步驟就完成囉。

配置ZoomifyImage

ZoomifyImage的計畫網站中去下載最新版本,目前是1.4版,也可以下載我另外備份的檔案(24.06MB,有點大喔)。解壓縮之後,擺到/opt/當中 。

在Linux指令列之下,你可以用wget下載檔案,然後利用tar解壓縮,將之移至/opt/當中。指令如下:

[root@dspace ~]# wget http://nchc.dl.sourceforge.net/sourceforge/zoomifyimage/ZoomifyImage1_4.tar.gz
[root@dspace ~]# tar -zxvf ZoomifyImage1_4.tar.gz
[root@dspace ~]# mv ZoomifyImage /opt/

ZoomifyImage必須搭配Python才能執行,所以要記得一定要在之前yum安裝步驟中安裝Python喔。

配置JODconverter跟OpenOffice

請下載JODconverter的檔案,取出lib資料夾之中的所有jar檔(除了commons-cli-1.2.jar跟commons-io-1.4.jar之外),放到[dspace]/lib跟Java安裝目錄的擴增目錄(如果你跟我一樣安裝的是JDK 1.6.0.06,那麼路徑就是/usr/java/jdk1.6.0_06/jre/lib/ext/)之中。或是下載我另外備份的檔案:jodconverter-2.2.2-lib.zip

然後伺服器端必需要開啟OpenOffice的服務,用SSH開啟的話不知為何會失敗,請到本機端執行以下指令:

[root@dspace ~]# /usr/lib/openoffice.org2.0/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

出現以下訊息的時候,表示正常開啟:

image

同樣的,也把這段指令加入開機執行的指令當中吧。

修改/etc/rc.local

[root@dspace ~]# vim /etc/rc.local

請把這段指令「/usr/lib/openoffice.org2.0/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard」加到最後去,這樣就大功告成了。

DSpace註冊Bitstream Format

image

開啟DSpace的管理介面,到「Bitstream Format Regisry(附加檔案(二進位檔案)格式登記)」當中,新增以下幾種檔案格式。支援等級皆選擇「已知」、取消「內部」的打勾。

MIME形式 名稱 完整描述 延伸檔名
video/x-msvideo AVI Audio Video Interleave avi
video/x-flv FLV Flash Video flv
video/x-ms-wmv WMV Windows Media Video wmv
application/vnd.rn-realmedia RM Real Media rm
application/vnd.rn-realmedia-vbr RMVB RealVideo Variable Bit Rate File rmvb
audio/3gpp audio/3gpp 3GPP Multimedia File 3gp
video/3gpp video/3gpp 3GPP Multimedia File 3gp
video/mp4v-es MP4 MPEG-4 Video File mp4
application/zip ZIP ZIP zip
audio/mpeg MP3 MPEG-1 Audio Layer 3 mp3
audio/mid MID Musical Instrument Digital Interface mid
audio/x-aac AAC Advanced Audio Coding aac
audio/flac FLAC Free Lossless Audio Codec flac
audio/ogg OGG Ogg ogg
audio/x-ms-wma WMA Windows Media Audio wma
audio/mp4a-latm M4A MPEG-4 Part 14 m4a
text/tab-separated-values TSV Tab-separated values tsv
text/csv CSV Comma-separated values csv

大部分的檔案格式在DSpace 1.5.0當中已經登錄了,特別是文件檔的類型,包括Microsoft Office跟OpenOffice系列,所以在此不特別敘述。目前我測試機上使用的Bitstream Format Registry資料表可以參考這個檔案,裡面有詳盡的設定,如果之後你發現有些格式沒有辦法正確辨識的話,再來比較這個檔案看看缺了哪些格式。

DSpace增加MediaFilter相關檔案

請將以下檔案下載,新增到指定的位置:

  • mediafilter-dspace-api.zip
    [dspace-source]/dspace-api/src/main/java/org/dspace/app/mediafilter/
  • BitstreamDisplay.zip
    [dspace-source]/dspace-jspui/dspace-jspui-api/src/main?java/org/dspace/app/webui/util/
  • RetrieveZIPServlet.zip
    [dspace-source]/dspace-jspui/dspace-jspui-api/src/main?java/org/dspace/app/webui/util/
  • extension-jspui.zip
    [dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/extension/
    ※預設是沒有extension這個資料夾的,請自行建立。

如果你的DSpace是預設的狀態,並且安裝過我之前介紹的XMLMetadata,那麼可以採用我的檔案:

如果你這些檔案已經做過更動,那麼取代的話會造成你設計的功能消失。因此接下來我介紹怎麼調整這些檔案。

DSpace調整display-item.jsp

位置在[dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/display-item.jsp

請在「<dspace:item-preview item="<%= item %>" />」程式碼之前,加入以下JavaScript跟CSS的引用語法,以便帶出jQuery UI等效果:

<script type="text/javascript" src="<%= request.getContextPath() %>/extension/jquery.js"></script> 
<script type="text/javascript" src="<%= request.getContextPath() %>/extension/bitstream-display/thickbox.js"></script> <script type="text/javascript" src="<%= request.getContextPath() %>/extension/bitstream-display/jquery-ui/js/jquery-ui-1.7.1.custom.min.js"></script> <script type="text/javascript" src="<%= request.getContextPath() %>/extension/bitstream-display/doDialog.js"></script> <link rel="stylesheet" href="<%= request.getContextPath() %>/extension/bitstream-display/thickbox.css" type="text/css" /> <link rel="stylesheet" href="<%= request.getContextPath() %>/extension/bitstream-display/jquery-ui/css/smoothness/jquery-ui-1.7.1.custom.css" type="text/css" />

 

DSpace調整web.xml

位置在[dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/WEB-INF/web.xml

加入以下設定,讓DSpace擁有直接讀取zip檔案的功能:

  <servlet>
    <servlet-name>retrieve-zip</servlet-name>
    <servlet-class>org.dspace.app.webui.servlet.RetrieveZIPServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>retrieve-zip</servlet-name>
    <url-pattern>/retrieve-zip/*</url-pattern>
  </servlet-mapping>

 

DSpace調整ItemTag.java

位置在[dspace-source]/dspace-jspui/dspace-jspui-api/src/main/java/org/dspace/app/webui/util/ItemTag.java

主要是使用BitstreamDisplay.java來分析、製作要顯示的連結。BitstreamDisplay.java詳細的用法我會另開一篇教,現在先簡介一下加入BitstreamDisplay功能的作法。

先在開頭引用BitstreamDisplay

import org.dspace.app.webui.util.BitstreamDisplay;

然後找到私有方法listBitstreams(),修改顯示連結的部份。請找到以下部份的程式碼:

                                // Work out what the bitstream link should be
                                // (persistent
                                // ID if item has Handle)
                                String bsLink = "<a target=\"_blank\" href=\""
                                        + request.getContextPath();

                                if ((handle != null)
                                        && (bitstreams[k].getSequenceID() > 0))
                                {
                                    bsLink = bsLink + "/bitstream/"
                                            + item.getHandle() + "/"
                                            + bitstreams[k].getSequenceID() + "/";
                                }
                                else
                                {
                                    bsLink = bsLink + "/retrieve/"
                                            + bitstreams[k].getID() + "/";
                                }

                                bsLink = bsLink
                                        + UIUtil.encodeBitstreamName(bitstreams[k]
                                            .getName(),
                                            Constants.DEFAULT_ENCODING) + "\">";

            					out
                                    .print("<tr><td headers=\"t1\" class=\"standard\">");
                                out.print(bsLink);
            					out.print(bitstreams[k].getName());
                                out.print("</a>");
                                

            					if (multiFile)
            					{
            						out
                                        .print("</td><td headers=\"t2\" class=\"standard\">");

            						String desc = bitstreams[k].getDescription();
            						out.print((desc != null) ? desc : "");
            					}

            					out
                                    .print("</td><td headers=\"t3\" class=\"standard\">");
                                out.print(UIUtil.formatFileSize(bitstreams[k].getSize()));
            					out
                                .print("</td><td headers=\"t4\" class=\"standard\">");
            					out.print(bitstreams[k].getFormatDescription());
            					out
                                    .print("</td><td class=\"standard\" align=\"center\">");

            					// is there a thumbnail bundle?
            					if ((thumbs.length > 0) && showThumbs)
            					{
            						String tName = bitstreams[k].getName() + ".jpg";
                                    String tAltText = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.ItemTag.thumbnail");
            						Bitstream tb = thumbs[0]
                                        .	getBitstreamByName(tName);

            						if (tb != null)
            						{
            							String myPath = request.getContextPath()
                                            	+ "/retrieve/"
                                            	+ tb.getID()
                                            	+ "/"
                                            	+ UIUtil.encodeBitstreamName(tb
                                            			.getName(),
                                            			Constants.DEFAULT_ENCODING);

            							out.print(bsLink);
            							out.print("<img src=\"" + myPath + "\" ");
            							out.print("alt=\"" + tAltText
            									+ "\" /></a><br />");
            						}
            					}

            					out
                                    .print(bsLink
                                            + LocaleSupport
                                                    .getLocalizedMessage(
                                                            pageContext,
                                                            "org.dspace.app.webui.jsptag.ItemTag.view")
                                            + "</a></td></tr>");

然後修改成以下程式碼,注意標註For Bitstream Display的部份:

                                // Work out what the bitstream link should be
                                // (persistent
                                // ID if item has Handle)
                                String bsLink = "<a target=\"_blank\" href=\""
                                        + request.getContextPath();
                                //For Bitstream Display
								String bdLink = request.getContextPath();
								
                                if ((handle != null)
                                        && (bitstreams[k].getSequenceID() > 0))
                                {
                                    bsLink = bsLink + "/bitstream/"
                                            + item.getHandle() + "/"
                                            + bitstreams[k].getSequenceID() + "/";
                                    //For Bitstream Display
                                    bdLink = bdLink + "/bitstream/"
                                            + item.getHandle() + "/"
                                            + bitstreams[k].getSequenceID() + "/";
                                }
                                else
                                {
                                    bsLink = bsLink + "/retrieve/"
                                            + bitstreams[k].getID() + "/";
                                    //For Bitstream Display
                                    bdLink = bdLink + "/retrieve/"
                                            + bitstreams[k].getID() + "/";
                                }

                                bsLink = bsLink
                                        + UIUtil.encodeBitstreamName(bitstreams[k]
                                            .getName(),
                                            Constants.DEFAULT_ENCODING) + "\">";
                                //For Bitstream Display
								bdLink = bdLink + UIUtil.encodeBitstreamName(bitstreams[k]
                                            .getName(),
                                            Constants.DEFAULT_ENCODING);
            					out.print("<tr><td headers=\"t1\" class=\"standard\">");
                                //out.print(bsLink);
            					//out.print(bitstreams[k].getName());
                                //out.print("</a>");
                                
                                //For Bitstream Display
                                BitstreamDisplay db = new BitstreamDisplay(item, bdLink);
                                out.print(db.doDialog(bitstreams[k].getName()));

            					if (multiFile)
            					{
            						out
                                        .print("</td><td headers=\"t2\" class=\"standard\">");

            						String desc = bitstreams[k].getDescription();
            						out.print((desc != null) ? desc : "");
            					}

            					out
                                    .print("</td><td headers=\"t3\" class=\"standard\">");
                                out.print(UIUtil.formatFileSize(bitstreams[k].getSize()));
            					out
                                .print("</td><td headers=\"t4\" class=\"standard\">");
            					out.print(bitstreams[k].getFormatDescription());
            					out.print("</td><td class=\"standard\" align=\"center\">");

            					// is there a thumbnail bundle?
            					if ((thumbs.length > 0) && showThumbs)
            					{
            						String tName = bitstreams[k].getName() + ".jpg";
                                    String tAltText = LocaleSupport.getLocalizedMessage(pageContext, "org.dspace.app.webui.jsptag.ItemTag.thumbnail");
            						Bitstream tb = thumbs[0]
                                        .	getBitstreamByName(tName);

            						if (tb != null)
            						{
            							String myPath = request.getContextPath()
                                            	+ "/retrieve/"
                                            	+ tb.getID()
                                            	+ "/"
                                            	+ UIUtil.encodeBitstreamName(tb
                                            			.getName(),
                                            			Constants.DEFAULT_ENCODING);

            							//out.print(bsLink);
            							//out.print("<img src=\"" + myPath + "\" ");
            							//out.print("alt=\"" + tAltText
            							//		+ "\" /></a>");
            							
            							//For Bitstream Display
            							String thumbnailImg = "<img src=\"" + myPath + "\" alt=\"" + tAltText
            									+ "\" />";
            							out.print(db.doDialog(thumbnailImg));
            							out.print("<br />");
            						}
            					}

            					//out.print(bsLink
            					//	+ LocaleSupport.getLocalizedMessage(pageContext,"org.dspace.app.webui.jsptag.ItemTag.view")
            					//	+ "</a>");
                                
                                //For Bitstream Display
                                out.print(db.doDialog(LocaleSupport.getLocalizedMessage( pageContext, "org.dspace.app.webui.jsptag.ItemTag.view")));
                                out.print("</td></tr>");

 

DSpace調整style.css.jsp

位置在[dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/style.css.jsp

請新增一段程式碼,以讓Bitstream的列表置中:

table.miscTable, table.attentionTable {
	margin: auto;
}

效果圖片如下:

image

DSpace修改dspace.cfg設定

位置在[dspace]/config/dspace.cfg

最後,要加入設定,Media Filter才能生效。預設的Media Filter部份設定如下:

#### Media Filter / Format Filter plugins (through PluginManager) ####
# Media/Format Filters help to full-text index content or
# perform automated format conversions

#Names of the enabled MediaFilter or FormatFilter plugins
filter.plugins = PDF Text Extractor, HTML Text Extractor, \
				 Word Text Extractor, JPEG Thumbnail
# [To enable Branded Preview]: remove last line above, and uncomment 2 lines below
#   			 Word Text Extractor, JPEG Thumbnail, \
#   			 Branded Preview JPEG

#Assign 'human-understandable' names to each filter
plugin.named.org.dspace.app.mediafilter.FormatFilter = \
  org.dspace.app.mediafilter.PDFFilter = PDF Text Extractor, \
  org.dspace.app.mediafilter.HTMLFilter = HTML Text Extractor, \
  org.dspace.app.mediafilter.WordFilter = Word Text Extractor, \
  org.dspace.app.mediafilter.JPEGFilter = JPEG Thumbnail, \
  org.dspace.app.mediafilter.BrandedPreviewJPEGFilter = Branded Preview JPEG

#Configure each filter's input format(s)
filter.org.dspace.app.mediafilter.PDFFilter.inputFormats = Adobe PDF
filter.org.dspace.app.mediafilter.HTMLFilter.inputFormats = HTML, Text
filter.org.dspace.app.mediafilter.WordFilter.inputFormats = Microsoft Word
filter.org.dspace.app.mediafilter.JPEGFilter.inputFormats = BMP, GIF, JPEG, image/png
filter.org.dspace.app.mediafilter.BrandedPreviewJPEGFilter.inputFormats = BMP, GIF, JPEG, image/png

請修改成以下設定:

#### Media Filter / Format Filter plugins (through PluginManager) ####
# Media/Format Filters help to full-text index content or
# perform automated format conversions

#Names of the enabled MediaFilter or FormatFilter plugins
filter.plugins = PDF Text Extractor, HTML Text Extractor, \
				 Word Text Extractor, JPEG Thumbnail, \
FFmpeg Image Capturer, MEncoder Image Capturer, \
FFmpeg Video Converter, MEncoder Video Converter, \
Zoomify Image Converter, FFmpeg Audio Converter, \
ImageMagick Converter, OOg Text Converter, OOg PPT Converter, OOg PDF Converter

# [To enable Branded Preview]: remove last line above, and uncomment 2 lines below
#   			 Word Text Extractor, JPEG Thumbnail, \
#   			 Branded Preview JPEG

#Assign 'human-understandable' names to each filter
plugin.named.org.dspace.app.mediafilter.FormatFilter = \
  org.dspace.app.mediafilter.FFmpegVideoFilter = FFmpeg Video Converter, \
  org.dspace.app.mediafilter.FFmpegImgFilter = FFmpeg Image Capturer, \
  org.dspace.app.mediafilter.MEncoderFilter = MEncoder Video Converter, \
  org.dspace.app.mediafilter.MEncImgFilter = MEncoder Image Capturer, \
  org.dspace.app.mediafilter.ZoomifyFilter = Zoomify Image Converter, \
  org.dspace.app.mediafilter.FFmpegAudioFilter = FFmpeg Audio Converter, \
  org.dspace.app.mediafilter.PDFFilter = PDF Text Extractor, \
  org.dspace.app.mediafilter.HTMLFilter = HTML Text Extractor, \
  org.dspace.app.mediafilter.WordFilter = Word Text Extractor, \
  org.dspace.app.mediafilter.JPEGFilter = JPEG Thumbnail, \
  org.dspace.app.mediafilter.BrandedPreviewJPEGFilter = Branded Preview JPEG, \
  org.dspace.app.mediafilter.ImageMagickFilter = ImageMagick Converter, \
  org.dspace.app.mediafilter.OOgPDFFilter = OOg PDF Converter, \
  org.dspace.app.mediafilter.OOgTextFilter = OOg Text Converter, \
  org.dspace.app.mediafilter.OOgPPTFilter = OOg PPT Converter

#Configure each filter's input format(s)
filter.org.dspace.app.mediafilter.PDFFilter.inputFormats = Adobe PDF
filter.org.dspace.app.mediafilter.HTMLFilter.inputFormats = HTML, Text
filter.org.dspace.app.mediafilter.WordFilter.inputFormats = Microsoft Word
filter.org.dspace.app.mediafilter.JPEGFilter.inputFormats = BMP, GIF, JPEG, image/png
filter.org.dspace.app.mediafilter.BrandedPreviewJPEGFilter.inputFormats = BMP, GIF, JPEG, image/png
filter.org.dspace.app.mediafilter.FFmpegVideoFilter.inputFormats = MP4, MPEG, AVI, FLV, WMV
filter.org.dspace.app.mediafilter.FFmpegImgFilter.inputFormats = MP4, MPEG, AVI, FLV, WMV
filter.org.dspace.app.mediafilter.MEncoderFilter.inputFormats = RM, RMVB, video/3gpp, Video Quicktime
filter.org.dspace.app.mediafilter.MEncImgFilter.inputFormats = RM, RMVB, video/3gpp, Video Quicktime
filter.org.dspace.app.mediafilter.ZoomifyFilter.inputFormats = BMP, GIF, JPEG, image/png, TIFF
filter.org.dspace.app.mediafilter.FFmpegAudioFilter.inputFormats = MP3, AAC, FLAC, OGG, WMA, WAV, M4A
filter.org.dspace.app.mediafilter.ImageMagickFilter.inputFormats = TIFF
filter.org.dspace.app.mediafilter.OOgPDFFilter.inputFormats = Microsoft Powerpoint, OpenDocument Presentation, RTF, OpenDocument Spreadsheet, Calc 6.0 spreadsheets, CSV, TSV, Impress 6.0 presentations, Microsoft Word, OpenDocument Text, Writer 6.0 documents
filter.org.dspace.app.mediafilter.OOgTextFilter.inputFormats = Microsoft Powerpoint, OpenDocument Presentation, RTF, OpenDocument Spreadsheet, Calc 6.0 spreadsheets, CSV, TSV, Impress 6.0 presentations, OpenDocument Text, Writer 6.0 documents
filter.org.dspace.app.mediafilter.OOgPPTFilter.inputFormats = Microsoft Powerpoint, Impress 6.0 presentations, OpenDocument Presentation

# Where is Temp Directory?
filter.tempfile.config = /tmp/

# How to excute FFmpeg?
filter.exec.ffmpeg = ffmpeg
# FFmpeg Config
filter.FFmpegVideoFilter.config = -ar 22050 -ab 56 -f flv -y -s 320x240
filter.FFmpegImgFilter.config = -y -f image2 -ss 8 -t 0.001 -s 80x60
filter.FFmpegAudioFilter.config = -ar 22050 -y

# How to excute MEncoder?
filter.exec.mencoder = mencoder
# MEncoder Config
filter.MEncoderFilter.config = -vf scale=320:240 -ffourcc FLV1 -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -ovc lavc -lavcopts vcodec=flv:vbitrate=200 -srate 22050 -oac lavc -lavcopts acodec=mp3:abitrate=56

# How to excute Python?
filter.exec.python = python
# Where is ZoomifyFileProcessor.py ?
filter.exec.zoomifyImage = /opt/ZoomifyImage/ZoomifyFileProcessor.py
# How to excute ImageMagick?
filter.exec.imagemagick = convert

簡單說明一下各設定檔的用處:

  • filter.plugins:要採用哪些filter,輸入他們的名稱。
  • plugin.named.org.dspace.app.mediafilter.FormatFilter:設定各個filter的名稱。
  • filter.org.dspace.app.mediafilter.*******.inputFormats:設定該filter處理的檔案類型,名稱是Bitstream Format當中的「名稱」,所以上面才要先設定Bitstream Format。
  • 以下都是各個filter的設定參數,可以做進一步的微調。如果你要在Windows環境底下執行的話,這些參數可能需要重新調整。

DSpace重新編譯

步驟如下,注意[tomcat]、[dspace-source]跟[dspace]要替換成你Tomcat的位置、原始碼跟安裝目的地的位置:

  1. cd [dspace-source]/dspace/
  2. mvn package
  3. cd [dspace-source]/dspace/target/dspace-1.5.0-build.dir/
  4. ant -Dconfig=[dspace]/config/dspace.cfg update
  5. \cp -rf [dspace]/webapps/* [tomcat]/webapps/
  6. [tomcat]/bin/shutdown.sh
  7. [tomcat]/bin/startup.sh

DSpace執行filter-media

請執行以下指令:

[root@dspace ~]# [dspace]/bin/filter-media -v

加入-v指令,程式就會顯示他處理的詳細過程,也可以看到剛剛新增的MediaFilter有沒有正確地被採用,如下圖:

image

如果有完成的話,就可以找一個有Bitstream的Item頁面看看這些功能有沒有出來囉。

image


因為MediaFilter結合了許多工具,儘管我已經盡量把安裝動作簡化了,但還是很繁雜,如果哪裡有出錯,請務必通知我。下一篇則是給進階者的BitstreamDisplay使用篇,讓你更進一步地去調整display-item或其他的版面。<-- Post Catalog -->

總共30 則留言, (我要發問)

  1. 好一陣子沒來,你這邊因為噗浪而真的只有長篇研究成果了...←開完的那一剎那間臉變成=口=|||而且有看到教科書而很想關視窗的慾望

    主頁右邊那些開的很不快。好像因為在讀取我家IE呆掉了一下,20秒吧

    選這篇留言單純是因為是第一篇0.0Y

    開啟這篇後出現了4.5個錯誤警告,好像是你網頁的問題;但因為都是英文+手按太快,不記得內容了(茶)

    你今年要畢業?

    回覆刪除
  2. 哇哈哈,這些文章都不是給普通人看的,算是技術文件。

    我大部分閒聊都會在Plurk上,要找我聊天的話上Plurk比較快。
    http://www.plurk.com/pulipuli/invite
    當然,這邊也還是會看就是了。

    右邊側欄列因為加了一些奇怪的功能,而且我故意讓他分段延遲讀取,不然一起讀取的話也都會當在那邊。Firefox或Google瀏覽器開起來就比較順了,大概吧?

    應該明年才會畢業,詳情可以看「延畢確定」這篇
    http://pulipuli.blogspot.com/2009/05/blog-post.html

    回覆刪除
  3. 耶...對耶,延畢確定被專業技術文件淹沒我居然沒看到他0.0a

    (拍)雖然覺的你工作不會很難找,但大環境景氣不佳,你多呆2年做自己想(?)做的事也不錯啦...(總覺的你那篇文有點怨氣了XD)

    錯誤警告這次有數,共13個;內容非屬中國方塊字,大腦資料庫當機(茶)

    本小姐現在一週才玩電腦2.3天,噗浪對我來說有點像大量過期簡訊,不喜歡。紅起來的基礎建立在長時間使用電腦/3不5時拿手機上網的人吧。小眾?大眾?同好型?

    台中31度,熱到想砍人= =+

    回覆刪除
  4. 網頁錯誤我想應該是Google Analytic的錯吧,那東西實在很複雜,別管他了。

    我這邊冷氣很冷,伺服器很吵,歡迎奶奶下次來政大爬山找我

    回覆刪除
  5. 您好
    mediafilter-dspace-api.zip這檔內
    OOgPDFEncFilter.java
    OOgPDFFilter.java
    兩個檔內容似乎一樣
    編譯時過不去

    謝謝

    回覆刪除
  6. 您好,我要安裝mediafilter時,也遇到mediafilter-dspace-api.zip 裡OOgPDFEncFilter.java
    OOgPDFFilter.java
    兩個檔案是一樣的問題耶,不知道布丁大大可以幫忙補上嗎?
    謝謝

    彩塵砂留

    回覆刪除
  7. OOgPDFEncFilter.java
    是多餘的,請幫我自動刪掉吧QQ

    回覆刪除
  8. 您好
    我安裝完之後
    進入item頁後出現空白
    在tomcat裡面出現了的錯誤訊息
    似乎是BitstreamDisplay.java 150行
    轉int的時候出現問題
    不曉得是不是bug
    謝謝


    java.lang.NumberFormatException: For input string: "28223/1/M9430773200501.pdf"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:456)
    at java.lang.Integer.parseInt(Integer.java:497)
    at org.dspace.app.webui.util.BitstreamDisplay.setBitstream(BitstreamDisplay.java:150)
    at

    回覆刪除
  9. 另外 系統傳入setBitstream的字串為
    /bitstream/2377/3680/1/ce07ics002006000218.pdf
    可能是跟您原先設想當字串不一樣

    回覆刪除
  10. 是的,跟預想的不一樣,應該說本來是不會有這種檔案名稱的吧?
    我預想的是要輸入「/jspui/bitstream/2377/3680/1/ce07ics002006000218.pdf」或是「/jspui/retrieve/12」這種字串,是不是少了以下這段?

    //For Bitstream Display
    String bdLink = request.getContextPath();

    回覆刪除
  11. 我在程式路徑的地方都加上/jspui/就可以了

    我想原因應該是我們的tomcat在路徑那邊有做設定的關係 我們把jspui那個資料夾隱藏了才導致這個問題吧

    現在可以用了
    不過另外發現了一個bug
    點選了一個影片撥放後之後
    到另一個item看影片時會出不來
    這應該是只有在IE上有的問題
    目前試在Opera是正常的

    加上這個介面真的不錯
    感謝

    回覆刪除
  12. 你的建議讓我發現到這隻程式的缺點,感謝你,現在就來修改!

    回覆刪除
  13. 您好

    我發現開啟PDF檔案時第一次可以正常開啟

    關掉再去開啟另一個PDF時會出現錯誤的情況

    這也是只有IE會發生

    謝謝

    回覆刪除
  14. 嗯……IE6在這種時候總是會呈現不可思議的怪現象。
    我再研究看看好了,感謝!

    回覆刪除
  15. 你好

    IE開影片的問題我找到解決方法了

    參考
    http://www.mail-archive.com/swfobject@googlegroups.com/msg00560.html
    http://www.javaworld.com.tw/jute/post/view?bid=6&id=37434&sty=0

    第一步
    在BitstreamDisplay.java檔的doVideoPlayer中player_flv_maxi.swf後面加上?r="+new java.util.Date().getTime()+"

    這樣做可以解決開完a影片再開b影片的問題
    但是如果之前開過a影片之後再開a影片的話的話IE會用cache裡的資料會還是開不起來 要再按F5
    所以第二步在layout/header-default.jsp這個檔中head部分加上
    第二個連結提供的方法 就可以避免這個問題了

    回覆刪除
  16. 樓上大大真是太強了,請受我一拜 <(_ _)>

    回覆刪除
  17. 如果你發現在作soffice的轉換得時候出現以下問題:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.guessDocumentFormat(AbstractOpenOfficeDocumentConverter.java:118)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:93)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:74)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:70)
    at org.dspace.app.mediafilter.MediaFilterUtils.JODConvert(MediaFilterUtils.java:665)
    at org.dspace.app.mediafilter.MediaFilterUtils.JODConvert(MediaFilterUtils.java:637)
    at org.dspace.app.mediafilter.MediaFilterUtils.Doc2PDF(MediaFilterUtils.java:576)
    at org.dspace.app.mediafilter.Doc2SWF.getDestinationStream(Doc2SWF.java:61)
    at org.dspace.app.mediafilter.MediaFilterManager.processBitstream(MediaFilterManager.java:652)
    at org.dspace.app.mediafilter.MediaFilterManager.filterBitstream(MediaFilterManager.java:554)
    at org.dspace.app.mediafilter.MediaFilterManager.filterItem(MediaFilterManager.java:504)
    at org.dspace.app.mediafilter.MediaFilterManager.applyFiltersItem(MediaFilterManager.java:472)
    at org.dspace.app.mediafilter.MediaFilterManager.main(MediaFilterManager.java:379)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FilenameUtils
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 13 more

    表示缺少了FilenameUtils.class
    這通常是在commons-io-1.4.jar裡面,[dspace]/lib/就可以找到
    請把他複製到/usr/java/jdk1.6.0_06/jre/lib/ext/底下(如果你不是安裝jdk1.6.0_06,那麼請自行替換路徑)

    這樣就可以了

    回覆刪除
  18. 另外,我發現到執行soffice的時候沒有回傳訊息似乎是正常的!

    [root@dspace ~]# /usr/lib/openoffice.org2.0/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

    就算下面沒有訊息,實際上JODconverter還是可以正常運作

    回覆刪除
  19. 如果你發現你在轉換需要使用到OpenOffcie來用的Word、Excel、PowerPoint時也遇到了以下問題的話,解決方法是到套件管理員搜尋openoffice,找到包含「unoconv」套件在內的所有檔案都打勾安裝,就可以順利運作了。

    沒有安裝之前,會發生錯誤訊息如下:

    2009/7/28 下午 11:30:30 com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect
    資訊: connected
    2009/7/28 下午 11:30:32 com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing
    資訊: disconnected
    Exception in thread "main" com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException: conversion failed: could not load input document
    at com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:131)
    at com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.convertInternal(OpenOfficeDocumentConverter.java:120)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:104)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:74)
    at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:70)
    at com.artofsolving.jodconverter.cli.ConvertDocument.convertOne(ConvertDocument.java:154)
    at com.artofsolving.jodconverter.cli.ConvertDocument.main(ConvertDocument.java:133)
    Caused by: com.sun.star.uno.RuntimeException: exception type not found: bad_allocpure virtual method called
    N10__cxxabiv121__vmi_class_type_infoEN10__cxxabiv120__si_class_type_infoEN10__cxxabiv117__class_type_infoESt10bad_typeidSt8bad_castSt9type_infoN10__cxxabiv129__pointer_to_member_type_infoEN10__cxxabiv119__pointer_type_infoEN10__cxxabiv117__pbase_type_infoEN10__cxxabiv116__enum_type_infoEN10__cxxabiv120__function_type_infoEN10__cxxabiv117__array_type_infoEN10__cxxabiv123__fundamental_type_info
    at com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:182)
    at com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:148)
    at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:344)
    at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:313)
    at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:101)
    at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:652)
    at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:154)
    at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:136)
    at $Proxy5.loadComponentFromURL(Unknown Source)
    at com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadDocument(OpenOfficeDocumentConverter.java:150)
    at com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:127)
    ... 6 more

    回覆刪除
  20. 為了讓他們解壓縮的時候擁有完整的影片編碼/解碼(codec)程式,還需要另外安裝codec包

    請到http://www.mplayerhq.hu/design7/dload.html下載Binary Codec Packages
    以我使用的Linux是x86版本來說,下載連結是:http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
    備份檔案:http://cid-7113c88187767b01.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/dspace/20090808-mencoder-codec/essential-20071007.tar.bz2
    請解壓縮之後,放到/usr/lib/codecs資料夾當中即可

    回覆刪除
  21. mencoder似乎有點問題,刪除mencoder的方法是「killall -9 mencoder」

    此外,soffice也沒辦法開機自動啟動,還需要另外找方法

    回覆刪除
  22. You were not mistaken, truly

    回覆刪除
  23. To 彩塵砂:

    補檔:DSpace擴增MediaFilter格式(安裝篇)
    http://pulipuli.blogspot.tw/2009/05/dspacemediafilter_19.html

    mediafilter-dspace-api.zip http://flashmirrors.com/files/0bbzkjvwala6qin/mediafilter-dspace-api.zip
    [dspace-source]/dspace-api/src/main/java/org/dspace/app/mediafilter/

    BitstreamDisplay.zip http://flashmirrors.com/files/xtdifem6zcpkoh1/BitstreamDisplay.zip
    [dspace-source]/dspace-jspui/dspace-jspui-api/src/main?java/org/dspace/app/webui/util/

    RetrieveZIPServlet.zip http://flashmirrors.com/files/6yhcgs81suaxqrm/RetrieveZIPServlet.zip
    [dspace-source]/dspace-jspui/dspace-jspui-api/src/main/java/org/dspace/app/webui/servlet/

    extension-jspui.zip http://flashmirrors.com/files/1knqf7npaxfegei/extension.zip
    [dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/extension/
    ※預設是沒有extension這個資料夾的,請自行建立。

    不好意思,請加油。

    回覆刪除
  24. 布丁大,我執行 filter-media 轉500多mb 的mpg 有成功,
    但轉1g多的,就會當住。 不曉得是不是有參數可以調整?

    我有想說自己先用個人電腦轉成flv,然後再把flv檔放上去,
    可惜dspace的實體檔案結構總是123456789/72/32 等等。
    不曉得該怎麼從後端來換, 可以請教一下嗎?

    回覆刪除
  25. To 彩塵砂,

    我真沒想到會有人拿來轉大檔案 OTL

    建議影片分段。

    沒辦法轉的問題,要先檢查FFmpeg跟Encoder在系統上有沒有辦法處理
    因為主要負責轉檔的是這兩個工具,DSpace只是負責儲存而已

    它的轉換並不是單純影片轉影片而已,它還包括擷圖、保存原本影片、轉換成播放用的影片等等多個步驟。

    123456789/72/32
    是bitstream的internal_id對應到的目錄結構
    所以這個bitstream的internal_id為1234567897232

    回覆刪除
  26. 作者已經移除這則留言。

    回覆刪除
  27. 布丁大,

    我有買了您 DSPACE-DLLL 的專書,但DSPACE.CFG 裡面有關 mediafilter 的部份,

    想向您請教,因為我上傳了PDF文件,經由FILTER 之後,雖然可以產生預覽。

    但上裡面的中文字都不見了,只剩下表格的框框。

    我有想說若不行用的話,那就不要預覽了,直接下載或開啟PDF檔也是可以的,

    但不知道該如何修改,墾請大大指教了。 謝謝!!

    回覆刪除
  28. 另外想問一下,我原先照您的網頁實作,是可以預覽顯示PDF內容的,但依照DSPACE-DLLL來做時,點擊pdf檔時,卻會呼叫 zoomify 來開啟pdf ,導致裡面的中文字無法顯示,是不是我那個地方設錯了呢? 謝謝!!

    回覆刪除
  29. To 施勝忠,

    1. 這個網頁的教學是2009年,書本是2014年(雖然系統是2010年左右做完的),書本的DSpace-DLLL已經採用了不同的方式處理了

    2. 中文字出不來的情況很多,舉例包括:
    a. PDF根本就沒有中文字,只是由多張圖片組成,這很常見
    b. PDF裡面根本就不是中文字,OCR失敗,這也很常見
    c. OpenOffice當機了,沒有重開機
    d. OpenOffice當機了,因為記憶體不足,不能轉換PDF

    不管是那個問題,拿出PDF檔案來給大家檢查一下再說吧。

    回覆刪除

留言工具: