5

Paragraphオブジェクトの場合、Open XML SDK 2.0 for Microsoft Officeを使用して、これがどのページにあるかをどのように判断できますか?

4

3 に答える 3

6

OpanXml Sdkこれはクライアント (MS Word など) によって処理されるため、Word 文書のページ番号を取得することはできません。

ただし、作業中のドキュメントがワード クライアントによって以前に開かれ、保存されていた場合、クライアントは改 LastRenderedPageBreakページを識別するために追加します。s の詳細については、こちらの回答を参照してくださいLastRenderedPageBreak。これによりLastRenderedPageBreak、段落の前の要素の数をカウントして、現在のページ数を取得できます。

そうでない場合、要件を回避するためのオプションは、ページ番号付きのフッターを追加することです (ドキュメントを事実上非表示にするために、ドキュメントと同じ色にすることもできます!)。オプションのみ - を使用して Word ドキュメントの生成を自動化している場合OpenXML sdk

于 2013-02-18T13:16:17.957 に答える
2

@Flowerking:情報をありがとう。

特定の文字列を検索するには、とにかくすべての段落をループする必要があるため、次のコードを使用してページ番号を見つけることができます。

using (var document = WordprocessingDocument.Open(@"c:\test.docx", false))
{
    var paragraphInfos = new List<ParagraphInfo>();

    var paragraphs = document.MainDocumentPart.Document.Descendants<Paragraph>();

    int pageIdx = 1;
    foreach (var paragraph in paragraphs)
    {
        var run = paragraph.GetFirstChild<Run>();

        if (run != null)
        {
            var lastRenderedPageBreak = run.GetFirstChild<LastRenderedPageBreak>();
            var pageBreak = run.GetFirstChild<Break>();
            if (lastRenderedPageBreak != null || pageBreak != null)
            {
                pageIdx++;
            }
        }

        var info = new ParagraphInfo
        {
            Paragraph = paragraph,
            PageNumber = pageIdx
        };

        paragraphInfos.Add(info);
    }

    foreach (var info in paragraphInfos)
    {
        Console.WriteLine("Page {0}/{1} : '{2}'", info.PageNumber, pageIdx, info.Paragraph.InnerText);
    }
}
于 2013-02-18T20:42:14.767 に答える