
Quando gli sviluppatori sentono parlare di "proteggere un documento Word", la prima cosa che spesso viene in mente è la crittografia — impostare una password in modo che nessuno possa aprire il file. Ma esiste un secondo livello di sicurezza del documento, altrettanto importante: limitare ciò che un lettore può fare una volta che il documento è aperto. Un modello di contratto inviato a un cliente dovrebbe permettergli di compilare gli spazi vuoti senza modificare i termini concordati. Una bozza finale fatta circolare per la revisione dovrebbe consentire i commenti ma bloccare le modifiche dirette al testo del corpo. Questi scenari richiedono restrizioni di modifica, non la crittografia con password di apertura.
Spire.Doc for JavaScript porta questa funzionalità direttamente nel browser tramite WebAssembly. Utilizzando un file system virtuale (VFS) per gestire i font e le risorse dei file, elabora i documenti Word interamente sul lato client — nessun server backend, nessun caricamento di file, nessuna latenza di andata e ritorno. Il metodo Protect accetta un valore di enumerazione ProtectionType insieme a una password e applica la restrizione di modifica corrispondente al documento.
Questo articolo esamina i cinque tipi di protezione disponibili in Spire.Doc for JavaScript, li confronta in un'unica tabella di riferimento e poi mostra come applicare un tipo di protezione all'intero documento e come bloccare solo sezioni specifiche lasciandone altre modificabili.
Protezione vs. crittografia: due obiettivi diversi
Prima di addentrarci nei tipi di protezione, vale la pena tracciare una linea netta tra due concetti che vengono spesso confusi:
- Crittografia (password di apertura) controlla chi può aprire il documento. Senza la password, il contenuto del file è inaccessibile.
- Restrizioni di modifica (tipo di protezione) controllano cosa può modificare un lettore dopo che il documento è già aperto. Il lettore può visualizzare liberamente il contenuto; la restrizione limita quali azioni di modifica sono disponibili.
Le restrizioni di modifica non impediscono la selezione, la copia o la ricerca — bloccano solo le modifiche. Se il tuo obiettivo è impedire che il contenuto venga portato via, hai bisogno della crittografia. Se il tuo obiettivo è impedire che il contenuto venga modificato pur consentendone la lettura, hai bisogno di una restrizione di modifica. I due meccanismi sono complementari e possono essere usati insieme, ma servono scopi distinti.
I tipi di protezione a colpo d'occhio
Spire.Doc for JavaScript espone cinque valori di enumerazione ProtectionType. Ognuno definisce un diverso ambito modificabile — da completamente aperto a completamente bloccato. La tabella seguente li riassume tutti e cinque, così puoi scegliere quello giusto a colpo d'occhio.
| ProtectionType | Effetto sul documento | Caso d'uso tipico |
|---|---|---|
NoProtection |
Nessuna restrizione applicata; tutte le azioni di modifica sono disponibili. | Rimuovere una restrizione esistente o partire da uno stato pulito. |
AllowOnlyReading |
Il documento può essere visualizzato ma non modificato. I comandi di modifica della barra multifunzione sono disabilitati. | Report finali, avvisi pubblicati o qualsiasi documento di sola lettura. |
AllowOnlyComments |
I lettori possono aggiungere commenti ma non possono modificare il testo del corpo. | Cicli di revisione in cui i revisori dovrebbero lasciare feedback senza alterare il contenuto. |
AllowOnlyFormFields |
Solo i campi modulo sono modificabili; il resto del documento è bloccato. | Contratti, sondaggi e modelli con aree da compilare. |
AllowOnlyRevisions |
Tutte le modifiche vengono accettate come revisioni tracciate e possono essere riviste in seguito. | Stesura collaborativa in cui ogni modifica deve essere visibile e reversibile. |
Come scegliere: se il lettore non deve cambiare nulla, usa AllowOnlyReading. Se il lettore deve solo compilare gli spazi designati, usa AllowOnlyFormFields. Se il lettore deve lasciare feedback senza toccare il testo, usa AllowOnlyComments. Se ogni modifica deve essere tracciata per una revisione successiva, usa AllowOnlyRevisions. Se devi rimuovere una restrizione applicata in precedenza, usa NoProtection.
Applicare un tipo di protezione all'intero documento
L'approccio più semplice è proteggere l'intero documento con un unico valore ProtectionType. Il flusso di lavoro prevede tre fasi: caricare i file dei font e il documento Word di destinazione nel file system virtuale WASM tramite FetchFileToVFS; istanziare un Document, caricare il file e chiamare Protect con il tipo di protezione desiderato e la password che in seguito rimuoverà la restrizione; quindi salvare il documento, leggere il file generato dal VFS, racchiuderlo in un Blob e avviare il download dal browser.
L'esempio seguente usa AllowOnlyReading, ma puoi sostituirlo con uno qualsiasi dei cinque valori ProtectionType della tabella precedente.
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 volta che il documento è protetto con il tipo AllowOnlyReading, il suo contenuto può solo essere visualizzato e i comandi di modifica sulla barra multifunzione sono limitati.

Bloccare solo sezioni specifiche
Proteggere l'intero documento in modo uniforme funziona bene per documenti semplici, ma molti documenti reali richiedono un tocco più raffinato. Un modello di preventivo, ad esempio, può avere termini fissi che devono rimanere bloccati accanto a una sezione in cui il cliente inserisce i propri dati. Spire.Doc for JavaScript gestisce questa situazione combinando la protezione dell'intero documento con override per singola sezione.
La strategia è: proteggere prima l'intero documento con AllowOnlyFormFields, poi impostare su false la proprietà ProtectForm di qualsiasi sezione che deve rimanere modificabile. Questo sblocca selettivamente singole sezioni mentre il resto del documento rimane bloccato.
Il flusso di lavoro prevede tre fasi: caricare i file dei font nel file system virtuale WASM tramite FetchFileToVFS; istanziare un Document, creare sezioni con AddSection e scrivervi del contenuto, chiamare Protect per bloccare l'intero documento solo per i campi modulo e impostare ProtectForm su false nella sezione da sbloccare; quindi salvare il documento, leggere il file generato dal VFS, racchiuderlo in un Blob e avviare il download dal browser.
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 volta sbloccata la sezione 2, solo la sezione 1 mantiene la sua restrizione di modifica nel documento.

Domande frequenti
Una sezione non è ancora modificabile dopo ProtectForm = false
La proprietà ProtectForm ha effetto solo quando il documento è stato protetto con AllowOnlyFormFields. Se è attivo un tipo di protezione diverso, come AllowOnlyReading, impostare ProtectForm su false su una singola sezione non la sbloccherà — la restrizione sull'intero documento ha la precedenza.
Per risolvere, assicurati che il tipo di protezione passato a Protect sia AllowOnlyFormFields prima di sbloccare le singole sezioni:
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyFormFields, password: "123" });
s2.ProtectForm = false;
Un documento protetto può comunque essere selezionato e copiato
Tutti e cinque i tipi di protezione limitano il comportamento di modifica, non quello di lettura. AllowOnlyReading, per esempio, impedisce le modifiche al testo del corpo ma non blocca la selezione del testo, la copia o la ricerca. Questo è intenzionale — le restrizioni di modifica controllano ciò che gli utenti possono modificare, non ciò che possono visualizzare o estrarre.
Se il contenuto non deve essere copiabile o visualizzabile da utenti non autorizzati, usa la crittografia del documento (una password di apertura) invece di una restrizione di modifica. I due approcci affrontano minacce diverse e possono essere combinati quando sono richiesti sia la riservatezza che il controllo delle modifiche:
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyReading, password: "123456" });