# PythonによるPDFファイルの加工
# 【強調表示】 PDFファイルの特定の語句を強調表示する
# 必要なモジュールを呼び出す
import os
import fitz
# 語句を強調表示したいPDFファイルのパスを入力する(拡張子が「.pdf」でない場合やファイルが存在しない場合は再入力とする)
flag = '0'
while flag != '1':
path = input('語句を強調表示したいPDFファイルのパスを入力してください :')
if '.pdf' not in path:
print('拡張子が.pdfのファイル名にしてください')
elif os.path.isfile(path) == False:
print('パス '+path+' のファイルは存在しません')
else:
flag = '1'
# 語句を強調表示したいPDFファイルを開いて「f」に格納する
f = fitz.open(path)
# 強調表示の種類を「emlist」にリスト化し、入力ガイド「emguide」を作る
emlist = ['蛍光ペン','下線','波線']
emn = len(emlist)
i = 0
emguide = ''
for i in range(emn):
emguide += emlist[i]+'='+str(i+1)+' ' # 蛍光ペン=1 下線=2 波線=3
# 強調表示したい語句「goku」と強調表示の種類コード「em」を入力する
flag = '0'
while flag != '1':
goku = ''
while goku == '':
goku = input('強調表示したい語句を入力してください :')
em = 0
while (em < 1 or em > emn):
em = int(input('強調表示の種類を入力してください '+emguide+':'))
if (em < 1 or em > emn):
print('強調表示の種類は 1 から '+str(emn)+' の範囲です')
flag = input('語句 '+goku+' を '+emlist[em-1]+' で強調表示しますか? Yes=1 No=another :')
# 以下の作業を全ページで繰り返す
for page in f:
# 強調表示すべき語句「goku」があれば「emgoku」に格納する
emgoku = page.search_for(goku)
# 「emgoku」を種類コード「em」に応じ強調表示する
if em == 1:
page.add_highlight_annot(emgoku) # 蛍光ペン
elif em == 2:
page.add_underline_annot(emgoku) # 下線
else:
page.add_squiggly_annot(emgoku) # 波線
# 強調表示した結果を画面表示する
print('語句 '+goku+' を '+emlist[em-1]+' で強調表示しました')
# 保存方法を選択し、新規保存の場合は文字を入力し元のPDFファイル名の末部に付け加えて同じディレクトリ内に保存する
hozon = '0'
hozon = input('保存方法を選択してください 上書き保存=1 新規保存=another :')
if hozon == '1':
f.saveIncr()
print('パス '+path+' で上書き保存しました')
else:
flag = '0'
while flag != '1':
ver = input('元ファイルと異なるファイル名にするため付け加える文字を入力してください :')
path2 = path[0:len(path)-4]+'_'+ver+'.pdf'
if os.path.isfile(path2) == True:
print('パス '+path2+' のファイルは既に存在します')
else:
flag = '1'
f.save(path2)
print('パス '+path2+' で新規にファイルを保存しました')
# PDFファイルを閉じる
f.close()
語句を強調表示したいPDFファイルのパスを入力してください : C:\Users\......\......\......\......\......\PDFデータ.pdf
強調表示したい語句を入力してください : 熱中症
強調表示の種類を入力してください 蛍光ペン=1 下線=2 波線=3 : 1
語句 熱中症 を 蛍光ペン で強調表示しますか? Yes=1 No=another : 1
語句 熱中症 を 蛍光ペン で強調表示しました
保存方法を選択してください 上書き保存=1 新規保存=another : 0
元ファイルと異なるファイル名にするため付け加える文字を入力してください : 2
パス C:\Users\......\......\......\......\......\PDFデータ_2.pdf で新規にファイルを保存しました
# PythonによるPDFファイルの加工
# 【透かし挿入】 PDFファイルの中央に透かし文字を挿入する
# 必要なモジュールを呼び出す
import os
import fitz
# 透かしを入れたいPDFファイルのパスを入力する(拡張子が「.pdf」でない場合やファイルが存在しない場合は再入力とする)
flag = '0'
while flag != '1':
path = input('透かしを入れたいPDFファイルのパスを入力してください :')
if '.pdf' not in path:
print('拡張子が.pdfのファイル名にしてください')
elif os.path.isfile(path) == False:
print('パス '+path+' のファイルは存在しません')
else:
flag = '1'
# 透かしを入れたいPDFファイルを開いて「f」に格納する
f = fitz.open(path)
# PDFファイルのページ数「npg」を取得して画面表示する
npg = f.page_count
print('PDFファイルのページ数は '+str(npg)+' です')
# 透かし文字の大きさを「sizlist」に、文字のポイントを「sizpt」にリスト化し、入力ガイド「sizguide」を作る
sizlist = ['小','中','大']
sizpt = [20,40,60]
sin = len(sizlist)
i = 0
sizguide = ''
for i in range(sin):
sizguide += sizlist[i]+'('+str(sizpt[i])+'pt)'+'='+str(i+1)+' ' # 小(20pt)=1 中(40pt)=2 大(60pt)=3
# 透かし文字の色を「collist」に、色のRGB値を「rgblist」にリスト化し、入力ガイド「colguide」を作る
collist = ['赤','青','緑']
rgblist = [[255,0,0],[0,0,255],[0,128,0]]
con = len(collist)
i = 0
colguide = ''
for i in range(con):
colguide += collist[i]+'='+str(i+1)+' ' # 赤=1 青=2 緑=3
# 透かし文字とその大きさ・色を入力する
flag = '0'
while flag != '1':
# 透かし文字「text」を8文字以内で入力する
ten = 0
while (ten < 1 or ten > 8):
text = input('透かし文字を入力してください(8 文字まで) :')
ten = len(text)
if (ten < 1 or ten > 8):
print('透かし文字の文字数は 8 文字までです')
# 透かし文字の大きさコード「siz」を入力し、フォントサイズ「fs」を求める
siz = 0
while (siz < 1 or siz > sin):
siz = int(input('透かし文字の大きさを入力してください :'+sizguide+':'))
if (siz < 1 or siz > sin):
print('透かし文字の大きさは 1 から '+str(sin)+' の範囲です')
fs = sizpt[siz-1]
# 透かし文字の色コード「col」を入力し、RGB値「cr,cg,cb」を求める
col = 0
while (col < 1 or col > con):
col = int(input('透かし文字の色を入力してください :'+colguide+':'))
if (col < 1 or col > con):
print('透かし文字の色は 1 から '+str(con)+' の範囲です')
[cr,cg,cb] = rgblist[col-1]
flag = input('透かし文字「'+text+'」を '+sizlist[siz-1]+'の大きさで '+collist[col-1]+'色で表示しますか? Yes=1 No=another :')
# 透かしの位置を決め、透かしを入れる
i = 0
# 以下の作業を全ページで繰り返す
for page in f:
i += 1
# 透かしがページの中央になるようテキストボックスの座標「zahyou=(x0,y0),(x1,y1)」を求める
xy = page.bound() # ページの大きさ
cx = round((xy[2]-xy[0])/2) # 横方向の中心
cy = round((xy[3]-xy[1])/2) # 縦方向の中心
x0 = cx-ten*fs/2
y0 = cy-fs*3/4
x1 = cx+ten*fs/2
y1 = cy+fs*3/4
zahyou = fitz.Rect(x0,y0,x1,y1)
# 透かしを入れる
page.insert_textbox(
zahyou, # 透かし文字を入れるテキストボックスの座標
text, # 透かし文字
fontsize = fs, # 透かし文字のフォントサイズ
fontname = 'japan', # 透かし文字のフォント名
color = (cr/255,cg/255,cb/255), # 透かし文字のRGB値
fill_opacity = 0.5, # 透かし文字の透過度( 0.0(透過) ~ 1.0(不透過) )
)
print(i,'ページの 左上 x0=',x0,'y0=',y0,' 右下 x1=',x1,'y1=',y1,' の座標で透かしを入れました')
# 保存方法を選択し、新規保存の場合は文字を入力し元のPDFファイル名の末部に付け加えて同じディレクトリ内に保存する
hozon = '0'
hozon = input('保存方法を選択してください 上書き保存=1 新規保存=another :')
if hozon == '1':
f.saveIncr()
print('パス '+path+' で上書き保存しました')
else:
flag = '0'
while flag != '1':
ver = input('元ファイルと異なるファイル名にするため付け加える文字を入力してください :')
path2 = path[0:len(path)-4]+'_'+ver+'.pdf'
if os.path.isfile(path2) == True:
print('パス '+path2+' のファイルは既に存在します')
else:
flag = '1'
f.save(path2)
print('パス '+path2+' で新規にファイルを保存しました')
# ファイルを閉じる
f.close()
透かしを入れたいPDFファイルのパスを入力してください : C:\Users\......\......\......\......\......\PDFデータ.pdf
PDFファイルのページ数は 10 です
透かし文字を入力してください(8文字まで) : 至急回覧
透かし文字の大きさを入力してください :小(20pt)=1 中(40pt)=2 大(60pt)=3 : 3
透かし文字の色を入力してください :赤=1 青=2 緑=3 : 1
透かし文字「至急回覧」を 大の大きさで 赤色で表示しますか? Yes=1 No=another : 1
1 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
2 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
3 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
4 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
5 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
6 ページの 左上 x0= 178.0 y0= 376.0 右下 x1= 418.0 y1= 466.0 の座標で透かしを入れました
7 ページの 左上 x0= 150.0 y0= 345.0 右下 x1= 390.0 y1= 435.0 の座標で透かしを入れました
8 ページの 左上 x0= 150.0 y0= 345.0 右下 x1= 390.0 y1= 435.0 の座標で透かしを入れました
9 ページの 左上 x0= 150.0 y0= 345.0 右下 x1= 390.0 y1= 435.0 の座標で透かしを入れました
10 ページの 左上 x0= 150.0 y0= 345.0 右下 x1= 390.0 y1= 435.0 の座標で透かしを入れました
保存方法を選択してください 上書き保存=1 新規保存=another : 0
元ファイルと異なるファイル名にするため付け加える文字を入力してください : 3
パス C:\Users\......\......\......\......\......\PDFデータ_3.pdf で新規にファイルを保存しました
# PythonによるPDFファイルの加工
# 【ページ挿入】 PDFファイルにページ番号を挿入する
# 必要なモジュールを呼び出す
import os
import fitz
# ページ番号を入れたいPDFファイルのパスを入力する(拡張子が「.pdf」でない場合やファイルが存在しない場合は再入力とする)
flag = '0'
while flag != '1':
path = input('ページを入れたいPDFファイルのパスを入力してください :')
if '.pdf' not in path:
print('拡張子が.pdfのファイル名にしてください')
elif os.path.isfile(path) == False:
print('パス '+path+' のファイルは存在しません')
else:
flag = '1'
# ページ番号を入れたいPDFファイルを開いて「f」に格納する
f = fitz.open(path)
# PDFファイルのページ数「npg」を取得して画面表示する
npg = f.page_count
print('PDFファイルのページ数は '+str(npg)+' です')
# ページ番号の位置を「poslist」にリスト化し、入力ガイド「posguide」を作る
poslist = ['中下','右下']
pon = len(poslist)
i = 0
posguide = ''
for i in range(pon):
posguide += poslist[i]+'='+str(i+1)+' ' # 中下=1 右下=2
# ページ番号の大きさを「sizlist」に、文字のポイントを「sizpt」にリスト化し、入力ガイド「sizguide」を作る
sizlist = ['小','中','大']
sizpt = [8,10,12]
sin = len(sizlist)
i = 0
sizguide = ''
for i in range(sin):
sizguide += sizlist[i]+'('+str(sizpt[i])+'pt)'+'='+str(i+1)+' ' # 小(8pt)=1 中(10pt)=2 大(12pt)=3
# ページ番号の色を「collist」に、色のRGB値を「rgblist」にリスト化し、入力ガイド「colguide」を作る
collist = ['黒','赤','青']
rgblist = [[0,0,0],[255,0,0],[0,0,255]]
con = len(collist)
i = 0
colguide = ''
for i in range(con):
colguide += collist[i]+'='+str(i+1)+' ' # 黒=1 赤=2 青=3
# ページ番号の最初の値と位置・大きさ・色を入力する
flag = '0'
while flag != '1':
# ページ番号の最初の値「pgs」を入力する
pgs = -1
while pgs < 0:
pgs = int(input('ページ番号の最初の値(通常は 1)を入力してください 0の場合は1ページ目にはページ番号を入れず2ページ目に1が入ります :'))
if pgs < 0:
print('ページ番号の最初の値は 0以上 です')
# ページ番号の位置コード「pos」を入力する
pos = 0
while (pos < 1 or pos > pon):
pos = int(input('ページ番号の位置を入力してください :'+posguide+':'))
if (pos < 1 or pos > pon):
print('ページ番号の位置は 1 から '+str(pon)+' の範囲です')
# ページ番号の大きさコード「siz」を入力し、フォントサイズ「fs」を求める
siz = 0
while (siz < 1 or siz > sin):
siz = int(input('ページ番号の大きさを入力してください :'+sizguide+':'))
if (siz < 1 or siz > sin):
print('ページ番号の大きさは 1 から '+str(sin)+' の範囲です')
fs = sizpt[siz-1]
# ページ番号の色コード「col」を入力し、RGB値「cr,cg,cb」を求める
col = 0
while (col < 1 or col > con):
col = int(input('ページ番号の色を入力してください :'+colguide+':'))
if (col < 1 or col > con):
print('ページ番号の色は 1 から '+str(con)+' の範囲です')
[cr,cg,cb] = rgblist[col-1]
flag = input('ページ番号を '+str(pgs)+'を最初の値に '+poslist[pos-1]+'の位置で '+sizlist[siz-1]+'の大きさで '+collist[col-1]+'色で表示しますか? Yes=1 No=another :')
# ページ番号の位置を決め、ページを入れる
# 以下の作業を全ページで繰り返す
pgt = pgs -1
for page in f:
pgt += 1
text = str(pgt)
ten = len(text)
# ページ番号が指定位置になるようテキストボックスの座標「zahyou=(x0,y0),(x1,y1)」を求める
xy = page.bound() # ページの大きさ
cx = round((xy[2]-xy[0])/2) # 横方向の中心
if pos == 1: # 中下のX座標
x0 = cx-ten*fs/2
x1 = cx+ten*fs/2
else: # 右下のX座標
x0 = xy[2]-ten*fs-10
x1 = xy[2]-10
y0 = xy[3]-fs-20
y1 = xy[3]-10
zahyou = fitz.Rect(x0,y0,x1,y1)
# ページ番号を入れる
if pgt > 0:
page.insert_textbox(
zahyou, # ページ番号を入れるテキストボックスの座標
text, # ページ番号
fontsize = fs, # ページ番号のフォントサイズ
fontname = 'japan', # ページ番号のフォント名
color = (cr/255,cg/255,cb/255), # ページ番号のRGB値
fill_opacity = 1.0, # ページ番号の透過度( 0.0(透過) ~ 1.0(不透過) )
)
if pgs == 0:
pgs = 1
print(pgs,' ページから',pgt,' ページまで ページ番号を入れました')
# 保存方法を選択し、新規保存の場合は文字を入力し元のPDFファイル名の末部に付け加えて同じディレクトリ内に保存する
hozon = '0'
hozon = input('保存方法を選択してください 上書き保存=1 新規保存=another :')
if hozon == '1':
f.saveIncr()
print('パス '+path+' で上書き保存しました')
else:
flag = '0'
while flag != '1':
ver = input('元ファイルと異なるファイル名にするため付け加える文字を入力してください :')
path2 = path[0:len(path)-4]+'_'+ver+'.pdf'
if os.path.isfile(path2) == True:
print('パス '+path2+' のファイルは既に存在します')
else:
flag = '1'
f.save(path2)
print('パス '+path2+' で新規にファイルを保存しました')
# ファイルを閉じる
f.close()
ページを入れたいPDFファイルのパスを入力してください : C:\Users\......\......\......\......\......\PDFデータ.pdf
PDFファイルのページ数は 10 です
ページ番号の最初の値(通常は 1)を入力してください 0の場合は1ページ目にはページ番号を入れず2ページ目に1が入ります : 1
ページ番号の位置を入力してください :中下=1 右下=2 : 2
ページ番号の大きさを入力してください :小(8pt)=1 中(10pt)=2 大(12pt)=3 : 2
ページ番号の色を入力してください :黒=1 赤=2 青=3 : 2
ページ番号を 1を最初の値に 右下の位置で 中の大きさで 赤色で表示しますか? Yes=1 No=another : 1
1 ページから 10 ページまで ページ番号を入れました
保存方法を選択してください 上書き保存=1 新規保存=another : 0
元ファイルと異なるファイル名にするため付け加える文字を入力してください : 3
パス C:\Users\......\......\......\......\......\PDFデータ_3.pdf.pdf で新規にファイルを保存しました