2017-05-11 17 views
0

Java를 통해 내 Word (2013) 문서의 일부를 보호하고 읽기 전용으로 만들어야합니다. Apache POI에서 가능합니까? 그리고 그렇다면, 어떻게? 전체 문서를 보호 할 수있는 가능성을 발견했습니다.Apache POI로 단어 문서의 부분을 보호하는 방법

는 (필자는 머리글과 바닥 글뿐만 아니라 신체 부분에 몇 줄뿐만 아니라 보호해야합니다.) 당신이 Word 문서에 적용 할 수 있습니다 보호의 여러 종류가 있습니다

+1

MS Word에서 어떻게합니까? – jmarkmurphy

+0

'개발자'탭에서 '편집 제한'을 선택하면 문서의 일부분을 '읽기 전용'으로 정의 할 수 있습니다. ('편집 제한'및 '섹션 선택 ...'을 사용하여 보호/비보호 섹션을 정의 할 수 있습니다.) – maria

답변

1

. 읽기 전용 보호를 시행하는 경우 CTPermStartCTPerm을 사용하여 범위를 보호 대상에서 제외 할 수 있습니다.

예 :

import java.io.*; 

import org.apache.poi.wp.usermodel.*; 

import org.apache.poi.xwpf.usermodel.*; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPermStart; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STEdGrp; 

public class CreateWordPartialProtected { 

public static void main(String[] args) throws Exception { 

    XWPFDocument document= new XWPFDocument(); 

    // create header 
    XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT); 

    XWPFParagraph paragraph = header.createParagraph(); 
    paragraph.setAlignment(ParagraphAlignment.LEFT); 

    XWPFRun run = paragraph.createRun(); 
    run.setText("The page header:"); 

    // create footer 
    XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT); 

    paragraph = footer.createParagraph(); 
    paragraph.setAlignment(ParagraphAlignment.CENTER); 

    run = paragraph.createRun(); 
    run.setText("Page "); 
    paragraph.getCTP().addNewFldSimple().setInstr("PAGE \\* MERGEFORMAT"); 
    run = paragraph.createRun(); 
    run.setText(" of "); 
    paragraph.getCTP().addNewFldSimple().setInstr("NUMPAGES \\* MERGEFORMAT"); 

    // the body content 
    paragraph = document.createParagraph(); 
    run=paragraph.createRun(); 
    run.setText("This body part is protected."); 
    paragraph = document.createParagraph(); 

    // CTPermStart marking the start of unprotected range 
    CTPermStart ctPermStart = document.getDocument().getBody().addNewPermStart(); 
    ctPermStart.setEdGrp(STEdGrp.EVERYONE); 
    ctPermStart.setId("123456"); //note the Id 

    paragraph = document.createParagraph(); 
    run=paragraph.createRun(); 
    run.setText("This body part is not protected."); 

    // CTPerm marking the end of unprotected range 
    document.getDocument().getBody().addNewPermEnd().setId("123456"); //note the same Id 

    paragraph = document.createParagraph(); 

    paragraph = document.createParagraph(); 
    run=paragraph.createRun(); 
    run.setText("This body part is protected again."); 
    paragraph = document.createParagraph(); 

    document.enforceReadonlyProtection(); //enforce readonly protection 

    document.write(new FileOutputStream("CreateWordPartialProtected.docx")); 
    document.close(); 

} 
} 

당신이 양식 보호를 작성 시행하고 싶을 경우, 여러 섹션이 필요할 것이기 때문에, 그것은 더 복잡 할 것입니다.

+0

답변 해 주셔서 감사합니다. 실제로 나는 이미 문서가로드되어 나중에 보호 할 부분을 정의해야합니다. 나는 당신의 제안을 확인하고 내가 필요로하는 것으로 변환하려고 노력합니다. :) – maria

+0

@maria : 그것은 정확하게 질문들이 명확해야하는 이유입니다. 그래서 문제가 있고 다음 질문이 생기면, ** 당신이 이미 가지고있는 것의 [단편, 자기 포함, 수정 (Compilable), 예] (http://sscce.org/) 당신은 문제가있는 곳을 정확히 묘사합니다. –