這裡要來說一些我的使用心得,雖然有些套件可以成功的將pdf轉存成image,
但,遇上中文,似乎就束手無策了,上網google了好久,目前是一個無解的狀況,
或許,有哪位路人看到這篇,有解決的方法!非常感激。
方法一:尋找iText 是否有相關方法
目的: iText是否可以直接輸出 image
結果: 無相關函式
原因: iText很單純的只能將資料輸出成 PDF 和rtf (一種文字格式)的檔案,
也可將 xml和html 輸出成 PDF檔案。iText 方法未果。
==============================
方法二:尋找PDF相關套件
目的: 將pdf內容轉存成image
==============================
套件1. PDFRenderer.jar
==============================
結果: 可以將PDF轉成image,但會有中文失真問題
原因: 使用PDFRederner 有些PDF中文不會失真,有些PDF會失真,
不會失真的PDF是用latext產生的,字型都是自訂的。後來發現,
使用PDFRenderer可以把字抓到,但是在畫成image時,會失真。
嘗試解決方法:在產生iText時,把字體一併嵌入,可以解決此狀況?
結果:失敗。
==============================
套件2. PDFBox(version: PDFBox v0.7.3.jar)
==============================
結果: 程式執行不成功,會出現「type not implemented yet 」的錯誤訊息。
原因: 在執行時會出現「type not implemented yet 」的錯誤訊息,
原因出在 「convertToImage」這一行code,一開始看以為 讀取中文檔有問題,
嘗試的解決問題,並上網google,結果竟然是因為 PDFBox的convertToImage是在beta階段,
在jar檔底下是有convertToImage 這段code,但是在BufferedImage裏面 有一種type 還沒實作,
這個type在0.73版裡沒有被實作出來(目前則未有0.74版出來),所以,此問題目前無解。
==============================
套件3. XPDF.jar
==============================
結果: 不適用
原因: XPDF的功能為「從PDF把文字抓取出來另存文字檔」及
「從PDF把圖片抓取出來另存成圖檔」,無法把整頁的PDF轉為image。
以上。
2009年9月28日 星期一
2009年8月24日 星期一
2009年8月21日 星期五
2009年8月20日 星期四
2009年8月13日 星期四
用Java 將pdf轉成 image (part I)
此篇將講述 如何用java把 pdf轉成image。
一般而言,大家會最直覺的使用 Adobe Acrobat 開啟pdf,然後另存新檔,把檔案另存成 image。
原本以為,iText套件可以將 文字、圖檔…等資料轉成 pdf檔,也可以再把pdf轉成圖檔,google之後,找不到相關範例。
在此篇,會介紹一個好用的套件 PDFRenderer 來教導如何將 PDF 轉為圖檔。
=> 點我下載套件:PDF Renderer(官網): a 100% Java PDF renderer and viewer
點我前往觀看 PDFRenderer api
範例程式引述(點我前往完整觀看程式):
範例1:How do I show a PDF in my Swing Application
範例2:How do I draw a PDF into an Image?
---
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.*;
/**
* An example of drawing a PDF to an image.
*
* @author joshua.marinacci@sun.com
*/
public class ImageMain {
public static void setup() throws IOException {
//load a pdf from a byte buffer
File file = new File("test.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
PDFFile pdffile = new PDFFile(buf);
// draw the first page to an image
PDFPage page = pdffile.getPage(0);
//get the width and height for the doc at the default zoom
Rectangle rect = new Rectangle(0,0,
(int)page.getBBox().getWidth(),
(int)page.getBBox().getHeight());
//generate the image
Image img = page.getImage(
rect.width, rect.height, //width & height
rect, // clip rect
null, // null for the ImageObserver
true, // fill background with white
true // block until drawing is done
);
//show the image in a frame
JFrame frame = new JFrame("PDF Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel(new ImageIcon(img)));
frame.pack();
frame.setVisible(true);
}
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
ImageMain.setup();
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
}
---
主題3:How do I draw a PDF directly to my own Graphics2D object?
網站上的範例寫得很詳細,還不錯理解唷 ^ ^~
以上。
一般而言,大家會最直覺的使用 Adobe Acrobat 開啟pdf,然後另存新檔,把檔案另存成 image。
原本以為,iText套件可以將 文字、圖檔…等資料轉成 pdf檔,也可以再把pdf轉成圖檔,google之後,找不到相關範例。
在此篇,會介紹一個好用的套件 PDFRenderer 來教導如何將 PDF 轉為圖檔。
=> 點我下載套件:PDF Renderer(官網): a 100% Java PDF renderer and viewer
點我前往觀看 PDFRenderer api
範例程式引述(點我前往完整觀看程式):
範例1:How do I show a PDF in my Swing Application
範例2:How do I draw a PDF into an Image?
---
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.*;
/**
* An example of drawing a PDF to an image.
*
* @author joshua.marinacci@sun.com
*/
public class ImageMain {
public static void setup() throws IOException {
//load a pdf from a byte buffer
File file = new File("test.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
PDFFile pdffile = new PDFFile(buf);
// draw the first page to an image
PDFPage page = pdffile.getPage(0);
//get the width and height for the doc at the default zoom
Rectangle rect = new Rectangle(0,0,
(int)page.getBBox().getWidth(),
(int)page.getBBox().getHeight());
//generate the image
Image img = page.getImage(
rect.width, rect.height, //width & height
rect, // clip rect
null, // null for the ImageObserver
true, // fill background with white
true // block until drawing is done
);
//show the image in a frame
JFrame frame = new JFrame("PDF Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel(new ImageIcon(img)));
frame.pack();
frame.setVisible(true);
}
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
ImageMain.setup();
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
}
---
主題3:How do I draw a PDF directly to my own Graphics2D object?
網站上的範例寫得很詳細,還不錯理解唷 ^ ^~
以上。
2009年7月31日 星期五
[文章欣賞] 如果讓我重做一次研究生
文章網址:點我前往觀看整篇文章
---
文章簡述:
如果讓我重做一次研究生
王汎森 院士
中央研究院歷史語言研究所
這個題目我非常喜歡,因為這個題目,對大家多少都有實際的幫助。如果下次我必須再登台演講,我覺得這個題目還可以再發揮一兩次。我是台大歷史研究所畢業的,所以我的碩士是在台大歷史研究所,我的博士是在美國普林斯頓大學取得的。我想在座的各位有碩士、有博士,因此我以這兩個階段為主,把我的經驗呈現給各位。
我從來不認為我是位有成就的學者,我也必須跟各位坦白,我為了要來做這場演講,在所裡碰到剛從美國讀完博士回來的同事,因為他們剛離開博士生的階段,比較有一些自己較獨特的想法,我就問他:「如果你講這個問題,準備要貢獻什麼?」結合了他們的意見,共同醞釀了今天的演講內容,因此這裡面不全是我一個人的觀點。雖然我的碩士論文和博士論文都出版了,但不表示我就是一個成功的研究生,因為我也總還有其他方面仍是懵懵懂懂。我的碩士論文是二十年前時報出版公司出版的,我的博士論文是英國劍橋大學出版的。你說有特別好嗎?我不敢亂說。我今天只是綜合一些經驗,提供大家參考。
---
文章簡述:
如果讓我重做一次研究生
王汎森 院士
中央研究院歷史語言研究所
這個題目我非常喜歡,因為這個題目,對大家多少都有實際的幫助。如果下次我必須再登台演講,我覺得這個題目還可以再發揮一兩次。我是台大歷史研究所畢業的,所以我的碩士是在台大歷史研究所,我的博士是在美國普林斯頓大學取得的。我想在座的各位有碩士、有博士,因此我以這兩個階段為主,把我的經驗呈現給各位。
我從來不認為我是位有成就的學者,我也必須跟各位坦白,我為了要來做這場演講,在所裡碰到剛從美國讀完博士回來的同事,因為他們剛離開博士生的階段,比較有一些自己較獨特的想法,我就問他:「如果你講這個問題,準備要貢獻什麼?」結合了他們的意見,共同醞釀了今天的演講內容,因此這裡面不全是我一個人的觀點。雖然我的碩士論文和博士論文都出版了,但不表示我就是一個成功的研究生,因為我也總還有其他方面仍是懵懵懂懂。我的碩士論文是二十年前時報出版公司出版的,我的博士論文是英國劍橋大學出版的。你說有特別好嗎?我不敢亂說。我今天只是綜合一些經驗,提供大家參考。
[文章欣賞] 140的威力
文章網址:點我前往觀看整篇文章
---
文章簡述:
一句話、一百四十個字、或三十秒的力量有多大?
在金融海嘯後,這是目前看起來最具希望、最熱門的商業趨勢。這股趨勢,則由正夯的社群網站、微網誌所造成,如Facebook、Twitter等。
從美國總統歐巴馬(Barack Obama) 、奇異(GE)前執行長傑克‧威爾許(Jack Welch),到戴爾電腦、星巴克咖啡,都搶搭這個趨勢。
《時代》雜誌(Time)描述:「它將如搜尋引擎Google,影響我們未來十年的生活。」
---
文章簡述:
一句話、一百四十個字、或三十秒的力量有多大?
在金融海嘯後,這是目前看起來最具希望、最熱門的商業趨勢。這股趨勢,則由正夯的社群網站、微網誌所造成,如Facebook、Twitter等。
從美國總統歐巴馬(Barack Obama) 、奇異(GE)前執行長傑克‧威爾許(Jack Welch),到戴爾電腦、星巴克咖啡,都搶搭這個趨勢。
《時代》雜誌(Time)描述:「它將如搜尋引擎Google,影響我們未來十年的生活。」
轉碼用軟體 - convertz
下載網址:點我前往下載
---
軟體:convertz v8.02
描述:中文簡繁內碼轉換器
一個簡單易用而且功能強大的中文內碼轉換工具,支持GBK、Big5、HZ、Shift-JIS、JIS、EUC-JP、Unicode Little Endian、Unicode Big Endian、及 UTF-8 編碼,讓您輕鬆的對純文字檔案、檔案/資料夾名稱、剪貼簿文字、及 MP3 ID3 標籤在上述編碼之間進行轉換。
功能:
* 提供繁/簡體中文及英文介面,適用於繁/簡體或其它版本的視窗。
* 支援 Big5/GBK/HZ/Unicode/UTF-8檔案在上述各種內碼間自由轉換。
* 可預覽轉換前/後的文章內容和結果。
* 支援剪貼簿內碼轉換,可於程式主視窗、工具列圖示的右按選單、或用熱鍵行使此功能。
* 部份簡體字可同時對應數個繁體字(例如:〔干、幹、乾〕〔劃、劃〕〔裡、裡〕〔發、髮〕〔郁、鬱〕〔松、鬆〕〔余、餘〕等字),程式能於轉碼的同時自動修正這些別字。使用者可自行編輯程式內建的『詞彙校正列表』去提高辨識率。
* 自動更新 HTML 檔案 標籤內的 charset 數值。
* 文字轉換轉送:可在文字輸入方塊內鍵入中文字,然後將轉碼結果輸出到指定程式。
* Command line 支援。
* 支持 CF_HTML 轉換,在 Office, IE, Outlook 等文件做剪貼簿文字轉碼時可以保留文件式樣。
* 可以將統一碼數字記法 (xxxx;) 還原成目標編碼的文字。
* 支持Mp3/APE/OGG 檔案 ID3/APE/OGG 標籤的編碼轉碼。
---
軟體:convertz v8.02
描述:中文簡繁內碼轉換器
一個簡單易用而且功能強大的中文內碼轉換工具,支持GBK、Big5、HZ、Shift-JIS、JIS、EUC-JP、Unicode Little Endian、Unicode Big Endian、及 UTF-8 編碼,讓您輕鬆的對純文字檔案、檔案/資料夾名稱、剪貼簿文字、及 MP3 ID3 標籤在上述編碼之間進行轉換。
功能:
* 提供繁/簡體中文及英文介面,適用於繁/簡體或其它版本的視窗。
* 支援 Big5/GBK/HZ/Unicode/UTF-8檔案在上述各種內碼間自由轉換。
* 可預覽轉換前/後的文章內容和結果。
* 支援剪貼簿內碼轉換,可於程式主視窗、工具列圖示的右按選單、或用熱鍵行使此功能。
* 部份簡體字可同時對應數個繁體字(例如:〔干、幹、乾〕〔劃、劃〕〔裡、裡〕〔發、髮〕〔郁、鬱〕〔松、鬆〕〔余、餘〕等字),程式能於轉碼的同時自動修正這些別字。使用者可自行編輯程式內建的『詞彙校正列表』去提高辨識率。
* 自動更新 HTML 檔案 標籤內的 charset 數值。
* 文字轉換轉送:可在文字輸入方塊內鍵入中文字,然後將轉碼結果輸出到指定程式。
* Command line 支援。
* 支持 CF_HTML 轉換,在 Office, IE, Outlook 等文件做剪貼簿文字轉碼時可以保留文件式樣。
* 可以將統一碼數字記法 (xxxx;) 還原成目標編碼的文字。
* 支持Mp3/APE/OGG 檔案 ID3/APE/OGG 標籤的編碼轉碼。
JB9設定struts的選單
此篇並非在教從頭設定struts的教學
而是,開啟一個原本就有的 project時,左邊的選單內,struts的圖示不見了,該怎麼把它叫出來。
1. 點選「sample.jpx」右鍵 「Properties」
2. 選擇 「Paths」的「Required Libraries」中的「Struts(->自行訂義的lib選單)」
->「Edit」
3. 在lib: Struts,選擇 [Framework]
4. [Framework]中的[Framework]選項要選擇:Struts
5. 到WebApp圖示(一隻手上面一個地球)的右鍵「Properties」
->「WebApp」->「JSP/Servlet Frameworks」
-> 把「Struts 1.X」打勾 -> 「ok」
就可以成功在選單中看到struts了。
而是,開啟一個原本就有的 project時,左邊的選單內,struts的圖示不見了,該怎麼把它叫出來。
1. 點選「sample.jpx」右鍵 「Properties」
2. 選擇 「Paths」的「Required Libraries」中的「Struts(->自行訂義的lib選單)」
->「Edit」
3. 在lib: Struts,選擇 [Framework]
4. [Framework]中的[Framework]選項要選擇:Struts
5. 到WebApp圖示(一隻手上面一個地球)的右鍵「Properties」
->「WebApp」->「JSP/Servlet Frameworks」
-> 把「Struts 1.X」打勾 -> 「ok」
就可以成功在選單中看到struts了。
2009年7月17日 星期五
[html語法]使用 iframe,也可以有邊框
範例語法:
|
說明:
with: 寬度% height: 高度% overflow-x: 設定值為 hidden(不出現捲軸) or auto(出現捲軸) overflow-y: 設定值為 hidden(不出現捲軸) or auto(出現捲軸) |
2009年7月16日 星期四
2009年7月15日 星期三
Java - String.getBytes()的中文編碼問題
因為放到server上一直出現亂碼,但又不是db和網頁的問題,找了一下是程式中關於getByte()的問題。
當然,網路上也有許多解決方法。
Ref : http://www.webjx.com/exam/java-2263.html ([說明]網頁教學網 -String.getBytes()的中文編碼問題 )
以下,為簡單的測試,用java檔跑的。
---
String a= "我是誰123";
try{
System.out.println(new String(a.getBytes("Big5"), "ISO-8859-1"));
System.out.println(a.getBytes("Big5"));
System.out.println(new String(a.getBytes(), "Big5"));
System.out.println(new String(a.getBytes("Big5"), "Big5"));
System.out.println(a);
}catch (Exception ex){
ex.printStackTrace();
}
---
輸出的結果:
§??O??123
[B@1fb8ee3
我是誰123
我是誰123
我是誰123
---
為了讓中文不論在哪個語系的網頁中讓中文字顯示正常,似乎只要用 System.out.println(new String(a.getBytes(), "Big5")); 即可。(不過沒放在別的語系試過)...XD
以上。
2009年7月14日 星期二
JavaScript 教學與其他 - 酷必網
有些 JavaScript 很常用到的小功能
密碼保護網頁 -網址: http://www.study-area.org/coobila/tutorial_265.html
---
這個網頁的主站發表了很多關於程式、網頁的教學,有興趣可以點去觀看 酷必網。
內容如下:
學習網頁
以上。
密碼保護網頁 -網址: http://www.study-area.org/coobila/tutorial_265.html
---
這個網頁的主站發表了很多關於程式、網頁的教學,有興趣可以點去觀看 酷必網。
內容如下:
學習網頁
由淺入深, 包含html, css, javascript, vbscript, frontpage, dreamweaver, xml等教學
包含ASP/ASP.NET, PHP, SQL, Windows Script等教學
包含Photoshop, PhotoImpact, Flash與GIF Animator等教學.----
以上。
html語法教學網頁
有基本的html語法教學,覺得寫得很完整,來紀錄一下,免得之後又一直在 google。^____^
1. 網頁研習室 - 網址: http://www.webpage.idv.tw/study/
<將會錄續更新>
1. 網頁研習室 - 網址: http://www.webpage.idv.tw/study/
<將會錄續更新>
JSP - 取得網頁的絕對路徑
寫 jsp時,想取得絕對路徑時,可以用以下的方法,還不錯用 ^___^
String strAbsPath =null;
//取得檔案的絕對路徑
strAbsPath=application.getRealPath(request.getRequestURI());
out.println("
strAbsPath 1 : " + strAbsPath );
//取得檔案所在位置的資料絕對路徑
strAbsPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
out.println("
strAbsPath 2 : " + strAbsPath );
out.println("
");
//strAbsPath 1 : E:\installTool\Tomcat 5.5\webapps\ROOT\dataMining\index.jsp
//strAbsPath 2 : E:\installTool\Tomcat 5.5\webapps\ROOT\dataMining
String strAbsPath =null;
//取得檔案的絕對路徑
strAbsPath=application.getRealPath(request.getRequestURI());
out.println("
strAbsPath 1 : " + strAbsPath );
//取得檔案所在位置的資料絕對路徑
strAbsPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
out.println("
strAbsPath 2 : " + strAbsPath );
out.println("
");
//strAbsPath 1 : E:\installTool\Tomcat 5.5\webapps\ROOT\dataMining\index.jsp
//strAbsPath 2 : E:\installTool\Tomcat 5.5\webapps\ROOT\dataMining
訂閱:
文章 (Atom)