2015-11-03 278 views
0

“权限区域”是什么意思?您可以通过将文档设置为只读来保护整个文档,但可以保留可以编辑的区域。Apache POI在.docx文件中设置权限区域

我想在某些.docx文档中定义许可区域。据我所知,POI库中没有用于执行此操作的API - 我唯一发现的是CTP类中的相关方法,但我不知道如何使用它。我的目标是包括一个或多个XWPFRun进入许可区域产生类似:

<w:permStart w:edGrp="everyone" w:id="1371696447"/> 
<w:r> 
    <w:rPr> 
     <w:sz w:val="28"/> 
     <w:szCs w:val="28"/> 
     <w:lang w:val="cs-CZ"/> 
    </w:rPr> 
    <w:t>test3</w:t> 
</w:r> 
<w:permEnd w:id="1371696447"/> 

我该怎么办呢?

回答

0

嗯,我找到了解决方案。我不知道,如果这是最好的办法,但它对我来说很好:

// get DOM nodes of paragraph containing target run 
// and run itself 
Node paragraphNode = paragraph.getCTP().getDomNode(); 
Node runNode = run.getCTR().getDomNode(); 

// generate random id for perm region 
String id = Integer.toString(this.random.nextInt()); 

// create starting node, set id and who can edit it 
CTPermStart permStart = paragraph.getCTP().addNewPermStart(); 
permStart.setId(id); 
permStart.setEdGrp(STEdGrp.EVERYONE); 
Node permStartNode = permStart.getDomNode(); 

// create ending node and set id 
CTPerm permEnd = paragraph.getCTP().addNewPermEnd(); 
permEnd.setId(id); 
Node permEndNode = permEnd.getDomNode(); 

// enclose target run with created start/end nodes 
paragraphNode.insertBefore(permStartNode, runNode); 
paragraphNode.insertBefore(permEndNode, runNode.getNextSibling());