半年ぶりにPDFアレコレをバージョンアップ。変更点は以下の通り。
Ver2.01 2020/3/15
・プレビューからの捺印機能に対応。捺印用データはとりあえずpdfのみで配置点が固定。
※そのうち、捺印データに画像や自作の捺印データで捺印できるようにしたい。
※画面でクリックした点をPDFの座標系に落とし込めればいいのだが。。
※Web任印は以下サイトで作るとよい。できるPDFが4MBとデカイのが難点。
http://www.hakusyu.com/webmtm/
詳細はコチラ。
上でも少し触れたように、PDFに捺印できるようにした。はっきり言ってまだ実用に耐えないが、とにかくPDFに捺印できることを示したくて中途半端でも公開した。課題が多いのでこのあたりについては近々対応を進めていく。PDFiumの描画エンジンとiTextSharpのPDF編集が組み合わさると、こんなにアレコレできるんだということを今後も明らかにしていきたいぞ。
以下は、編集対象のPDFに対して捺印用のPDFを配置している処理。AddTemplateで100と150なんて固定値を入れているから、決まったところにしか配置してしまう。引数のpntがスクリーン座標なんで、これをPDFの座標に変換できればいけるんだけどその法則性がまだわかっていない。今後の調査で明らかにしていく。
public bool Natsuin(ref string file, int pno, string strNtin, Point pnt)
{
string temp = uty.GetTempPDFName();
bool stat = true;
PdfReader reader = new PdfReader(file);
PdfReader ntin = new PdfReader(strNtin);
try
{
int pagesCount = reader.NumberOfPages;
if (0 < pno && pno <= pagesCount)
{
PdfStamper stamper = new PdfStamper(reader, new FileStream(temp, FileMode.Create));
PdfImportedPage page = stamper.GetImportedPage(ntin, 1);
stamper.GetImportedPage(reader, pno);
stamper.GetOverContent(pno).AddTemplate(page, 100, 150);
stamper.Close();
}
else
{
stat = false;
MessageBox.Show("ページが範囲外");
}
}
catch (PdfException ex)
{
stat = false;
MessageBox.Show(string.Format("捺印に失敗({0})", ex.Message));
}
finally
{
reader.Close();
ntin.Close();
if (stat)
{
uty.FileDelete(file);
file = temp;
}
}
return stat;
}