pdfファイルをマージするアプリケーション(3)
- 昨日のコードにあったバグ
- 修正点
- ファイルを選択したらdlg.GetPath()でファイルパスを得る
- 起動ディレクトリにファイルを出力するよう固定する
以下、修正版ソースコード。
#!/bin/env python # coding: utf-8 # PdfMerger.py (2009/01/10 02:17:30) #------------------------------------------------------------------------ import wx import wx.grid import os, sys import time from pyPdf import PdfFileWriter, PdfFileReader wildcard1 = "pdf file (*.pdf)|*.pdf|" \ "All files (*.*)|*.*" class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 530,350 wx.Frame.__init__(self, id, title=u"Merging Pdf Files", size=wx.Size(width, height)) Pan = wx.Panel(self, -1) self.OutputDir = os.getcwd() self.StTxt1 = wx.StaticText(Pan, -1, u"(1)ファイルを順番に選択する") self.Table = DataTable(Pan) self.Btn1 = wx.Button(Pan, -1, u"(1)ファイルの選択") self.StTxt2 = wx.StaticText(Pan, -1, u"(2)選択したすべてのファイルを結合する") self.StTxt3 = wx.StaticText(Pan, -1, u"結合したあとのファイル名:") self.TxtCtl = wx.TextCtrl(Pan, -1, "Enter file name", size=(250,-1)) self.Btn2 = wx.Button(Pan, -1, u"(2)ファイルの結合") self.Btn1.Bind(wx.EVT_BUTTON, self.SelectFiles) self.Btn2.Bind(wx.EVT_BUTTON, self.DoMerge) vsizer0 = wx.BoxSizer(wx.VERTICAL) vsizer11 = wx.BoxSizer(wx.VERTICAL) vsizer21 = wx.BoxSizer(wx.VERTICAL) hsizer11 = wx.BoxSizer(wx.HORIZONTAL) hsizer21 = wx.BoxSizer(wx.HORIZONTAL) hsizer11.Add(self.Table, 0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer11.Add(self.Btn1, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer11.Add(self.StTxt1,0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer11.Add(hsizer11,0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer21.Add(self.StTxt3,0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer21.Add(self.TxtCtl,0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer21.Add(self.Btn2, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer21.Add(self.StTxt2,0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer21.Add(hsizer21, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer0.Add(vsizer11, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer0.Add(vsizer21, 0, wx.ALIGN_LEFT|wx.ALL, 5) Pan.SetSizer(vsizer0) vsizer0.Fit(Pan) def SelectFiles(self, event): dlg = wx.FileDialog( self, message=u"pdfファイルをひとつ選んでください", defaultDir=os.getcwd(), defaultFile="", wildcard=wildcard1, style=wx.OPEN|wx.CHANGE_DIR) if dlg.ShowModal() == wx.ID_OK: self.Table.VNumber += 1 DirFileName = dlg.GetPath() FileName = DirFileName.split("\\")[-1] input_temp = PdfFileReader(file(DirFileName, "rb")) pnumber = input_temp.getNumPages() self.Table.TitleList.append(DirFileName) self.Table.FileList.append(FileName) self.Table.PageNumber.append(pnumber) self.Table.UpdateList() dlg.Destroy() def DoMerge(self, event): outputfile = self.TxtCtl.GetValue() OutfilePath = os.path.join(self.OutputDir, outputfile) if OutfilePath[-3:] != 'pdf': OutfilePath += '.pdf' output = PdfFileWriter() for i in xrange(self.Table.VNumber): input = PdfFileReader(file(self.Table.TitleList[i], "rb")) pnum = input.getNumPages() for k in xrange(pnum): output.addPage(input.getPage(k)) outputStream = file(OutfilePath, "wb") output.write(outputStream) outputStream.close() print "PdfMerger: merging is completed successfully\ at %s." % time.ctime(time.time()) class DataTable(wx.grid.Grid): def __init__(self, parent): wx.grid.Grid.__init__(self, parent, -1) self.InitRow = 8 self.CreateGrid(self.InitRow, 2) self.SetColLabelValue(0, u"ファイル名") self.SetColLabelValue(1, u"ページ数") self.SetColSize(0, 240) self.SetColSize(1, 60) self.VNumber = 0 self.TitleList = [] self.FileList = [] self.PageNumber = [] def UpdateList(self): RowNum = self.VNumber if RowNum > self.InitRow: self.AppendRows(RowNum-self.InitRow) self.InitRow = RowNum self.SetCellValue(RowNum-1, 0, self.FileList[RowNum-1]) self.SetCellValue(RowNum-1, 1, str(self.PageNumber[RowNum-1])) class Application(wx.App): def OnInit(self): frame = MainFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) return True def main(): app = Application(0) print u"info> このアプリケーションの起動時刻は %sです。" %\ time.ctime(time.time()) print u"info> 起動ディレクトリは %sです。" % os.getcwd() app.MainLoop() if __name__ == '__main__': main() #eof