
Cuando los desarrolladores oyen "proteger un documento de Word", lo primero que suele venir a la mente es el cifrado: establecer una contraseña para que nadie pueda abrir el archivo. Pero existe una segunda capa de seguridad de documentos, igualmente importante: restringir lo que un lector puede hacer una vez que el documento está abierto. Una plantilla de contrato enviada a un cliente debería permitirle rellenar los espacios en blanco sin alterar los términos acordados. Un borrador final que se distribuye para su revisión debería permitir comentarios pero bloquear las ediciones directas del cuerpo del texto. Estos escenarios requieren restricciones de edición, no cifrado con contraseña de apertura.
Spire.Doc for JavaScript lleva esta capacidad directamente al navegador mediante WebAssembly. Utilizando un sistema de archivos virtual (VFS) para gestionar fuentes y recursos de archivos, procesa documentos de Word completamente en el lado del cliente: sin servidor backend, sin carga de archivos, sin latencia de ida y vuelta. El método Protect acepta un valor de enumeración ProtectionType junto con una contraseña, y aplica la restricción de edición correspondiente al documento.
Este artículo repasa los cinco tipos de protección disponibles en Spire.Doc for JavaScript, los compara en una única tabla de referencia y, a continuación, muestra cómo aplicar un tipo de protección a todo el documento y cómo bloquear solo secciones específicas dejando otras editables.
Protección vs. cifrado: dos objetivos diferentes
Antes de profundizar en los tipos de protección, conviene trazar una línea clara entre dos conceptos que con frecuencia se confunden:
- El cifrado (contraseña de apertura) controla quién puede abrir el documento. Sin la contraseña, no se puede acceder al contenido del archivo.
- Las restricciones de edición (tipo de protección) controlan qué puede cambiar un lector una vez que el documento ya está abierto. El lector puede ver el contenido libremente; la restricción limita qué acciones de edición están disponibles.
Las restricciones de edición no impiden la selección, la copia ni la búsqueda: solo bloquean las modificaciones. Si tu objetivo es evitar que el contenido se extraiga, necesitas cifrado. Si tu objetivo es evitar que el contenido se modifique sin dejar de permitir su lectura, necesitas una restricción de edición. Ambos mecanismos son complementarios y pueden usarse juntos, pero cumplen propósitos distintos.
Tipos de protección de un vistazo
Spire.Doc for JavaScript expone cinco valores de enumeración ProtectionType. Cada uno define un ámbito editable diferente, desde totalmente abierto hasta totalmente bloqueado. La siguiente tabla resume los cinco para que puedas elegir el adecuado de un vistazo.
| ProtectionType | Efecto en el documento | Caso de uso típico |
|---|---|---|
NoProtection |
No se aplica ninguna restricción; todas las acciones de edición están disponibles. | Eliminar una restricción existente o comenzar desde un estado limpio. |
AllowOnlyReading |
El documento se puede ver pero no editar. Los comandos de edición de la cinta de opciones están deshabilitados. | Informes finales, avisos publicados o cualquier entregable de solo lectura. |
AllowOnlyComments |
Los lectores pueden añadir comentarios pero no modificar el cuerpo del texto. | Ciclos de revisión en los que los revisores deben dejar comentarios sin alterar el contenido. |
AllowOnlyFormFields |
Solo los campos de formulario son editables; el resto del documento está bloqueado. | Contratos, encuestas y plantillas con áreas para rellenar espacios en blanco. |
AllowOnlyRevisions |
Todas las ediciones se aceptan como cambios registrados y pueden revisarse posteriormente. | Redacción colaborativa en la que cada cambio debe ser visible y reversible. |
Cómo elegir: Si el lector no debe cambiar nada, usa AllowOnlyReading. Si el lector solo debe rellenar espacios designados, usa AllowOnlyFormFields. Si el lector debe dejar comentarios sin tocar el texto, usa AllowOnlyComments. Si cada cambio debe registrarse para revisarlo posteriormente, usa AllowOnlyRevisions. Si necesitas eliminar una restricción aplicada previamente, usa NoProtection.
Aplicar un tipo de protección a todo el documento
El enfoque más directo es proteger todo el documento con un único valor de ProtectionType. El flujo de trabajo tiene tres etapas: cargar los archivos de fuentes y el documento de Word de destino en el sistema de archivos virtual de WASM mediante FetchFileToVFS; instanciar un Document, cargar el archivo y llamar a Protect con el tipo de protección deseado y la contraseña que posteriormente levantará la restricción; luego guardar el documento, leer el archivo generado desde el VFS, envolverlo como un Blob y desencadenar una descarga en el navegador.
El ejemplo siguiente usa AllowOnlyReading, pero puedes sustituirlo por cualquiera de los cinco valores de ProtectionType de la tabla anterior.
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;
Una vez que el documento está protegido con el tipo AllowOnlyReading, su contenido solo se puede visualizar y los comandos de edición de la cinta de opciones quedan restringidos.

Bloquear solo secciones específicas
Proteger todo el documento de forma uniforme funciona bien para entregables sencillos, pero muchos documentos del mundo real necesitan un ajuste más fino. Una plantilla de presupuesto, por ejemplo, puede tener términos fijos que deben permanecer bloqueados junto a una sección donde el cliente introduce sus datos. Spire.Doc for JavaScript lo resuelve combinando la protección de todo el documento con anulaciones por sección.
La estrategia es: primero proteger todo el documento con AllowOnlyFormFields, y luego establecer en false la propiedad ProtectForm de cualquier sección que deba permanecer editable. Esto libera selectivamente secciones individuales mientras el resto del documento permanece bloqueado.
El flujo de trabajo tiene tres etapas: cargar los archivos de fuentes en el sistema de archivos virtual de WASM mediante FetchFileToVFS; instanciar un Document, crear secciones con AddSection y escribir contenido en ellas, llamar a Protect para bloquear todo el documento solo para campos de formulario, y establecer ProtectForm en false en la sección que se va a liberar; luego guardar el documento, leer el archivo generado desde el VFS, envolverlo como un Blob y desencadenar una descarga en el 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;
Una vez liberada la sección 2, solo la sección 1 conserva su restricción de edición en el documento.

Preguntas frecuentes
Una sección sigue sin ser editable después de ProtectForm = false
La propiedad ProtectForm solo surte efecto cuando el documento se ha protegido con AllowOnlyFormFields. Si está activo un tipo de protección diferente, como AllowOnlyReading, establecer ProtectForm en false en una sección individual no la liberará: la restricción de todo el documento tiene prioridad.
Para solucionarlo, asegúrate de que el tipo de protección pasado a Protect sea AllowOnlyFormFields antes de liberar secciones individuales:
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyFormFields, password: "123" });
s2.ProtectForm = false;
Un documento protegido todavía se puede seleccionar y copiar
Los cinco tipos de protección restringen el comportamiento de edición, no el de lectura. AllowOnlyReading, por ejemplo, impide cambios en el cuerpo del texto pero no bloquea la selección, la copia ni la búsqueda de texto. Es algo deliberado: las restricciones de edición controlan lo que los usuarios pueden modificar, no lo que pueden ver o extraer.
Si el contenido no debe poder copiarse ni ser visto por usuarios no autorizados, utiliza el cifrado de documentos (una contraseña de apertura) en lugar de una restricción de edición. Ambos enfoques abordan amenazas distintas y pueden combinarse cuando se requiere tanto confidencialidad como control de edición:
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyReading, password: "123456" });