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

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.1】

Teigha改めODA(Open Design Alliance)は有料のライブラリー。商用利用するならば、最低でも年間1500ドル(初年度2000ドル)を要する。この場合、配布本数が100本に限られ …

no image

x64

Windowsの64ビット動作って、まだまだ先ですかね、という話をしてみます。  コンピュータが16ビットだった時代、私はこの業界に入りました。正確に言うと、CPUは32ビットになっていたが、その上で …

no image

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

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

PDFアレコレのソースコードをnoteで有料公開してみた

ブロガーのマネタイズとして一般的になってきたnote。 ただブログで記事を書いたところで、おいらのようなアラフィフサラリーマンじゃー課金してくれるわけがない。 なので、おいらの大きな武器であるプログラ …

no image

ベクタープロレジ大賞

Vectorがやってる、もっとも人気のあったダウンロードソフトを決める賞です。 Vectorと言えば、フリーウェアやシェアウェアをダウンロードできるところで一番有名なところです。窓の杜というところもあ …