こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

pythonのスクリプトが動きません

Webで"大きなPDFファイルを自動分割するPythonスクリプト"

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import glob
import math
import subprocess
import re

#==-User Parameter====
MAX_PDF_SIZE_MB=80

class PdfSplit:
def __init__(self, fileName, resultpath):
print("Split file name is "+fileName)

#FileSizeCheck
fsizeMB=float(os.path.getsize(fileName))/1000000
print("file size is "+str(fsizeMB)+" MB")

if fsizeMB<=MAX_PDF_SIZE_MB:
print("Not need split")
return;

nSplit=int(math.ceil(fsizeMB/MAX_PDF_SIZE_MB))
print("nSplit:"+str(nSplit))

nPage=self.GetPdfPageNumber(fileName)
# nPage=888
print("nPage:"+str(nPage))
if nPage==0:
print("Error: cannot read page:"+fileName)
return

onePage=int(math.ceil(nPage/nSplit))
print("onePage:"+str(onePage))

#result path
finalpath=resultpath+"/"+fileName[2:-4]
print("finalpath:"+finalpath)

#Page split
startpage=1
for i in range(nSplit):
endpage=(i+1)*onePage
if i==nSplit-1:
endpage=nPage
print "start page:"+str(startpage)+",endpage:"+str(endpage)

cmd="pdftk "+fileName+" cat "+str(startpage)+"-"+str(endpage)+" output "+finalpath+"_"+str(i+1)+".pdf"
# pdftk 元ファイル名.pdf cat 開始ページ-終了ページ output 出力ファイル名.pdf
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
stdout_data, stderr_data = p.communicate()
print stderr_data

startpage=endpage+1

def GetPdfPageNumber(self,fileName):
cmd="pdftk "+fileName+" data_dump"
print cmd
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# p.wait()
stdout_data, stderr_data = p.communicate()

extracted=0

count=0
for strline in stdout_data.split("\n"):
# print strline
#sample NumberOfPages: 344
if "NumberOfPages" in strline:
number = re.search("\d+",strline)
extracted = number.group()
break
count+=1
if count>=100:
break
return int(extracted)

class SplitManager():
def __init__(self):
print "init"

def Main(self):
#Create Result dir
RESULT_DIR='results'
if not os.path.isdir(RESULT_DIR):
os.mkdir(RESULT_DIR)

files = glob.glob('./*.pdf')
for file in files:
PdfSplit(file,RESULT_DIR)

if __name__ == '__main__':
print __file__+" start!!"
manager=SplitManager()
manager.Main()

が公開されていたので使用しようと思ったのですがうまく動作しません。

このスクリプトを使用するためにPython3.7.0b3とPDFtkをインストールしました。
そして、公開されていたシクリプトをtextにコピーしてpdf.pyという名前で保存しました。
最後にpdfファイルを収納したフォルダにpdf.pyを入れて、pdf.pyを実行しました。
しかしコマンドプロンプトが一瞬表示されるだけで動作しませんでした。

何か間違っているから動かないのだと思うのですが分からないので教えてください。
Pythonスクリプトの実行手順はこれで合ってますか。
それともPythonのスクリプトとバージョンが合ってないのでしょうか。
PCはWindows7です。

回答よろしくお願いします。

投稿日時 - 2018-04-29 15:56:32

QNo.9493388

すぐに回答ほしいです

質問者が選んだベストアンサー

https://teratail.com/

へ相談されることをオススメします。
こちらはプログラム専門です。

投稿日時 - 2018-04-29 17:42:49

お礼

ご回答ありがとうございます。

Pythonのバージョンを3から2にインストールしなおしたらpythonのスクリプトが動くようになりました。

投稿日時 - 2018-04-29 19:24:32

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問