Paragraphオブジェクトの場合、Open XML SDK 2.0 for Microsoft Officeを使用して、これがどのページにあるかをどのように判断できますか?
6843 次
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 に答える