CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

PDFアレコレをバージョンアップ

投稿日:2019年10月14日 更新日:

1年ぶりにPDFアレコレをバージョンアップ。変更点は以下の通り。
Ver2.00 2019/10/13
・プレービューからのページ回転に対応。PDFiumのPDF編集能力は低いため、iTextSharpによるPDF編集の第一歩。PDF編集はこれからも機能拡張していくつもり。
・セーブにおいて、開いているファイルに対する上書き保存を可能とした。
・シングルページTIFFへの画像変換に対応した。
詳細はコチラ。

上でも少し触れたように、iTextSharpを組み込んだことが大きい。PDFiumにページを回転できそうなAPIがあったものの、使えないものだったので実装を断念していたのに対して、iTextSharpによるページ回転を実装。PDFのプレビューを見ながらページの回転(半時計回りに90度)できるフリーソフトはあんまないんじゃないかな。これもPDFiumの描画エンジンがあるからこそ。

iTextSharpはVer5.5.13.1を利用。Ver5系のライセンス規約では、ソースコードを公開しなければいけないらしいので、とりあえずiTextSharpの実装部分のみ公開しておく。今後、いい感じに仕上がってきたら、PDFium利用部を含めてPDFアレコレ全体のソースコードを公開する予定。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Windows.Forms;

namespace PDFiumTest
{
	class ITSharp
	{
		Uty uty = new Uty();

		public ITSharp()
		{
		}
		public bool PageRotate(ref string file, int pno)
		{
			string temp = uty.GetTempPDFName();
			bool stat = true;
			PdfReader reader = new PdfReader(file);
			try
			{
				int pagesCount = reader.NumberOfPages;
				if (0 < pno && pno <= pagesCount)
				{
					PdfDictionary page = reader.GetPageN(pno);
					PdfNumber rotate = page.GetAsNumber(PdfName.ROTATE);
					int rotation = rotate == null ? 90 : (rotate.IntValue + 90) % 360;
					page.Put(PdfName.ROTATE, new PdfNumber(rotation));

					PdfStamper stamper = new PdfStamper(reader, new FileStream(temp, FileMode.Create));
					stamper.Close();
				}
				else
				{
					stat = false;
					MessageBox.Show("ページが範囲外");
				}
			}
			catch(PdfException ex)
			{
				stat = false;
				MessageBox.Show(string.Format("ページ回転に失敗({0})", ex.Message));
			}
			finally
			{
				reader.Close();
				if (stat)
				{
					uty.FileDelete(file);
					file = temp;
				}
			}
			return stat;
		}
	}
}

PDFiumとiTextSharpをつなぐのはテンポラリファイル。つまり、一度ファイルに保存してから行き来するってこと。iTextSharpのPDF編集は定評があるので、さらなる強化を図っていくつもり。また、PDFiumの描画まわりは、任意指定の拡大縮小をやってみたい。今はウインドウサイズに応じて拡大率が変わる仕様なので実用的でないから。

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

関連記事

Vectorに作者登録の申し込みをしてみた

Vectorとはフリーウェア、シェアウェアのダウンロードサイト。最近はあまり使わなくなった。もちろんフリーソフトはよく使っているんだけど、マイナーなものはあまり使わなくなってきていて、メジャーどころは …

PDFへの捺印をpdfでするだけでなくpng画像でもできるようにしたPDFアレコレを公開

昨日に引き続き今日もPDFアレコレをバージョンアップ。変更点は以下の通り。 Ver2.03 2020/3/22 ・捺印データとしてpng画像に対応した。 ・捺印時にマウスカーソルにプレビューデータを表 …

no image

レイヤ付きPDFを出力する弊害

Illustratorという高価なアプリを使ってPDFを出力すると、PDFにレイヤが付いてしまって非表示にしたはずのレイヤが表示されて困ったなという事象に2回遭遇したので以下に記録。共通しているのが、 …

no image

CEditでドラッグ&ドロップ

プログラミングから離れてしばらく経ってしまった。 プロジェクト管理をやっていると、プログラミングをやることができなくなる。 対人間の仕事の合間にプログラムをやることは、おいらには無理だった。 プログラ …

no image

WinMergeのフィルタ

【2018/11/24追記】 この書きっぷりではあまりにもわかりずらいので、整理して追加情報を加えて新たな記事とした。 WinMegeのフィルタについて今すぐ知りたいならココを読め プログラマにとって …