私はApache POIを使用してMicrosoft Wordの.docxファイルを操作しています。つまり、もともとMicrosoft Wordで作成された文書を開き、変更して新しい文書に保存します。Apache POIを使用してWord .docxファイルでRSID属性を正しく生成する方法は?
私は、Apache POIによって作成された新しい段落がしばしばRSIDまたはrsidRとして知られ、リビジョン保存IDが欠落していることに注意してください。これは、Wordで1つのセッション、たとえば保存の間にドキュメントに加えられた変更を識別するために使用されます。オプションです。ユーザーは必要に応じてMicrosoft Wordでオフにすることができますが、実際にはほぼすべてのユーザーがこれを使用しているため、ほぼすべてのドキュメントがRSIDでいっぱいです。詳しくは、this excellent explanation of RSIDsをご覧ください。 Microsoft Word文書で
、word/document.xml
は次のように段落が含まれています
<w:p>
<w:r>
<w:t>Paragraph of text here.</w:t>
</w:r>
</w:p>
私がいることを考え出した:POIによって作成された同じ段落がword/document.xml
で次のようになります。しかし
<w:p w:rsidR="007809A1" w:rsidRDefault="007809A1" w:rsidP="00191825">
<w:r>
<w:t>Paragraph of text here.</w:t>
</w:r>
</w:p>
POIに次のようなコードを使用して各段落にRSIDを追加するように強制できます。
byte[] rsid = ???;
XWPFParagraph paragraph = document.createParagraph();
paragraph.getCTP().setRsidR(rsid);
paragraph.getCTP().setRsidRDefault(rsid);
しかし、私はどのように私はRSIDsを生成する必要がありますか分からない。
POIは、RSIDを取得する方法、または生成するか、追跡していますか?そうでない場合は、私が生成するRSIDがすでに文書にあるRSIDと矛盾しないようにする方法はありますか?
芸術家からあなたは参照しました: "彼らは完全にランダムであり、物事がどこに合っているかを見るためにのみ使われます。したがって、RSIDを持つ別のドキュメントとマージしない限り、あまり使用されません」適切な乱数を生成することができます。競合に関しては、それらのリストがプロパティパーツの1つに格納されます。 – JasonPlutext