:::

DSpace遇到「Failed to resolve artifact.」的問題

布丁布丁吃布丁

1 Comments

DSpace遇到「Failed to resolve artifact.」的問題

image

在DSpace編譯的過程中,如果遇到以下錯誤訊息,大部分時候是網路連線已經中斷的問題:

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

No versions are present in the repository for the artifact with a range [1.5.0.0,1.6.0.0)
  org.dspace:dspace-api-lang:jar:null

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  maven.dspace.org/snapshot (http://maven.dspace.org/snapshot)


[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

這是由於DSpace在做MVN的時候需要去網路上檢查jar檔案,而如果你的伺服器網路如果不通,那就無法順利進行編譯。

解決方法則就是一般網管的問題囉。VirtualBox的NAT虛擬網卡偶爾會當掉,就會發生上述情況,我在此留下一個記錄。

(more...)

我也被詐騙了

布丁布丁吃布丁

我也被詐騙了

今晚我被冒稱PCHome購物人員(大陸口音)跟中華郵政人員說我交易紀錄從單筆轉帳變成12期轉帳,原本買了200元的商品變成要繳交2400元,必須趕快處理完畢,便指示我到ATM去作取消的動作,於是我上當了。


過程是這樣的:

晚上8點我接收大陸口音(怪異點:其實電話訊號非常不清楚,我也聽了好久,其實不是很確定)的PCHome客服人員(來電顯示+0227040999,這隻是詐騙電話喔)解釋說我交易資料因為公司伺服器更新失誤所以單筆匯款變成12期匯款,原本交易金額200元便要付12期變成2400元,而我上次的確在PCHome購物時發生匯款錯誤的動作,而稍微相信。

他與我確認中華郵政的客服電話(怪異點:根本就不需要跟我確認,他只是要仿造電話而已)之後,說他要跟中華郵政確認完之後再由中華郵政人員打電話給我。

稍後果然有中華郵政客服專線0423542030來電(怪異點:其實來電號碼可以偽造,只是當時我不知道),叫我去附近ATM作餘額查詢。我想說餘額查詢也不是轉帳,他說要馬上跟我確認,於是我就急忙地衝到附近的ATM去處理。查完餘額之後,他開始跟我確認經辦機號(ATM的編號),並告訴我地址,以讓我信服他其實跟ATM有連線(怪異點:其實這上網查得到經辦機號,那不需要跟ATM連線),然後跟我確認個人資料(怪異點:都外洩了吧),並強調他並不是詐騙集團之類的。

然後他指示我操作ATM,一開始就用跨行轉帳,我有意識到這是詐騙手法,於是很仔細地跟他再確認交易資料跟輸入的資料,他指示我操作的帳號、金額什麼的,都是錯誤的資料,他說那是內部操作。到此為止,都是以往聽過詐騙的手法,我也中斷了好幾次操作,他一直催促我,情急之下我也越來越沒有戒心,想趕快把他弄完回去趕程式,也累了。

最後一次他就用存簿轉帳,而且輸入了PCHOME交易編號(怪異點:其實是存戶帳號,仔細想想PCHome的編號應該不會都是數字),金額則輸入29999密碼(怪異點:這是非約定轉帳上限3萬元少一元),然後匯出後他告訴我連線錯誤,然後說到12點就會恢復正常,叫我別緊張,他現在馬上修正,就掛斷電話。

我馬上打同一隻電話0423542030到中華郵政,他說我被詐騙了,請打165反詐騙電話去報案。我跟165報案完畢,就請浚學弟陪我一起到政大前面的文山分局報案,作筆錄、登記拿三聯單。

總結以上,反詐騙的重點在於:

  1. 不管怎樣都跟165反詐騙電話確認一下吧!
  2. 應該要你打過去跟他確認,他就沒辦法用來電顯示修改器了。.
  3. 不要急,其實這種東西都沒這麼急的,多多跟別人確認確認吧。
  4. 朋友請阻止認識的人不要這樣做,下次有人遇到帳戶問題的,我會第一時間打電話阻止他,順便卡詐騙電話來電。

反正自己笨,也沒什麼好反駁的。就這樣吧。

題外話,被詐騙之後中華電信又來電說我電話費沒繳交,我去電跟客服人員確認之後發現真有此事,但是已經申請延期,所以不必繳。真是麻煩呢。

(more...)

我回來了,我又走了

布丁布丁吃布丁

0 Comments

我回來了,我又走了

2009-10-09-251

教育部全國通識網到中南部舉行公開說明會,而10/8這天來到了台中逢甲,準備10/9將在逢甲大學舉行的中區說明會。台中逢甲夜市一向是十分有名的,既然來了當然是要來逛逛囉。

「熟的人帶路。」同事對我這個台中人這樣說,我有點尷尬地回他道:「其實,我也不知道這裡有什麼好吃的。」

我不太會玩,也不太會分辨美食,大概是因為多少抱持著「不要多花錢在這些吃吃喝喝的玩樂上」的傳統價值觀的關係,「這邊哪裡好玩?有什麼好吃的?」我大概都是一問三不知。

但是,我可以說的是另一種事情……

「這家馬鈴薯泥是以前我朋友帶我來吃過的。」

「這條街以前我跟我朋友來的時候,都是肩靠肩地前進呢。」

「逢甲大學那棟體育館,以前我大學繳交志願卡的地點就是在那邊。」

「我妹很常來逛逢甲夜市喔。」

……諸如此類的事情,都是回憶。

對我來說,比起美食、好玩的事物,回憶有趣多了。

(more...)

製作VirtualBox 3.0.6自動安裝檔

布丁布丁吃布丁

製作VirtualBox 3.0.6自動安裝檔

image

VirtualBox是一個虛擬機器的軟體,我喜歡用他來架設測試用的機器,以及快速安裝KohaDSpace。然而VirtualBox安裝步驟多,我希望能夠簡化這個程序,因此開始研究起自動安裝的方法。(此處使用的是VirtualBox 3.0.6,自由軟體)

AutoIT,可以script(腳本檔)程式來控制你電腦中任何操作,甚至臨時建立表單、問答視窗,都可以作到。他也常被用來作為自動安裝的用途,也包括了自動安裝VirtualBox。(此處使用的是AutoIT V3)

修改了左又天撰寫的自動安裝script,我也利用IconsExtract抽取出VirtualBox的icon檔案,接著就可以利用WinRAR來製作自我解壓縮檔。(此處我使用的是3.61中文版)

最後的結果,就放在此處讓人下載:

另外放上我改過的AutoIT Script 檔案,但是最後的網卡安裝並沒有寫得很好,請各位先進多多指教:

Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
RUN("VirtualBox.exe")
WinWait("Sun VirtualBox Setup","The Setup Wizard wil")
If Not WinActive("Sun VirtualBox Setup","The Setup Wizard wil") Then WinActivate("Sun VirtualBox Setup","The Setup Wizard wil")
WinWaitActive("Sun VirtualBox Setup","The Setup Wizard wil")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox License Agreement","I &accept the terms ")
If Not WinActive("Sun VirtualBox License Agreement","I &accept the terms ") Then WinActivate("Sun VirtualBox License Agreement","I &accept the terms ")
WinWaitActive("Sun VirtualBox License Agreement","I &accept the terms ")
ControlFocus("Sun VirtualBox License Agreement", "", "Button2")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox Setup","")
If Not WinActive("Sun VirtualBox Setup","") Then WinActivate("Sun VirtualBox Setup","")
WinWaitActive("Sun VirtualBox Setup","")
Send("{ALTDOWN}n{ALTUP}")
sleep(1000)
ControlFocus("Sun VirtualBox Setup", "", "Button2")
Send("{space}")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox ","Installing the Sun V")
If Not WinActive("Sun VirtualBox ","Installing the Sun V") Then WinActivate("Sun VirtualBox ","Installing the Sun V")
WinWaitActive("Sun VirtualBox ","Installing the Sun V")
Send("{ALTDOWN}y{ALTUP}")
WinWait("Sun VirtualBox Setup","")
If Not WinActive("Sun VirtualBox Setup","") Then WinActivate("Sun VirtualBox Setup","")
WinWaitActive("Sun VirtualBox Setup","")
Send("{ALTDOWN}i{ALTUP}")
WinWait("軟體安裝","繼續安裝這個軟體會在")
If Not WinActive("軟體安裝","繼續安裝這個軟體會在") Then WinActivate("軟體安裝","繼續安裝這個軟體會在")
WinWaitActive("軟體安裝","繼續安裝這個軟體會在")
Send("{ALTDOWN}c{ALTUP}")
WinWait("軟體安裝","")
If Not WinActive("軟體安裝","") Then WinActivate("軟體安裝","")
WinWaitActive("軟體安裝","")
Send("{ALTDOWN}c{ALTUP}")
WinWait("軟體安裝","")
If Not WinActive("軟體安裝","") Then WinActivate("軟體安裝","")
WinWaitActive("軟體安裝","")
Send("{ALTDOWN}c{ALTUP}")
WinWait("硬體安裝","您正要為這個硬體安裝")
If Not WinActive("硬體安裝","您正要為這個硬體安裝") Then WinActivate("硬體安裝","您正要為這個硬體安裝")
WinWaitActive("硬體安裝","您正要為這個硬體安裝")
Send("{ALTDOWN}c{ALTUP}")
WinWait("硬體安裝","您正要為這個硬體安裝")
If Not WinActive("硬體安裝","您正要為這個硬體安裝") Then WinActivate("硬體安裝","您正要為這個硬體安裝")
WinWaitActive("硬體安裝","您正要為這個硬體安裝")
Send("{ALTDOWN}c{ALTUP}")
Sleep(10000)
Send("{ALTDOWN}c{ALTUP}")
Sleep(3000)
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox Setup","Start Sun VirtualBox")
If Not WinActive("Sun VirtualBox Setup","Start Sun VirtualBox") Then WinActivate("Sun VirtualBox Setup","Start Sun VirtualBox")
WinWaitActive("Sun VirtualBox Setup","Start Sun VirtualBox")
Send("{SHIFTDOWN}{TAB}{SHIFTUP}")
Send("{SPACE}")
Send("{ALTDOWN}f{ALTUP}")

參考來源

[教學] 封裝AutoIt自動安裝程式 - 軟件討論區 - SUM-HK論壇提供/新聞/娛樂/數碼/音樂/電影等資訊~~ - Powered by Discuz! . Retrieved October 5, 2009, from http://sum-hk.marlito.com/redirect.php?tid=760&goto=lastpost.

VirtualBox 3.0.6 一鍵安裝 完整封裝 圖文教學(Autoit) ( 彈指瞬間 - 社群文章 ). . Retrieved October 5, 2009, from http://itgroup.blueshop.com.tw/moan/it_club?n=convew&i=12488.

(more...)

JAVA寄信問題「HELO requires domain address」的解決方法

布丁布丁吃布丁

JAVA寄信問題「HELO requires domain address」的解決方法

image

當我利用VirtualBox架設虛擬機器時,會發現沒辦法正常地使用註冊信的功能。這是因為虛擬機器內部的domain name並不是其他domain name server認可的名稱,只是我測試用的名字。此時可以自行在伺服器當中新增此domain name,對應到127.0.0.1,也就是本機端,就可以解決此問題。

以下詳述這個問題的發生與解決過程。

虛擬機器中DSpace的郵件設定
##### Email settings ######

# SMTP mail server
mail.server = 127.0.0.1

# SMTP mail server authentication username and password (if required)
# mail.server.username = myusername
# mail.server.password = mypassword

# SMTP mail server alternate port (defaults to 25)
mail.server.port = 25

# From address for mail
mail.from.address = dspace-noreply@dspace-dlll.nccu.edu.tw

# Currently limited to one recipient!
feedback.recipient = dspace-help@dspace-dlll.nccu.edu.tw

# General site administration (Webmaster) e-mail
mail.admin = dspace-help@dspace-dlll.nccu.edu.tw

必須說明到,上述設定當中的「dspace-dlll.nccu.edu.tw」完全沒有註冊在任何domain name server當中。因此執行時就會發生錯誤。

認不出domain name的錯誤訊息

image

在此設定當中進入DSpace的使用者註冊時,就會發生錯誤。我們來到DSpace的記錄檔當中看看,預設位置在「[dspace]/log/dspace.log」,可以用文字編輯器來開啟。

錯誤訊息如下:

2009-10-02 23:58:27,828 INFO  org.dspace.app.webui.servlet.RegisterServlet @ anonymous:session_id=29633B32BF10EEEF95FCF4DC71B5C7FD:ip_addr=10.0.2.2:sendtoken_register:email=puddingchen.35@gmail.com
2009-10-02 23:58:30,669 INFO  org.dspace.app.webui.servlet.RegisterServlet @ anonymous:session_id=29633B32BF10EEEF95FCF4DC71B5C7FD:ip_addr=10.0.2.2:error_emailing:email=puddingchen.35@gmail.com
javax.mail.MessagingException: 501 5.0.0 HELO requires domain address

        at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363)
        at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375)
        at javax.mail.Service.connect(Service.java:275)
        at javax.mail.Service.connect(Service.java:156)
        at javax.mail.Service.connect(Service.java:105)
        at javax.mail.Transport.send0(Transport.java:168)
        at javax.mail.Transport.send(Transport.java:98)
        at org.dspace.core.Email.send(Email.java:362)
        at org.dspace.eperson.AccountManager.sendEmail(AccountManager.java:296)
        at org.dspace.eperson.AccountManager.sendInfo(AccountManager.java:256)
        at org.dspace.eperson.AccountManager.sendRegistrationInfo(AccountManager.java:101)
        at org.dspace.app.webui.servlet.RegisterServlet.processEnterEmail(RegisterServlet.java:287)
        at org.dspace.app.webui.servlet.RegisterServlet.doDSPost(RegisterServlet.java:202)
        at org.dspace.app.webui.servlet.DSpaceServlet.processRequest(DSpaceServlet.java:147)
        at org.dspace.app.webui.servlet.DSpaceServlet.doPost(DSpaceServlet.java:105)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

你可能會發現到IP很奇怪,因為這是VirtualBox配給的內部IP。

這段記錄的重點在於錯誤訊息「HELO requires domain address」,代表的意思是HELO認不出來「dspace-dlll.nccu.edu.tw」對應到哪台主機。

設定伺服器當中的domain name對照表

用指令列來修改「/etc/hosts」,增加下列設定:

127.0.0.1       dspace-dlll.nccu.edu.tw dspace-dlll

然後得重新啟動網路,指令是「/etc/init.d/network restart」

或著你也可以用圖形介面來設定。

image

先進入「網路」當中。

image 

切換到「主機」那一頁,然後按「新增」。

image

設定位址、要對應的主機名稱跟其別名。

image

最後記得要儲存才會生效。


以上,大功告成。用虛擬機器果然是比較麻煩了一些,不過也可以藉此在精進網路知識就是了。

(more...)

VirtualBox擴大CentOS的LVM硬碟筆記

布丁布丁吃布丁

VirtualBox擴大CentOS的LVM硬碟筆記

image

前言

VirtualBox使用虛擬動態映像檔(vdi),VDI的好處在於你能夠保留最大到2TB的擴增空間,但卻又只會佔用實際儲存的資料。具體來說,vdi可以讓GuestOS(在此指虛擬機器)當中讀取起來有到2TB(大概2024GB)的硬碟,但在HostOS(在此指實際安裝虛擬機器的本機端)中只會佔用vdi中實際儲存的檔案,可能只需要23GB。當你發現VDI的大小超過HostOS所能允許的空間的話,就直接更換VDI儲存位置,放在更大的硬碟空間裡面就行了,非常方便。

問題敘述

之前在建立VDI時的錯誤決定,讓他的實體空間只有8GB,這對於我系統的要求是不夠的。所以得想辦法讓他擴大才行。

HostOS是Windows XP,GuestOS則是Linux CentOS 5 final。

GuestOS的硬碟在一開始安裝CentOS時都被切割成LVM(Logical Volume Manager)格式——而我後來才知道,這真是個麻煩的格式。因此調整大小的步驟就會多了很多繁雜的步驟。

那麼,接下來我就一步一步地去記錄我是怎麼調整VDI大小的吧。

擴大VDI虛擬大小空間

一、取得Clonezilla

VirtualBox並沒有直接擴大VDI的功能,網路上大部分的教學都是使用GPart Live CD來複製硬碟分割。但很遺憾的,GPart沒辦法讀取LVM (是的,真的很煩人),所以我採用國人自製的自由軟體Clonezilla Live

  • image下載Clonezilla Live,請選擇iso檔案下載,或是下載zip之後解壓縮成為iso。

image

在VirtualBox當中利用掛載光碟映像檔的方式將Clonezilla掛載上去之後,就可以利用Clonezilla開機來複製硬碟資料。

二、建立新的VDI硬碟

我建立一顆新的VDI硬碟,這次把大小提昇到極限值2TB。然後把舊的8GB VDI硬碟跟2TB VDI硬碟都掛到同一台虛擬機器上。

三、使用Clonezilla複製硬碟

我利用Clonezilla將舊硬碟複製到新硬碟去,細節我沒有特別記錄。但是必須讓它保持原本的分割區,不要放大分割區。因為對LVM來說,放大分割區並沒有意義。整個複製作業大概花了我30分鐘。

複製完成之後關掉虛擬機器,卸載就VDI硬碟跟Clonezilla,再以新硬碟開啟,可以成功啟動。而且利用「fdisk -l」的指令查詢,會發現到除了原本的分割區之外,還有很多空間可以利用。

四、擴大LVM的空間

鳥哥的fdiskLVM教學中還蠻詳細的,在此我僅節錄指令步驟:(我的LVM主要空間是「/dev/VolGroup00/LogVol00」,VDI硬碟代號是「/dev/hdb」)

  1. 進入fdisk,用「n」新增分割,選擇「p」主分割,編號為「3」(因為我原本系統中1為boot,2為其他空間),然後指令「w」建立分割並離開。
  2. 使用「partprobe」讓核心重新抓取一次硬碟分割表,成功建立第三個分割,代號是「/dev/hdb3」。
  3. 用「pvcreate /dev/hdb3」建立新的PV,然後用「pvscan」檢查。
  4. 用「vgextend /dev/VolGroup00/LogVol00」來加大VG。
  5. 用「vgdisplay」檢查,注意訊息中會有類似「Free  PE / Size       16486 / 2 TB」(正確數字我有點忘了),那個「16486」就是待會可以新增的空間。
  6. 用「lvresize –l + 16486 /dev/VolGroup00/LogVol00」加大空間。
  7. 用「resize2fs /dev/VolGroup00/LogVol00」把LV的容量擴大到整個檔案系統可以允許的上限。需要耗費一段時間,此時VDI實際大小也會逐漸加大。
  8. 完成後可以用「df -h」來檢查是否有真的擴大了。

到目前為止,儘管VDI的虛擬大小總算擴大到2TB了,但實體大小卻也從7GB增大到23GB。進去虛擬機器中查詢使用量,卻也只有5GB多的用量而已。我猜可能是2TB所需要得區塊量(blocks)比較多,所以也佔去了不少空間。這就跟「買了80G硬碟,實際上可用只有75G」的道理一樣。詳細的原理請回去查查「作業系統」的課本吧。

即使如此,現在VDI的實際大小還是太大了,我們下一節就來談談如何減少VDI的實體大小。

縮小VDI實際檔案大小

image

VirtualBox的VDI的實際大小似乎是取決於虛擬機器當中動到的區塊量。也就是說,即使你在虛擬機器當中刪除了檔案,但VDI的實際大小並不會因此減少。因此VDI只會越用越多,並不會縮小。

在此有兩種方法可以使用:VirtualBox的VBoxManage提供了「modifyhd」來清除被設為0的區塊以壓縮VDI的實際大小;或用檔案壓縮工具7-zip來減少檔案大小。以下一一介紹作法。

VBoxManage的modifyhd

自由流浪的心靈世界中介紹縮小VirtualBox VDI檔案的作法十分詳細,我參考其他資料之後整理的大致上步驟如下

  1. 先刪除虛擬機器裡面不需要的檔案。
  2. 安裝「zerofree」這個工具,RPM Search裡面可以找到給Red Hat/CentOS的版本。RPM安裝方法可以參考鳥哥,指令是「rpm –ivh [*.rpm]」。
    安裝完畢之後,可以用「/usr/sbin/zerofree」來使用他
  3. 重新啟動虛擬機器,進入CentOS的單機模式(single user mode)。具體作法是開機時按esc進入選單,按e編輯選單內容,再選擇有「kernal」那一項按e編輯開機參數。進入指令列之後再原有指令最後加上「singel」,然後按b開機即可。
  4. 執行init 1 (還沒去查這到底是什麼功能)
  5. 將硬碟以ro模式掛載:mount -n -o remount,ro -t ext3 /dev/VolGroup00/LogVol00 /
  6. 執行zerofree:/usr/sbin/zerofree /dev/VolGroup00/LogVol00。他需要花上好長一段時間來作這個動作,請慢慢等待。
  7. 完成zerofree之後關閉虛擬機器。
  8. 在HostOS底下執行壓縮指令:VBoxManage modifyhd 你的VDI位置.vdi compact。當然,VBoxManage的執行位置你也要修改成你安裝VirtualBox的位置才行。
    整個壓縮過程大概耗費2小時完成。

完成之後,原本在虛擬機器中刪除檔案所減少的空間,也讓VDI實際大小減少了。

7-zip壓縮

image 使用modifyhd之後讓VDI的實體大小從23GB減到22GB,但這大小對我來說仍然是過大的負荷。當我架設完虛擬機器而不需要執行時,可以考慮採用7-zip之類的壓縮軟體來壓縮檔案。我選擇使用7-zip Portable,一來這是開放原始碼的自由軟體;二來7-zip可以壓縮超過2GB大小的檔案,而且壓縮比例又很高,儘管比較需要花時間;最後Portable則是不需要安裝即可執行的版本,下載下來馬上就可以使用。

利用7-zip壓縮了22GB的VDI檔案之後,我取得了2GB的壓縮檔,成果讓我非常滿意。


一邊找尋資料、一邊實際操作,然後又來不斷修改這篇Blog。這一篇是我大概一天多的成果,又是一篇用時間跟精力換來的筆記記錄,還好最後有達到我想要的成效,真是可喜可賀。

(more...)

Timemark to SSA使用教學

布丁布丁吃布丁

Timemark to SSA使用教學

image

輔大動畫OPED放映會即將邁入十代目現在,我想也把Timemark to SSA(簡稱TTS)重新介紹一下好了。

本篇首頁的影片中您可以看到類似卡啦OK的字幕,這是利用影片與字幕檔案結合重新壓置(render)之後產生的結果。大部分的影片都沒有字幕,為了方便觀看,所以我才會想要製作字幕檔案。TTS即是將我們常見的lrc詞曲同步檔案 (範例檔案千千靜聽之類的音樂播放器最常用來顯示同步歌詞的檔案類型)轉換成SSA字幕檔(範例檔案)的程式。以上兩種都是單純的文字檔案,可以用記事本等文字編輯工具直接開啟。

TTS是一個網頁檔,可以從開啟影片標註時間標籤(我稱之為Timemark)、調整字幕顯示格式、時間並且輸出,一氣呵成地製作出SSA字幕檔。本篇就是要教大家怎麼使用TTS來製作SSA字幕檔!

  • Timemark to SSA 下載:miroko空間SkyDrive空間
    ※ 請下載到您的電腦,並用瀏覽器開啟電腦中的TTS網頁運作。

請注意,請以Internet Explorer 6開啟或IE Tester中模擬IE6來開啟TTS才能正常運作。


操作畫面說明

image

image 所有功能都包含在一個網頁檔裡面,當全部功能都打開時,網頁就會變得很長。整個TTS包括五大功能,以下大略地講解各功能的概要,各功能的操作細節,可以看一下標題旁邊的「提示說明」(如右圖)。

1. 來源歌詞編輯器

image

左半邊是影片播放器,下面有個「瀏覽」的表單,請選擇你本機端的影片載入,因為是使用Windows Media Player的關係,只要確定Windows Media Player可以播放的檔案,此處都可以播放。

右邊的編輯框分成「歌詞編輯模式」跟「時間標籤編輯模式」。請先在歌詞編輯模式中將您的歌詞檔案都準備好,再切換到時間標籤編輯模式當中,一邊利用左邊的播放器播放影片,一邊利用快速鍵(如空白鍵、enter鍵等等,網頁上有提示)來加入時間標籤。

在此說明一下時間標籤,表示影片播到此處的時間記錄點。格式是[00:38:50]或[00:38.50],第一個「00」表示分鐘,第二個「38」表示秒,第三個「50」則是百分之一秒。對TTS來說,時間標籤只有在一行的開頭或結尾才有意義。

當然,除了TTS之外,千千靜聽本身也有時間標籤編輯器的功能,網路上也很多lrc的下載網站,所以倒也不用每次都自己製作lrc格式的歌詞檔啦。

但是TTS的特色在於,你可以在歌詞檔上加入漢字的拼音,轉換成字幕檔的時候,就可以看到漢字歌詞上頭有著拼音的註解囉。詳細作法稍後再來介紹,我們繼續看看其他的功能吧。

2. 參數與格式設定

image

這個功能又分成上方的「時間軸設定參數」跟下方的「字幕顯示格式」兩種,只有取消勾選「使用預設的…」選項的時候才會顯示他的詳細設定。

時間軸設定參數的說明在TTS上已經很詳細了。字幕顯示格式主要是設定顏色、字型、大小等參數,其他的參數則不建議更動。此處的字幕顯示格式跟SSA的格式設定有很大的關聯,TTS只有使用到一部分SSA功能的關係,所以大部分設定都是無效的。有興趣的話可以來研究一下SSA的教學喔。

3. 轉換設定

image

此處選擇輸出字幕檔的模式跟一些功能。

上方有四種模式,動畫OPED放映會主要使用的是「兩行左右格式」,也是一般卡啦OK常用的格式。下方則有幾個小功能,其中「拼音補完功能」會使用一些預設好的漢字與拼音對照表來幫漢字加上拼音,但那畢竟只是作好玩的,還是請自行幫歌詞注音吧。

4. 歌詞編輯器

image

TTS讀取來源歌詞檔跟參數設定之後,會將分析的結果在此呈現。此區可以調整每一句歌詞的細節,包括拼音。雖然說這是TTS編輯器的精華,但其實我不太希望會有人用到這個功能。如果在來源歌詞檔跟參數設定的部份就已經設定好的話,就不需要在此處手動調整了。

5. 輸出結果

image

全部輸出完成的SSA檔案會出現在此處。請依照提示說明的方式將內文儲存成SSA檔案就可以正常播放了!


製作SSA歌詞字幕檔

以下我們就用「化物語 第10話OP(HD)」來介紹如何幫他製作歌詞檔案。

1. 取得歌詞

以下是轉載自YouTube的本曲歌詞

(せーの)

でもそんなんじゃダメ もうそんなんじゃホラ

心は進化するよ もっともっと

言葉にすれば消えちゃう関係なら

言葉を消せばいいなって

思ってた?恐れてた?

だけどあれ? なんか違うかも?

千里の道も一歩から

石のように硬いそんな意志で

塵も積もれば山と(大和)撫子?

私意抜きでいや死ぬ気で

ふわふわり ふわふわる

あなたが名前を呼ぶ それだけでじゅうえうかぶ

ふわふわる ふわふわり

あなたが笑っている それだけで笑顔になる

神様ありがとう 運命のイタズラでも

巡り合えたことが 幸せなの

でもそんなんじゃダメ もうそんなんじゃホラ

心は進化するよ もっともっと

そうそんなんじゃヤダ ねえそんなんじゃまだ

私のこと見ててねずっとずっと

2. 修飾歌詞,並加上拼音

修飾歌詞要把握幾點原則:

  1. 一句話太長時,應該斷行,以免作成字幕檔時超出畫面。
  2. 拼音的括號只接受半形括號,例如「(」或「)」。全形括號會被當作歌詞的一部分,像是「(」、「)」。
  3. 歌曲部份有間奏的時候,請多插入一個空行,否則不要輕易增加空行。
  4. 日文漢字拼音請多多利用日文辭典goo辞書ひらひらのひらがなめだね

調整完畢之後的歌詞如下:

(せーの)

でもそんなんじゃダメ

もうそんなんじゃホラ

心(こころ)は進化(しんか)するよ

もっともっと

 

言葉(ことば)にすれば消(き)えちゃう関係(かんけい)なら

言葉(ことば)を消(き)せばいいなって

思(おも)ってた?恐(おそ)れてた?

だけどあれ? なんか違(ちが)うかも?

千里(せんり)の道(みち)も一歩(いっほ)から

石(いし)のように硬(かた)いそんな意志(いし)で

塵(ちり)も積(つ)もれば山(やま)と撫子(なでしこ)?

私意(しい)抜(ぬ)きでいや死(し)ぬ気(き)で

ふわふわり ふわふわる

あなたが名前(なまえ)を呼(よ)ぶ

それだけでじゅうえうかぶ

ふわふわる ふわふわり

あなたが笑(わら)っている

それだけで笑顔(えがお)になる

 

神様(かみさま)ありがとう

運命(うんめい)のイタズラでも

巡(めぐ)り合(あ)えたことが

幸(しあわ)せなの

でもそんなんじゃダメ

もうそんなんじゃホラ

心(こころ)は進化(しんか)するよ

もっともっと

そうそんなんじゃヤダ

ねえそんなんじゃまだ

私(わたし)のこと見(み)ててね

ずっとずっと

3. 貼到TTS的歌詞編輯模式吧

如下圖。

image

4. 載入可以播放的影片

image

為了標註時間標籤,我們需要利用左邊的影片播放器播放此影片。

建議安裝K-lite之類的codec編碼包,讓你的Windows Media Player就可以播放多種影片格式。此外有許多小技巧可以從YouTube下載影片,並轉換成Windows Media Player可以播放的avi檔案,網路上很多,在此我就先略過這些細節吧。

5. 切換到時間標籤編輯模式

image

按一下右上角的「時間標籤編輯模式」就可以切換過去了。框框也會跟著變成藍色喔。

6. 一邊播放影片,一邊利用快速鍵加入時間標籤

在標註時間標籤之前,必須先牢記快速鍵!

  • 使用上下鍵來選擇要編輯的歌詞行
  • ctrl-m: 切換歌詞編輯模式與時間標籤編輯模式
    (以下功能,可以按著shift鍵讓他暫時失效)
  • space(空白鍵): 在該行開頭加入時間標籤
  • enter: 在該行結尾加入時間標籤
  • delete: 刪除該行開頭的時間標籤
  • backspace(←): 刪除該行結尾的時間標籤

添加時間標籤時,也有幾個原則:

  1. 通常只要加入行首的時間標籤就可以了。請善用space空白鍵來加入時間標籤吧。
  2. 如果該行沒有歌詞只有時間標籤,那會判斷成前一行歌詞的結束時間。
  3. 歌詞最後一定要加入結尾的時間標籤!不然TTS不知道最後一句歌詞會放到什麼時候。
  4. 注意斷行!每個斷行都會影響TTS最後產出的歌詞時間。當你覺得這一句歌詞跟下一句歌詞中間有間隔時,請不要客氣地將他們中間增加一個斷行吧。否則的話請千萬不要加入沒有意義的斷行喔!

加註完時間標籤之後,請切回歌詞編輯模式作微調。

最後結果如下:

[00:00:00](せーの)

[00:00:89]でもそんなんじゃダメ

[00:02:77]もうそんなんじゃホラ

[00:04:69]心(こころ)は進化(しんか)するよ

[00:07:16]もっともっと

[00:08:70]

[00:24:73]言葉(ことば)にすれば消(き)えちゃう関係(かんけい)なら

[00:27:03]言葉(ことば)を消(き)せばいいなって

[00:28:96]思(おも)ってた?恐(おそ)れてた?

[00:30:60]だけどあれ? なんか違(ちが)うかも?

[00:32:69]千里(せんり)の道(みち)も一歩(いっほ)から

[00:34:55]石(いし)のように硬(かた)いそんな意志(いし)で

[00:36:87]塵(ちり)も積(つ)もれば山(やま)と撫子(なでしこ)?

[00:38:98]私意(しい)抜(ぬ)きでいや死(し)ぬ気(き)で

 

[00:40:85]ふわふわり ふわふわる

[00:43:80]あなたが名前(なまえ)を呼(よ)ぶ

[00:46:13]それだけでじゅうえうかぶ

[00:48:74]ふわふわる ふわふわり

[00:51:75]あなたが笑(わら)っている

[00:54:02]それだけで笑顔(えがお)になる

[00:56:75]神様(かみさま)ありがとう

[01:00:54]運命(うんめい)のイタズラでも

[01:04:68]巡(めぐ)り合(あ)えたことが

[01:08:55]幸(しあわ)せなの

 

[01:12:53]でもそんなんじゃダメ

[01:14:68]もうそんなんじゃホラ

[01:16:68]心(こころ)は進化(しんか)するよ

[01:19:13]もっともっと

[01:20:74]そうそんなんじゃヤダ

[01:22:68]ねえそんなんじゃまだ

[01:24:73]私(わたし)のこと見(み)ててね

[01:26:99]ずっとずっと[01:28:58]

7. 調整格式

預設的字幕顯示格式是黑框白底。為了因應這個可愛的歌曲,我們來把他換成粉紅底吧!

image

首先先取消「使用預設的字幕顯示格式」的選取勾,下面的進階選項就會顯示出來。再找到「主要顏色」的選項,你可以在右邊的框輸入六位數的RGB碼,或是使用下方的選取器來選擇顏色。

image

顏色我稍微挑了靠近紫色的深色,當最後影片用投影機放映的時候會再淡一點。右邊的預覽文字可以作為參考。實際上還是要等製作出SSA檔案之後在確認吧。

8. 執行輸出

image

請直接到網頁最下方找尋「結果輸出」按鈕,點下去吧。

 image

當程式分析完畢之後會顯示「done」的提示音。下面的表單則是寫著輸出的SSA檔案內容囉。

9. 儲存成SSA檔案

image

請複製字幕檔案原始碼,貼到記事本當中並且儲存。注意儲存時,存檔類型必須是「所有檔案」,而編碼必須選擇「Unicode」。檔名需要跟影片相同,而副檔名則是「ssa」,例如我影片檔名叫作「化物語 第10話OP(HD).mp4」的話,存檔的檔名就應該是「化物語 第10話OP(HD).ssa」。

你可以下載結果輸出的SSA檔案來看看最後會輸出成什麼樣子。

10. 測試播放

image

image 你可以開啟你的Windows Media Player來播放看看。如果有正確安裝DirectVobSub的話,播放影片時應該就能自動載入SSA字幕。同時Windows工具列右下角還會有綠色箭頭,表示DirectVobSub運作中(如右圖)。

要注意的是,DirectVobSub即時把影片跟字幕混合的作法非常消耗電腦資源,特別是CPU的速度。要是你覺得影片跟聲音對不上了,除了升級電腦配備之外,你可以考慮把影片先壓縮成低品質低解析度的測試用影片,或是直接作一次跟字幕檔結合的壓製影片來檢查成果。此外,這種即時把影片檔跟字幕檔混和處理的影片是沒辦法用Print Screen擷取畫面的,因此實際上我是使用TMPGEnc Plus開啟此影片再截圖的。


結語

TTS是非常複雜的。

除了上述教學的兩行左右格式之外,還有單行模式跟註解格式。當慢歌時我們會使用單行模式;而有口白之類的歌詞,則會使用註解模式,再跟主要歌詞貼在同一個檔案裡面。以前我在社團有寫過詳細的教學,等我找到之後再放出來看看吧。

因為有了TTS,讓製作歌詞字幕變得簡單。但是除了字幕檔之外,還有製作MAD影片、影片跟字幕檔壓製結合、製作DVD影音光碟等程序,才能做出動畫OPED放映會能夠播放的影片。雖然很辛苦,但也是非常有趣的。有興趣的學弟妹請務必參加輔大動漫電玩研習社的製作教學活動吧!

那就先這樣囉。

(more...)

以IE Tester使用Timemark to SSA程式

布丁布丁吃布丁

以IE Tester使用Timemark to SSA程式

image

我在輔大動漫社時為了動畫OPED放映會所製作了卡啦OK歌詞式SSA字幕檔案產生機Timeamark to SSA (簡稱TTS)。TTS能夠以網頁中內嵌的Windows Media Player來播放影片檔案,一邊為影片檔案加上時間標籤(那時候我稱之為「Timemark」)。以具有時間標籤的歌詞為基礎,TTS可以從中產生出類似卡啦OK歌詞字幕的字幕檔案。除此之外,還可為歌詞加上拼音註解、調整歌詞的顯示格式、以及歌詞顯示與淡入淡出的時間。

  • Timemark to SSA 下載:miroko空間SkyDrive空間
    ※ 請下載到您的電腦,並用瀏覽器開啟電腦中的TTS網頁運作。

然而當時我程式的能力不足,TTS不能在IE6以外的瀏覽器正常運作。而且現在微軟已經逐漸想要把IE6逐出市場,所以以後可能都得依賴像IE Tester之類的Internet Explorer模擬器,才能用IE6的狀態執行TTS。

TTS計算時間標籤的方式實在是太過複雜了,難以去改版。當時的我投入這麼多心力撰寫的這支TTS,到現在我還是覺得很厲害。

(more...)

測試一下Pixelpipe!

布丁布丁吃布丁

1 Comments

測試一下Pixelpipe!

(more...)

今天也是好天氣

布丁布丁吃布丁

0 Comments

今天也是好天氣

颱風呢?外環氣流呢?
手機e-mail發Blog測試中!
(more...)

潛入施工中總圖!

布丁布丁吃布丁

1 Comments

潛入施工中總圖!


由於政大總圖二樓以上整修中,9/13之前都得採預約申請方式借書。日前我申請了四本書跟光碟,圖書館跟我說光碟不用申請即可借用,到了總圖又碰上l學姐,她說我界這麼多本,不如自身安全切結書簽一簽自己上去找書吧。上樓之後看到的就如照片所示,到處都是修整樣貌。書櫃用塑膠套蓋了起來,我得悶在塑膠套裡一本一本找書。雖然才四本、都在同一個書櫃內,但也熱的我滿頭大汗的了。借書時l學姐笑著對我說「我平常就是這樣辛苦。」還真的很累人呢!還是希望總圖修整趕快結束吧。
(more...)

CentOS安裝odf-converter,轉換Office 2007文件為OpenOffice格式

布丁布丁吃布丁

CentOS安裝odf-converter,轉換Office 2007文件為OpenOffice格式

為了讓DSpacemedia filter功能能夠接受Microsoft Office 2007的DOCX、XLSX與PPTX,我們需要借助odf-converter把Office 2007的格式轉換成OpenOffice相對應的ODT、ODS、ODP格式,才能作接下來的處理。

image

上圖右邊是原始的Microsoft Office 2007的PPTX格式投影片,左邊則是利用odf-converter轉換成OpenOffce的ODP格式投影片,儘管在字型、版面上有點差異,但還是可以接受的程度。


安裝

安裝的步驟很簡單,只要下載以下檔案並以rpm安裝即可

你可以用以下指令下載並安裝:

[root@dspace ~] wget http://katana.oooninja.com/f/software/odf-converter-integrator-0.2.3-1.i386.rpm
[root@dspace ~] rpm -ivh odf-converter-integrator-0.2.3-1.i386.rpm

使用

使用範例如下:(/f表示強制覆蓋,/i後面接輸入檔名,詳細用法請直接執行OdfConverter)

[root@dspace ~] OdfConverter /f /i input.docx

這樣預設會輸出一個檔名為「input.odt」的OpenOffice檔案,這樣就轉換完成囉。


這次不偷懶,用Zotero好好地作參考資料的書目。使用此篇時也別忘了感謝以下參考資料來源喔!

參考資料:

Convert OpenXML (.docx, etc.) in Linux using command line - OpenOffice.org Ninja. (n.d.). . Retrieved August 9, 2009, from http://www.oooninja.com/2008/01/convert-openxml-docx-etc-in-linux-using.html.

odf-converter-integrator:download [OpenOffice.org Ninja]. (n.d.). . Retrieved August 9, 2009, from http://katana.oooninja.com/w/odf-converter-integrator/download.

小傑的部落格 - Jay's Blog: OpenDocument Format 與 Office Open XML 互轉. (n.d.). . Retrieved August 9, 2009, from http://jay-notebook.blogspot.com/2009/01/opendocument-format-office-open-xml.html.

(more...)

用Xvfb讓OpenOffice開機時自動啟動

布丁布丁吃布丁

用Xvfb讓OpenOffice開機時自動啟動

使用DSpacemedia filter功能時,需要把各種文件檔轉換成PDF文件,這個功能可以藉由OpenOffice來完成。但是OpenOffice必須在圖形介面(也就是Xwindow)中才能開啟,在無法自動啟動的情況下,實在是不太方便。在網路上搜尋各種方法之後,終於找到方法了。

大致上作法如下:利用Xvfb來製作出虛擬的圖形顯示畫面,然後讓OpenOffice在這虛擬的介面開啟,就可以正常啟動OpenOffice並提供轉檔功能了。


我的作業系統是CentOS 5 Final,以下開始介紹安裝方法。

一、安裝Xvfb

可以利用yum來安裝Xvfb:(注意大小寫要正確喔)

[root@ ~] yum install Xvfb 

二、安裝OpenOffice

在安裝CentOS的時候我已經把OpenOffice安裝。如果你沒有安裝,那麼也可以利用yum來安裝OpenOffice:

[root@ ~] yum install openoffice.org-*

注意找尋一下你OpenOffice的安裝路徑,我們需要呼叫他的執行程式「soffice.bin」。你可以利用locate指令來搜尋soffice.bin看是放在哪裡路徑底下:

[root@ ~] locate /soffice.bin

CentOS預設安裝是擺在「/usr/lib/openoffice.org/program/soffice.bin」當中,記住這個路徑,在底下設定時會使用到喔!

三、設定啟動時開啟OpenOffice文件轉換服務

請建立「/etc/init.d/openoffice」,並設定執行權限為755。/etc/init.d/openoffice的檔案內容如下:

#!/bin/bash

case "$1" in
start)
     DISPLAY=:5.0
     export DISPLAY
     Xvfb :5 -screen scrn 1024x768x24 &
     /opt/openoffice.org3/program/soffice.bin "-accept=socket,host=127.0.0.1,port=8100;urp;StarOffice.ServiceManager -nofirststartwizard -nologo -headless -display:5" &
       ;;
stop)
       pkill soffice &
       pkill Xvfb &
       exit 1 &
       ;;
*)
       echo "Usage: $0 { start | stop }"
       exit 1
       ;;
esac
exit 0

注意到上面的「/usr/lib/openoffice.org/program/soffice.bin」的路徑,請改成你系統安裝OpenOffice的路徑喔!


結果還是花了一整個下午在弄這個。不管怎麼說能用好就好啦……

 

參考資料:

(more...)

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...)

HTML中object標籤在Firefox會出現底下margin-bottom: 2px現象的解決方法

布丁布丁吃布丁

HTML中object標籤在Firefox會出現底下margin-bottom: 2px現象的解決方法

image

上圖的圖片是一個<object>標籤,外面包著一層<div>用以表示圖片與其他元素的位置,但是會發現到底下多出了大約2px的間隔,除了原本在<object>裡面設定的height之外,還被強迫下向擠了一些間隔。

這是Firefox才會出現的錯誤,修正方法是在<object>的style屬性當中加入font-size: 0 (字體大小為0)、line-height: 0 (行高為0) 即可,程式碼如下:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
	width="640"
	height="380"
	style="font-size: 0;line-height: 0;"
	codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=4,0,0,0">
		<param name="movie" value="http://140.119.61.174:8080/jspui/retrieve/1366">
		<param name="play" value="true">
		<param name="loop" value="true">
		<param name="quality" value="high">
		<param name="wmode" value="transparent">

		<embed src="http://140.119.61.174:8080/jspui/retrieve/1366" width="640" height="380" style="font-size: 0;line-height: 0;" 
			play="true" align="" loop="true" quality="high"
			type="application/x-shockwave-flash"
			wmode="transparent"
			pluginspage="http://www.macromedia.com/go/getflashplayer">
		</embed>
	</object>

修正結果之後的畫面如下,下面的間隔不見了。

image

(more...)

CentOS安裝Xpdf教學

布丁布丁吃布丁

CentOS安裝Xpdf教學

image

Xpdf是Linux中可以讀取PDF檔案的開放原始碼程式,我引用一下Wikipedia的詳細介紹:

Xpdf 是一個開放原始碼PDF檔案瀏覽器,此軟體運行於X Window以及Motif上。 Xpdf 也實際運行於所有類Unix作業系統上。Xpdf 可解碼LZW壓縮格式並閱讀加密的PDF文件。官方版本的Xpdf遵循PDF檔案的智慧財產權政策,因此可能禁止拷貝、列印或轉換的功能。當然有某些破解補丁可以忽略這些智慧財產管理限制。

Xpdf包含數項不需要X windows系統的程式,包含了解析PDF的圖檔以及將PDF轉檔成文字檔或PostScript的程式。

Xpdf也被其他PDF瀏覽程式用於前端,例如KPDF(一個運行在KDE桌面的程式)。而它的文字引擎則被許多PDF瀏覽程式運用,例如BeOS上的BePDF、RISCOS上的!PDF以及Palm OS上的PalmPDF。

Poppler以xpdf 3.0的繪圖函式庫為基礎創造出來,以便增加其再用性。許多程式(包括Xpdf自己)可使用poppler為它們的後端繪圖器。

來源:Xpdf - 維基百科,自由的百科全書,http://zh.wikipedia.org/wiki/Xpdf

Xpdf很重要的功能在於「從PDF轉成文字檔」,這可以取代DSpace原本使用PDFbox的缺點:PDFbox不支援Acrobat 9的PDF檔案。

在一篇網路上到處轉載的「JAVA抽取WORD和PDF格式文件的四种武器」當中也有介紹到Xpdf,但並沒有很詳盡的安裝方法。所以這一篇主要是來教大家怎麼在Linux,特別是在CentOS當中安裝Xpdf。


Xpdf可以利用rpm來安裝,而相依套件的部份我們則是用yum來安裝。

1. 安裝Xpdf的相依套件

請以root的身份輸入以下指令:

[root@dspace ~]# yum install -y openmotif libpaper poppler-utils xdg-utils

2. 下載Xpdf的rpm檔案並安裝

Xpdf沒有提供rpm,但我們可以在RPM pbone.net找到Xpdf的rpm安裝檔。網頁位置在這裡,其中一個載點請點此下載,另外我準備了SkyDrive備份。

確定你存放的位置之後,請以root的身份輸入以下指令:.

[root@dspace ~]# rpm -ivh xpdf-3.02-5.el5.1.i386.rpm

如果沒有錯誤訊息,表示安裝成功。

3. 安裝語系檔

請先下載以下語系檔,或是下載我在SkyDrive的語系檔備份

如果你下載我備份的壓縮檔,請依照以下指令來解壓縮並安裝。

[root@dspace ~]# unzip xpdf-language-i386.zip -d lang
[root@dspace ~]# rpm –ivh lang/xpdf-*.rpm --force

4. 使用Xpdf的pdftotext來抽取PDF的文字檔

讓我們試著將一個PDF檔案中的文字抽取成txt文字檔吧。

  1. 請下載PDF檔案:「Chen, A Study on Knowledge Extraction from User Reading Annotation of Digital Library.pdf」(其實這是我的論文計畫書初稿XD)。
  2. 放到伺服器中的位置,你知道的地方即可。
  3. 執行pdftotext指令與檔名,如下:
  4. [root@dspace ~]# pdftotext Chen\,\ A\ Study\ on\ Knowledge\ Extraction\ from\ User\ Reading\ Annotation\ of\ Digital\ Library.pdf
  5. 此時應該會有同樣檔名,但是副檔名為.txt的檔案產生。結果應該跟這個檔案一樣,下圖中,左邊是PDF原稿,右邊則是抽取出來的文字檔!image

這樣就安裝完成囉。此外,上面安裝過語系檔的檔案也全都可以如法炮製地抽取出文字檔,Xpdf非常地強大!


本篇教學是為了擴增DSpace的Media-filter而鋪路,我現在正要把Xpdf跟DSpace整合,讓DSpace全文搜尋功能更為完整。

(more...)