Feeds:
文章
迴響

Archive for 2009 年 10 月

[Python] 圖片合併成 PDF

最近清理電腦中的文件,發現一堆從電子書擷取下來的連續 jpg 圖檔,原本想用 Acrobat 合併,可是上次電腦重灌後我就沒灌,原本上網找了套 Image2PDF 來處理可惜要付費,不然只能轉單一檔案,真是 OOXX。算了,嘗試用 Python 來解決,有上次分割/合併 PDF 的經驗,我原以為透過 pyPDF 可以輕鬆達成,可惜 pyPDF 不支援新增一張圖片方式來建立 PDF。於是我迂迴的解決這個問題,也就是透過 PIL 這個模組將圖片先產生 PDF 然後在將 PDF 透過 pyPDF 合併 就可以達成我的需求 XD

完整程式碼可在 Google Code 找到

我簡單的描述這個腳本要怎麼運作,首先承襲之前 smpdf.py  的作法,也就是透過一個簡單的描述檔來說明輸出入的檔案,描述檔格式相當的簡單,第一行是輸出 PDF 檔案的完整路徑,藉著是一系列要合併的圖檔,每個檔案一行,且檔案要存成 UTF-8,千萬不要用 Windows 內建的記事本,因為他會存成 UTF-8+BOM 格式,

範例的描述檔可參考 cfg.txt

有了描述檔之後就可執行 python.exe im2pdf.py cfg.txt 就會出現如下的畫面

image

然後你就會得到一個建立完成的 PDF,夠簡單吧 XD

image

Read Full Post »

[Python]Facebook 相簿備份

研究 Facebook Connect 程式有一段時間,也大致上瞭解程式怎麼開發,在 Facebook 除了可開發 Web 類型的程式之外,其實也可以開發 Desktop 類型的應用程式,只是之前一直不知道有什麼程式可以寫,後來有看到一個 Facebook Desktop 用 .NET 寫的程式,他是一個前端訊息通知器,當你在 Facebook 接到任何通知時,該程式都會主動通知你,相當有趣的程式。不過我沒什麼興趣寫這個程式。

另外,還有一些軟體提供 Facebook 備份功能,這個對我倒是挺實用的,我預計寫一個程式將我常用的網誌、轉貼連結和相簿資料備份到本地端的 SQLite 中存放。那這一篇主要是備份相簿的小測試,雖說是小測試該有的功能都有了:自動登入、簡易備份進度列、指定備份的 uid。

這個程式的完整程式碼可在這邊(backup.py)觀看。

那要怎麼使用呢?

首先你需要有 Python 並安裝 PyFacebook,然後如果你要備份自己的相簿可執行

python.exe backup.py

如果你要備份別人的相簿,你要取得對方的 uid 並且對方允許你存取他的相簿,然後你可以執行

python backup.py –uid=100000040878833

備份完成之後,你在程式目錄下就會出現你的相簿名稱的目錄,另外,如果你是第一次執行,他會自動開啟瀏覽器要求你登入 Facebook 並授權這個程式可以存取你的個人資料,允許之後會到程式按下 Enter 就可以繼續備份

執行備份畫面

image

 

如果你只想使用這個程式又不想裝上面那一堆囉唆的東西,我有將上面的程式打包成 exe

有興趣可到這邊下載,不過不保證你的環境可以順利運作

Read Full Post »

[Python]抓取滑鼠座標

已經玩 Facebook 一陣子,裡面有許多遊戲都需要一直 Click,可惜 Click 久了也挺厭煩,所以我找了一套免費的 Auto Mouse Click 來幫我作這件事情,不過這個工具寫得好,可是 Click 的 X, Y 座標卻要自己填真是有點令人傻眼

還好取得 X, Y 座標在 .NET 很簡單,於是我用兩行(完整可參考 Form1.cs)

Point p = Cursor.Position;
label1.Text= String.Format("{0}x{1}", p.X, p.Y);

就取得滑鼠目前的 X,Y 座標,然後透過 Timer 就可以間空目前滑鼠的座標值。雖然這樣作很簡單,但是我也想嘗試透過 Python 來實作這個功能,其實核心部份也很簡單,花比較多時間在 Tkinter 這套 UI 上

對照 .NET,Python 要取得 X,Y 座標也很簡單只需要

import win32gui
x,y=win32gui.GetCursorPos()
lbl = Label(win, text=("%d,%d"%(x,y)))

然後是 Timer 定時更新,這部份我是利用 Tkinter 的功能,這部份的細節我還不是很清楚,大致上是這樣

win = Tk()
def update_pos():   
    win.after(100, update_pos)

update_pos()

win.mainloop()

就可讓程式定時觸發 update_pos,就可以達到如下畫面的滑鼠座標間空程式(完整程式參考 mpos.pyw )

image

Read Full Post »

中文轉注音

今天看到有人在詢問中文字怎麼反轉成注音,我也蠻好奇的,蒐集了一下資料發現其實沒什麼,就是透過"查表法",那問題是表在哪裡呢?我在網路上找到一個 phone.cin.utf8,他的檔案內容格式如下:

# convert by phoneu8.pl
# data source:
#   big5/phone.cin
#   Unicode 4.0.1 Unihan.txt, kMandarin field
%gen_inp
%ename  phone
%cname  注音
%selkey  123456789
%endkey  3467
%keyname  begin

注音音符

%keyname  end
%chardef  begin

單字拼音
%chardef  end

注音音符的格式為
識別碼  注音

其中分隔符號為 2 個空白。而單次拼音的格式為

拼音t中文

所以把這兩個地方解析後就可以建立兩個表,然後將你要查的中文字透過單字拼音找到拼音,然後將拼再到注音音符查找就可以得到最終的中文注音。

舉例來說我要查找”邱”的注音,在單字拼音表格中可得到拼音為 “fu.”,然後對照注音音符分別對應出

f => ㄑ
u => ㄧ
. => ㄡ

簡單吧 XD

我也用 Python 寫了一個簡單的轉換程式,可下載 convert.py 回去看完整程式,使用上很簡單如下:

p = phone()
print p.parse(u’邱’),  p.parse(u’垂’), p.parse(u’汶’) 

>>>
ㄑㄧㄡ ㄔㄨㄟˊ ㄨㄣˋ

Read Full Post »

[Python] PDF 分割與合併

之前使用 Acrobat 9 可以正常的分割與合併 PDF,可是在頻繁的安全性更新之後,Acrobat 已經無法正常運作。網路上有一套免費的“PDF Split And Merge” 可以很漂亮的分割和合併 PDF 也支援批次功能,可惜我沒有看到支援 2-9 這種分割第2到9頁方式。

遇到這種情況,我又想透過 Python 能否解決這個問題,網路上找到一篇相當好的開頭文章”Python PDF Split/Merge Library”,作者相當有趣,列了幾個 Python 的解決方法,不是透過 COM 、 Java 的元件,就是呼叫其他程式來完成,因為他也沒找到純 Python 的模組,所以他自己建了一個 pyPdf 專案,這是一個純 Python 的模組,看了官方範例可以滿足我的需要,用法也相當的簡單,我就使用這個模組來實作我的 PDF 分割與合併

我的環境是 Vista+Python 2.6+pyPdf 1.12,完整程式碼可參考 smpdf.py

這個程式透過讀取一個描述檔,內容如下:

d:temp程序員雜誌2004年第12期.pdf
d:程序員雜誌2004年第12期-摘要.pdf
6-8
19

格式為第一行是來源的 PDF 檔,第二行是目的 PDF 檔,接著是一系列要抓取的頁面順序,最終 PDF 內容就是依據頁面順序來產生。

使用時只需要

image

就可以產生需要的 PDF,需要注意的是描述檔需要存成 UTF-8 編碼。

有了這個程式,我又可以移除一些不必要的軟體了~

Read Full Post »

Vista 有非常討厭的 UAC 機制,對於我的 timer_sync.py 程式因為需要修改系統時間辜需要透過 Administrator 權限才能執行,如果將 python.exe 設為 Administrator 身份執行,每次都會出現提示也很困擾,一個解決辦法是透過”工作排程”,以下示範我的作法

首先下圖是最終完成畫面,右下角的執行可用於測試

image

要建立一個工作,首先在 Window 右鍵選單執行”建立工作”,這步驟比較重要的是勾取”以最高權限執行”

image

接著是設定觸發時間點

image

然後設定要執行的程式

image

image

因為我的程式需要網路連線,所以在設定條件

image

這樣就完成工作排程的設定,當你完成設定之後,他會詢問執行程式的帳號米碼,之後排程執行時就不需要再次輸入。以後開機就會自動執行時間校正,這樣也免除將 python.exe 設為 Administrator 執行的困擾

相關文章
[1] [Python] Windows 時間校正

Read Full Post »

AIR 1.5+ExtJS 3.0 開發

AIR 是一個相當不錯的 HTML 和應用程式的容器,只可惜功能上還不夠強大,HTML 的 UI 排版對我也是頭痛的問題,不過這兩個問題我已經漸漸找到解決方法,功能等 AIR 2 出來可與原生程式互動可以強化,UI 部份則可透過 ExtJS 來解決。

只可惜官方 ExtJS for AIR 一直停留在 ExtJS 2 而不較新的 ExtJS 3,直到今天終於忍不住手癢將官方釋出的 Ext Designer 萃取出未釋出的 ExtJS3 For AIR,Ext Designer 真是一套蠻期待的 UI Designer 工具。

透過 ExtJS3 for AIR 就可以在 AIR 上使用 ExtJS 寫介面,這真是太美妙啦~

以下是我移植之前寫的 Facebook Connect 的到 AIR 的呈現效果

image 

 

相當不錯,Ext 處理掉 AIR 的相容細節,也提供一組針對 AIR 的擴充 API,真是相當不錯。等 AIR2 出來我蠻想嘗試用 Python+AIR+ExtJs 來開發程式~

有興趣的人也可以下載上述的 ExtJs.air 程式,安裝過程如下:

image image image

Read Full Post »

Older Posts »