Java를 통해 내 Word (2013) 문서의 일부를 보호하고 읽기 전용으로 만들어야합니다. Apache POI에서 가능합니까? 그리고 그렇다면, 어떻게? 전체 문서를 보호 할 수있는 가능성을 발견했습니다.Apache POI로 단어 문서의 부분을 보호하는 방법
는 (필자는 머리글과 바닥 글뿐만 아니라 신체 부분에 몇 줄뿐만 아니라 보호해야합니다.) 당신이 Word
문서에 적용 할 수 있습니다 보호의 여러 종류가 있습니다
Java를 통해 내 Word (2013) 문서의 일부를 보호하고 읽기 전용으로 만들어야합니다. Apache POI에서 가능합니까? 그리고 그렇다면, 어떻게? 전체 문서를 보호 할 수있는 가능성을 발견했습니다.Apache POI로 단어 문서의 부분을 보호하는 방법
는 (필자는 머리글과 바닥 글뿐만 아니라 신체 부분에 몇 줄뿐만 아니라 보호해야합니다.) 당신이 Word
문서에 적용 할 수 있습니다 보호의 여러 종류가 있습니다
. 읽기 전용 보호를 시행하는 경우 CTPermStart 및 CTPerm을 사용하여 범위를 보호 대상에서 제외 할 수 있습니다.
예 :
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();
}
}
당신이 양식 보호를 작성 시행하고 싶을 경우, 여러 섹션이 필요할 것이기 때문에, 그것은 더 복잡 할 것입니다.
답변 해 주셔서 감사합니다. 실제로 나는 이미 문서가로드되어 나중에 보호 할 부분을 정의해야합니다. 나는 당신의 제안을 확인하고 내가 필요로하는 것으로 변환하려고 노력합니다. :) – maria
@maria : 그것은 정확하게 질문들이 명확해야하는 이유입니다. 그래서 문제가 있고 다음 질문이 생기면, ** 당신이 이미 가지고있는 것의 [단편, 자기 포함, 수정 (Compilable), 예] (http://sscce.org/) 당신은 문제가있는 곳을 정확히 묘사합니다. –
MS Word에서 어떻게합니까? – jmarkmurphy
'개발자'탭에서 '편집 제한'을 선택하면 문서의 일부분을 '읽기 전용'으로 정의 할 수 있습니다. ('편집 제한'및 '섹션 선택 ...'을 사용하여 보호/비보호 섹션을 정의 할 수 있습니다.) – maria