//srcで指定されたPDFファイルをページ毎に分割し、destで指定されたパスに保存する。
//保存ファイル名は「ファイル名-ページ番号.pdf」とする。
//分割したページ数を返す。
public List<string> Run(string src, string dest)
{
// srcで渡されたファイルが存在するか?
if (!File.Exists(src))
{
throw new FileNotFoundException();
}
// destで渡されたフォルダが存在するか?
if (!Directory.Exists(dest))
{
throw new DirectoryNotFoundException();
}
var reader = new iTextSharp.text.pdf.PdfReader(src);
string file_name = Path.GetFileNameWithoutExtension(src);
int digit = reader.NumberOfPages.ToString().Length;
var app_name = new MainForm();
// 一時フォルダにpdfを作成してdestにコピー。
// その際上書き確認を行う。
System.IO.DirectoryInfo del = new System.IO.DirectoryInfo(Path.GetTempPath() + "\\" + app_name.Text);
if (del.Exists) del.Delete(true);
System.IO.DirectoryInfo tmp = new System.IO.DirectoryInfo(Path.GetTempPath() + "\\" + app_name.Text);
tmp.Create();
for (int i = 1; i <= reader.NumberOfPages; i++)
{
var doc = new iTextSharp.text.Document();
var dest_tmp = String.Format(@"{{0}}\{{1}}-{{2:D{0}}}.pdf", digit);
var dest_name = String.Format(dest_tmp, tmp, file_name, i);
var copy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(dest_name, FileMode.Create));
doc.Open();
copy.AddPage(copy.GetImportedPage(reader, i));
doc.Close();
}
// コピーしたファイルを監視する
Ret.list.Clear();
var watcher = new System.IO.FileSystemWatcher();
watcher.Path = dest;
watcher.Filter = "*.pdf";
watcher.Changed += new FileSystemEventHandler(changed);
watcher.Created += new FileSystemEventHandler(changed);
watcher.EnableRaisingEvents = true;
FileSystem.CopyDirectory(tmp.ToString(), dest, UIOption.AllDialogs);
watcher.EnableRaisingEvents = false;
watcher.Dispose();
watcher = null;
tmp.Delete(true);
reader.Close();
return Ret.list;
}