*

[C#, iTextsharp]PDFClearBlankToText PDFのテキストを読み込んで空白削除する

使用は自己責任でお願いします。

◆概要
前回のBlankClearのあとにPDFからコピペが面倒だし、
長いファイルだとさらに面倒だ。
というわけで直接読むことに。
PDFをC#で読むときのサンプルにもなるじゃないでしょうか。
GUIは面倒なのでポトペタです。

◆仕様
.NET Framework 4.5以上
言語はC#
iTextSharpを利用

◆使い方
InputにPDFを指定。
Outputに出力先のファイル名を指定。
DoubleByteにチェックを入れると、全角空白も削除します。

◆イメージ
PDFClearBlankToText

◆ソース

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PDFClearBlankToText {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private string FileSearch(string title, bool checkFileExist) {
            string result = "";

            OpenFileDialog dialog = new OpenFileDialog();

            // すべてのファイルを選択しておく
            dialog.FilterIndex = 2;

            dialog.Title = title;

            // 次回も同じディレクトリを開くように設定
            dialog.RestoreDirectory = true;

			// 入力ファイルは存在することを、出力ファイルは存在しないことを確認
			dialog.CheckFileExists = checkFileExist;

            if (dialog.ShowDialog() == DialogResult.OK) {
                result = dialog.FileName;
            }

            return result;
        }

		private string FileSearch(string title) {
			return FileSearch(title, true);
		}
        
        private void button1_Click(object sender, EventArgs e) {
            textBoxInput.Text = FileSearch("入力ファイルを指定");
        }

        private void button2_Click(object sender, EventArgs e) {
            textBoxOutput.Text = FileSearch("出力ファイルを指定", false);
        }

		private void button3_Click(object sender, EventArgs e) {
			bool error = false;
			string msg = "Process Successful";

			if ("".Equals(textBoxInput.Text) || "".Equals(textBoxOutput.Text)) {
				error = true;
				msg = "Error!! ファイルを指定してください";
			}

			if (!error) {
				try {
					HandlePDF hPDF = new HandlePDF(checkBoxDoubleByte.Checked);
					hPDF.ClearBlankToOutput(textBoxInput.Text, textBoxOutput.Text);
				}catch (Exception exep) {
					msg = "Error!! " + exep;
				}
			}
			MessageBox.Show(msg);
		}
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using System.IO;

namespace PDFClearBlankToText {
    class HandlePDF {
		private bool DoubleByteBlankClear { get; set; }

		public HandlePDF() : this(false) { }
		public HandlePDF(bool doubleByteBlankClear) {
			DoubleByteBlankClear = doubleByteBlankClear;
		}

        public void ClearBlankToOutput(string input, string output) {
			string inputStr = ReadToEnd(input);
			BlankClear blankClear = new BlankClear(DoubleByteBlankClear);
			string outputStr = blankClear.GetNothingBlankText(inputStr);

			using(StreamWriter writer = new StreamWriter(output,false)){
				writer.Write(outputStr);
				writer.Close();
			}
        }

        private string ReadToEnd(string input) {
            StringBuilder builder = new StringBuilder();

            using (PdfReader reader = new PdfReader(input)) {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

				//Page
                for (int i = 1; i <= reader.NumberOfPages; i++) {
					string curPage = PdfTextExtractor.GetTextFromPage(reader, i, strategy);
					builder.Append(curPage);

					/* もし一行ずつ読みたいならこちらを挿入し、直上のbuilder.Append(curPage);を削除
					string[] lineSet = curPage.Split('\n');
					foreach (string line in lineSet) {
						builder.Append(line);
					}
					 */
                }
				reader.Close();
            }

			return builder.ToString();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFClearBlankToText {
	class BlankClear {
		private bool DoubleByteBlankClear { get; set; }

		public BlankClear() : this(false){ }
		
		public BlankClear(bool doubleByteBlankClear) {
			DoubleByteBlankClear = doubleByteBlankClear;
		}

		public string GetNothingBlankText(string input) {
			StringBuilder builder = new StringBuilder();

			foreach (char c in input) {
				if (c != ' ') {
					if (!DoubleByteBlankClear) {
						builder.Append(c);
					} else {
						if (c != ' ') {
							builder.Append(c);
						}
					}
				}
			}

			return builder.ToString();
		}
	}
}

◆ソース解説
あとで。

◆Download
PDFClearBlankToText



◇AppStore無料ランキング1位獲得!!

ad

関連記事

Unity_

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する

前回の続き。 さて、そろそろパズドラみたいにパズルを消すロジックを考えていきましょう。 パズ

記事を読む

logo

[Unity]Unity2Dチュートリアル 同じ色のパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collecti

記事を読む

Unity_

[Unity]Unity2Dでパズドラのようにタイルを動かす

今回からスクリプトがかなり難しくなってくるかも。 前回の続き。 というわけで前回はドラッグで

記事を読む

logo

[C#]拡張メソッドとリフレクションで列挙体に設定した文字列を表示

前に書いた、列挙体の文字列を返すための書き方。 文字列と列挙体を少しでも近い位置に書きたいときに。

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを左下から取得する ソース解説

◆全文 public class GameSystem : MonoBehaviour {

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル 繰り返しパズルを消す その2

Unityまとめページはこちら。 前回の続き。 準備が出来たので、ソースを変更致しましょ

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを左下から取得する

前回、画面上のオブジェクトを一括で手に入れる方法はわかりました。 しかし、これではどのオブジェクト

記事を読む

logo

[Unity]Unity2Dでパズドラのようにタイルを動かす ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する

前回の続き。 前回で横に同じ色がある場合は消去できるようになりました。 テトリスとぷよぷよを足し

記事を読む

logo

[VSTO,Excel,C#]C#のアドインで現在起動しているExcelを取得する。

ExcelのアドインをC#で開発してるんですが、情報少ないですねぇ。 とりあえずMicrosoft

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑