Skip to content

Instantly share code, notes, and snippets.

@Shinichi-Ohki
Last active March 18, 2023 04:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • 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)
    • 連結には成功しているので、ファイル名を手で直してください
#!/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{|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)
}
if option_hash[:o].nil?
option_hash[:o] = option_hash[:d]
end
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 = "convert "
startname = ""
ARGV.each { |arg|
entries.sort.each { |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
}
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 = "convert "
end
sysstr = "pdftk "
convstr = "convert "
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment