2017-05-11 73 views
0

Word(2013)文書の一部をJavaで保護し、読み取り専用にする必要があります。 Apache POIで可能でしょうか?そしてもしそうなら、どうですか? 私は文書全体を保護する可能性しか見つけませんでした。Apache POIで単語文書の一部を保護する方法

(私は、ヘッダーとフッターだけでなく、体の部分でいくつかの行だけでなく、保護する必要があります。)

+1

MS Wordでこれをどうやってやりますか? – jmarkmurphy

+0

「開発者」タブおよび「編集を制限する」を選択すると、文書の一部を「読み取り専用」として定義できます。 ( '編集の制限'と 'セクションの選択...'で、保護されるセクション/保護されないセクションを定義できます) – maria

答えて

1

あなたはWord文書で施行できる保護複数の種類があります。読み取り専用保護を実施している場合は、範囲を保護から除外するには、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

@マリア:それはまさに質問が明確である必要がある理由です。だから問題があり、次の質問があれば、**あなたがすでに持っているものの[短く、自己完結型、正しい(コンパイル可能な)、例文(http://sscce.org/)どこに問題があるのか​​正確に説明します。 –

関連する問題