Skip to content

Instantly share code, notes, and snippets.

@Shinichi-Ohki
Last active June 15, 2024 02:12
Show Gist options
  • Save Shinichi-Ohki/518629a8943af7e109ea83aca49f2f2d to your computer and use it in GitHub Desktop.
Save Shinichi-Ohki/518629a8943af7e109ea83aca49f2f2d to your computer and use it in GitHub Desktop.
テカナリエレポートをまとめるスクリプト(要pdftk)

テカナリエレポートをまとめるスクリプトです

  • tlsr.rb 番号 でその号のテカナリエレポートをくっつけます。 (例: ruby tlsr.rb 450)
  • 番号は複数指定できます。 (例: ruby tlsr.rb 450 451)
  • -d でディレクトリを指定できます。省略するとカレントディレクトリになります。 (例: ruby tlsr.rb -d treport 450 451)
  • -o で出力ディレクトリを指定できます。省略すると-dで指定したディレクトリになります。 (例: ruby tlsr.rb -d treport -o output 450 451)
  • 2ページ目の画像をJPEGで出力します。出力先は上記出力ディレクトリです。-pでページ数を指定できます
  • -npで画像の出力を抑止します。-pオプションより強いです。
  • pdftkが必要です。 https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
  • 表紙画像の出力にはImageMagickが必要です。
  • macOS、ruby 2.7.1p83で動作を確認しています。

既知のバグ

  • ファイル名の途中に'_A'が入っていると、出力ファイル名がおかしくなります。(例:TLSR470号 Apple_Airpods_MAX.pdf)
    • 連結には成功しているので、ファイル名を手で直してください

2024/06/01

  • tlsr.rbを実行するコマンドを生成して実行するだけのスクリプトtlwrap.rbを追加しました。GUIでDropしたい方はどうぞ。

2024/06/15

  • 処理しようとした号と同じ数字列がファイル名に含まれていると動作がおかしくなるのを修正しました(番号+'号'でファイル名を調べるようにしました)。
  • ImageMagickのコマンド名が変わってconvertからmagickになってたので対応しました。
#!/usr/bin/env ruby
# テカナリエレポートをまとめるスクリプトです
# tlsr.rb 番号 でその号のテカナリエレポートをくっつけます
# 番号は複数指定できます
# pdftkが必要です
# -d で分割されているテカナリエレポートのディレクトリを指定できます
# -o で連結したPDFファイルの出力先を指定できます
# デフォルトで2ページ目をJPEG画像として出力します。-p VAL でVALページ目をJPEG画像として出力します。VALを省略すると2ページ目を出力します
# -npで画像出力を抑止します(-pに勝ちます)
require "optparse"
option_hash = { d: Dir.pwd, o: nil, p: nil, np: false }
OptionParser.new do |opt|
opt.on("-d DIR", "--dir=DIR") { |v| option_hash[:d] = v } # ディレクトリ指定(省略でカレント)
opt.on("-o DIR", "--output=DIR") { |v| option_hash[:o] = v } # 出力ディレクトリ指定(省略で-d指定と同じディレクトリ)
opt.on("-p N", "--page=N") { |v| option_hash[:p] = v.to_i - 1 } # VALページ目をjpeg出力(要ImageMagick)
opt.on("-np", "--no-image") { |v| option_hash[:np] = true } # 画像出力を抑止する
opt.parse!(ARGV)
end
option_hash[:o] = option_hash[:d] if option_hash[:o].nil?
print("Target directory : \"#{option_hash[:d]}\"\n")
print("Output directory : \"#{option_hash[:o]}\"\n\n")
entries = Dir.entries(option_hash[:d])
pic = option_hash[:p].nil? ? 1 : option_hash[:p] # -pオプションがない時は2ページ目を、ある時は指定されたページを画像として出力する
#puts pic
sysstr = "pdftk "
convstr = "magick "
startname = ""
ARGV.each do |arg|
entries.sort.each do |fname|
if fname.include?(arg + "号")
if fname =~ /[__]A\.pdf/
startname = option_hash[:o] + "/" + fname.dup
startname.gsub!(/[__]A\.pdf/, ".pdf")
# p startname
end
if fname =~ (/[__][A-Z]\.pdf/)
sysstr += '"' + option_hash[:d] + "/" + fname + '" '
end
end
end
sysstr += " cat output " + '"' + startname + '" '
puts sysstr
puts
system(sysstr)
if !option_hash[:np] && pic.to_i >= 0 # -npオプションがない時は画像を出力する
convstr +=
'"' + startname + '"[' + pic.to_s + "] " + option_hash[:o] + "/" + arg +
".jpg"
puts convstr
puts
system(convstr)
convstr = "magick "
end
sysstr = "pdftk "
convstr = "magick "
end
#!/usr/bin/env ruby
# tlsr.rbを実行するコマンドを生成して実行するだけのスクリプトです
# FinderやExplorerからファイルをDrag&Dropするなどしてお使いください
# そのファイル名に含まれる数字と、その一つ後の数字を生成します
#
# 例)
# > tlwrap.rb /Users/username/Downloads/TLSR796号HOVER_A.pdf
# tlsr.rb 796 797
# コマンドライン引数を取得します。
file_path = ARGV[0]
# ファイルパスが提供されていない場合のエラーメッセージ
if file_path.nil? || file_path.empty?
puts "ファイルパスを指定してください。"
exit
end
# ファイル名を抽出します。
file_name = File.basename(file_path, '.*') # 拡張子を除いたファイル名
# 正規表現を使用して、'TLSR796号'の部分を抽出します。
match = file_name.match(/TLSR(\d+)号/)
# マッチした数字を取得し、"796 797"という形式に変換します。
if match
number = match[1].to_i
result = "tlsr.rb #{number} #{number + 1}"
puts result
system(result) # tlsr.rbを実行する
else
puts "マッチする部分が見つかりませんでした。"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment