Proteja documentos do Word com JavaScript: restrinja a edição

2026-09-30 09:24:23 Allen Yang
AI Summarize:
ChatGPT
ChatGPT ✓
Claude ✓
Grok ✓
Perplexity ✓
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

O documento após a proteção com o tipo AllowOnlyReading

Quando os desenvolvedores ouvem "proteger um documento do Word", a primeira coisa que costuma vir à mente é a criptografia — definir uma senha para que ninguém consiga abrir o arquivo. Mas existe uma segunda camada de segurança de documentos, igualmente importante: restringir o que um leitor pode fazer depois que o documento está aberto. Um modelo de contrato enviado a um cliente deve permitir que ele preencha as lacunas sem alterar os termos acordados. Um rascunho final circulado para revisão deve permitir comentários, mas bloquear edições diretas no corpo do texto. Esses cenários exigem restrições de edição, não criptografia com senha de abertura.

Spire.Doc for JavaScript traz essa capacidade diretamente para o navegador por meio do WebAssembly. Usando um sistema de arquivos virtual (VFS) para gerenciar fontes e recursos de arquivo, ele processa documentos do Word inteiramente no lado do cliente — sem servidor back-end, sem upload de arquivo, sem latência de ida e volta. O método Protect aceita um valor de enumeração ProtectionType junto com uma senha e aplica a restrição de edição correspondente ao documento.

Este artigo apresenta os cinco tipos de proteção disponíveis no Spire.Doc for JavaScript, compara-os em uma única tabela de referência e, em seguida, demonstra como aplicar um tipo de proteção ao documento inteiro e como bloquear apenas seções específicas, deixando as demais editáveis.


Proteção vs. Criptografia: dois objetivos diferentes

Antes de mergulhar nos tipos de proteção, vale traçar uma linha clara entre dois conceitos que são frequentemente confundidos:

  • Criptografia (senha de abertura) controla quem pode abrir o documento. Sem a senha, o conteúdo do arquivo fica inacessível.
  • Restrições de edição (tipo de proteção) controlam o que um leitor pode alterar depois que o documento já está aberto. O leitor pode visualizar o conteúdo livremente; a restrição limita quais ações de edição estão disponíveis.

As restrições de edição não impedem a seleção, a cópia ou a pesquisa — elas apenas bloqueiam modificações. Se o seu objetivo é impedir que o conteúdo seja levado embora, você precisa de criptografia. Se o seu objetivo é impedir que o conteúdo seja alterado, permitindo ainda que ele seja lido, você precisa de uma restrição de edição. Os dois mecanismos são complementares e podem ser usados juntos, mas atendem a propósitos distintos.


Tipos de proteção em resumo

O Spire.Doc for JavaScript expõe cinco valores de enumeração ProtectionType. Cada um deles define um escopo editável diferente — de totalmente aberto a totalmente bloqueado. A tabela abaixo resume todos os cinco para que você possa escolher o certo num relance.

ProtectionType Efeito no documento Caso de uso típico
NoProtection Nenhuma restrição aplicada; todas as ações de edição estão disponíveis. Remover uma restrição existente ou começar de um estado limpo.
AllowOnlyReading O documento pode ser visualizado, mas não editado. Os comandos de edição da faixa de opções ficam desabilitados. Relatórios finais, avisos publicados ou qualquer entrega somente leitura.
AllowOnlyComments Os leitores podem adicionar comentários, mas não podem modificar o corpo do texto. Ciclos de revisão em que os revisores devem deixar feedback sem alterar o conteúdo.
AllowOnlyFormFields Apenas os campos de formulário são editáveis; o restante do documento fica bloqueado. Contratos, pesquisas e modelos com áreas para preenchimento.
AllowOnlyRevisions Todas as edições são aceitas como alterações controladas e podem ser revisadas posteriormente. Redação colaborativa em que cada alteração deve ser visível e reversível.

Como escolher: Se o leitor não deve alterar nada, use AllowOnlyReading. Se o leitor deve preencher apenas os espaços designados, use AllowOnlyFormFields. Se o leitor deve deixar feedback sem tocar no texto, use AllowOnlyComments. Se cada alteração deve ser controlada para revisão posterior, use AllowOnlyRevisions. Se você precisa remover uma restrição aplicada anteriormente, use NoProtection.


Aplicar um tipo de proteção ao documento inteiro

A abordagem mais direta é proteger o documento inteiro com um único valor de ProtectionType. O fluxo de trabalho tem três estágios: carregar os arquivos de fonte e o documento do Word de destino no sistema de arquivos virtual do WASM via FetchFileToVFS; instanciar um Document, carregar o arquivo e chamar Protect com o tipo de proteção desejado e a senha que posteriormente removerá a restrição; depois salvar o documento, ler o arquivo gerado do VFS, envolvê-lo como um Blob e disparar o download pelo navegador.

O exemplo abaixo usa AllowOnlyReading, mas você pode substituí-lo por qualquer um dos cinco valores de ProtectionType da tabela acima.

function App() {
  const protectWithSpecifiedType = async () => {
    const docModule = window.wasmModule?.spiredoc;
    if (!docModule) {
      alert('Spire.Doc is not ready yet');
      return;
    }

    const inputFileName = 'Template.docx';
    await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/data/`);

    // Load the document
    const doc = new docModule.Document();
    doc.LoadFromFile(inputFileName);

    // Protect the document with the "AllowOnlyReading" type; the password lifts the restriction
    doc.Protect({ type: docModule.ProtectionType.AllowOnlyReading, password: "123456" });

    // Define the output file name and save
    const outputFileName = "SpecifiedProtectionType.docx";
    doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.Docx2013 });
    doc.Dispose();

    const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
    const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = outputFileName;
    a.click();
    URL.revokeObjectURL(url);
  };

 return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>Protect a Document with a Specified Type</h1>
      <button onClick={protectWithSpecifiedType}>Generate</button>
    </div>
  );
}
export default App;

Depois que o documento é protegido com o tipo AllowOnlyReading, seu conteúdo só pode ser visualizado e os comandos de edição na faixa de opções ficam restritos.

O documento após a proteção com o tipo AllowOnlyReading


Bloquear apenas seções especificadas

Proteger o documento inteiro de forma uniforme funciona bem para entregas simples, mas muitos documentos do mundo real exigem um cuidado mais refinado. Um modelo de orçamento, por exemplo, pode ter termos fixos que devem permanecer bloqueados ao lado de uma seção em que o cliente insere seus dados. O Spire.Doc for JavaScript resolve isso combinando a proteção do documento inteiro com substituições por seção.

A estratégia é: primeiro proteger o documento inteiro com AllowOnlyFormFields, depois definir a propriedade ProtectForm de qualquer seção que deva permanecer editável como false. Isso libera seletivamente seções individuais enquanto o restante do documento permanece bloqueado.

O fluxo de trabalho tem três estágios: carregar os arquivos de fonte no sistema de arquivos virtual do WASM via FetchFileToVFS; instanciar um Document, criar seções com AddSection e escrever conteúdo nelas, chamar Protect para bloquear o documento inteiro apenas para campos de formulário e definir ProtectForm como false na seção a ser liberada; depois salvar o documento, ler o arquivo gerado do VFS, envolvê-lo como um Blob e disparar o download pelo navegador.

function App() {
  const lockSpecifiedSections = async () => {
    const docModule = window.wasmModule?.spiredoc;
    if (!docModule) {
      alert('Spire.Doc is not ready yet');
      return;
    }

    // Create a new document and add two sections
    const doc = new docModule.Document();
    let s1 = doc.AddSection();
    let s2 = doc.AddSection();

    // Write content into each of the two sections
    s1.AddParagraph().AppendText("Spire.Doc demo, section 1");
    s2.AddParagraph().AppendText("Spire.Doc demo, section 2");

    // Protect the whole document for form fields only
    doc.Protect({ type: docModule.ProtectionType.AllowOnlyFormFields, password: "123" });

    // Release section 2 on its own so that it can be edited
    s2.ProtectForm = false;

    // Define the output file name and save
    const outputFileName = 'LockSpecifiedSections.docx';
    doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.Docx2013 });
    doc.Dispose();

    const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
    const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = outputFileName;
    a.click();
    URL.revokeObjectURL(url);
  };

 return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>Lock Specified Sections of a Word Document</h1>
      <button onClick={lockSpecifiedSections}>Generate</button>
    </div>
  );
}
export default App;

Depois que a seção 2 foi liberada, apenas a seção 1 mantém sua restrição de edição no documento.

O documento após apenas as seções especificadas serem bloqueadas


Perguntas frequentes

Uma seção ainda não é editável após ProtectForm = false

A propriedade ProtectForm só tem efeito quando o documento foi protegido com AllowOnlyFormFields. Se um tipo de proteção diferente, como AllowOnlyReading, estiver ativo, definir ProtectForm como false em uma seção individual não a liberará — a restrição do documento inteiro tem precedência.

Para corrigir isso, certifique-se de que o tipo de proteção passado para Protect seja AllowOnlyFormFields antes de liberar seções individuais:

doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyFormFields, password: "123" });
s2.ProtectForm = false;

Um documento protegido ainda pode ser selecionado e copiado

Todos os cinco tipos de proteção restringem o comportamento de edição, não o de leitura. O AllowOnlyReading, por exemplo, impede alterações no corpo do texto, mas não bloqueia a seleção, a cópia ou a pesquisa de texto. Isso é intencional — as restrições de edição controlam o que os usuários podem modificar, não o que eles podem visualizar ou extrair.

Se o conteúdo não deve ser copiável ou visível por usuários não autorizados, use a criptografia de documento (uma senha de abertura) em vez de uma restrição de edição. As duas abordagens tratam ameaças diferentes e podem ser combinadas quando tanto a confidencialidade quanto o controle de edição forem necessários:

doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyReading, password: "123456" });

Veja também