0

画像を Word 文書に変換する OCR プログラムがあります。単語文書にはすべての画像のテキストが含まれており、それを個別のファイルに分割したいと考えています。

C#でこれを行う方法はありますか?

ありがとう

4

3 に答える 3

5

他の回答と同じですが、ドキュメントへの IEnumerator と拡張メソッドがあります。

static class PagesExtension {
    public static IEnumerable<Range> Pages(this Document doc) {
        int pageCount = doc.Range().Information[WdInformation.wdNumberOfPagesInDocument];
        int pageStart = 0;
        for (int currentPageIndex = 1; currentPageIndex <= pageCount; currentPageIndex++) {
            var page = doc.Range(
                pageStart
            );
            if (currentPageIndex < pageCount) {
                //page.GoTo returns a new Range object, leaving the page object unaffected
                page.End = page.GoTo(
                    What: WdGoToItem.wdGoToPage,
                    Which: WdGoToDirection.wdGoToAbsolute,
                    Count: currentPageIndex+1
                ).Start-1;
            } else {
                page.End = doc.Range().End;
            }
            pageStart = page.End + 1;
            yield return page;
        }
        yield break;
    }
}

メインコードは次のようになります。

static void Main(string[] args) {
    var app = new Application();
    app.Visible = true;
    var doc = app.Documents.Open(@"path\to\source\document");
    foreach (var page in doc.Pages()) {
        page.Copy();
        var doc2 = app.Documents.Add();
        doc2.Range().Paste();
    }
}
于 2012-08-02T07:01:59.053 に答える
4

Word がインストールされている場合は、Word オブジェクト モデルを使用して C# から Word 文書を操作できます。

まず、Word オブジェクト モデルへの参照を追加します。次に、プロジェクトを右クリックしますAdd Reference... -> COM -> Microsoft Word 14.0 Object Model(または、Word のバージョンに応じて同様のもの)。

次に、次のコードを使用できます。

using Microsoft.Office.Interop.Word;
//for older versions of Word use:
//using Word;

namespace WordSplitter {
    class Program {
        static void Main(string[] args) {
            //Create a new instance of Word
            var app = new Application();

            //Show the Word instance.
            //If the code runs too slowly, you can show the application at the end of the program
            //Make sure it works properly first; otherwise, you'll get an error in a hidden window
            //(If it still runs too slowly, there are a few other ways to reduce screen updating)
            app.Visible = true;

            //We need a reference to the source document
            //It should be possible to get a reference to an open Word document, but I haven't tried it
            var doc = app.Documents.Open(@"path\to\file.doc");
            //(Can also use .docx)

            int pageCount = doc.Range().Information[WdInformation.wdNumberOfPagesInDocument];

            //We'll hold the start position of each page here
            int pageStart = 0;

            for (int currentPageIndex = 1; currentPageIndex <= pageCount; currentPageIndex++) {
                //This Range object will contain each page.
                var page = doc.Range(pageStart);

                //Generally, the end of the current page is 1 character before the start of the next.
                //However, we need to handle the last page -- since there is no next page, the 
                //GoTo method will move to the *start* of the last page.
                if (currentPageIndex < pageCount) {
                    //page.GoTo returns a new Range object, leaving the page object unaffected
                    page.End = page.GoTo(
                        What: WdGoToItem.wdGoToPage,
                        Which: WdGoToDirection.wdGoToAbsolute,
                        Count: currentPageIndex + 1
                    ).Start - 1;
                } else {
                    page.End = doc.Range().End;
                }
                pageStart = page.End + 1;

                //Copy and paste the contents of the Range into a new document
                page.Copy();
                var doc2 = app.Documents.Add();
                doc2.Range().Paste();
            }
        }
    }
}

参照: MSDN の Word オブジェクト モデルの概要

于 2012-08-02T06:56:03.267 に答える
0

Word は w:lastRenderedPageBreak を使用してドキュメントを作成しますが、Word ドキュメントの最後では簡単ではありません。

OCR プログラムで、変換されたテキストの各ブロックの間にマーカーをドキュメントに挿入することをお勧めします。

次に、Word 文書の種類に応じて、適切なツールでファイルを処理します。

于 2012-08-01T22:18:48.300 に答える