
Quand les développeurs entendent « protéger un document Word », la première chose qui leur vient souvent à l’esprit est le chiffrement — définir un mot de passe pour que personne ne puisse ouvrir le fichier. Mais il existe une seconde couche de sécurité documentaire tout aussi importante : restreindre ce qu’un lecteur peut faire une fois le document ouvert. Un modèle de contrat envoyé à un client doit lui permettre de remplir les champs vides sans modifier les conditions convenues. Une version finale diffusée pour relecture doit autoriser les commentaires mais bloquer les modifications directes du corps de texte. Ces scénarios nécessitent des restrictions de modification, et non un chiffrement par mot de passe à l’ouverture.
Spire.Doc for JavaScript apporte cette fonctionnalité directement dans le navigateur via WebAssembly. En utilisant un système de fichiers virtuel (VFS) pour gérer les polices et les ressources de fichiers, il traite les documents Word entièrement côté client — pas de serveur backend, pas de téléversement de fichier, pas de latence d’aller-retour. La méthode Protect accepte une valeur d’énumération ProtectionType accompagnée d’un mot de passe, et applique la restriction de modification correspondante au document.
Cet article présente les cinq types de protection disponibles dans Spire.Doc for JavaScript, les compare dans un seul tableau de référence, puis montre comment appliquer un type de protection à l’ensemble du document et comment verrouiller uniquement des sections spécifiques tout en laissant les autres modifiables.
Protection ou chiffrement : deux objectifs différents
Avant d’examiner les types de protection, il convient d’établir une distinction claire entre deux concepts souvent confondus :
- Chiffrement (mot de passe à l’ouverture) contrôle qui peut ouvrir le document. Sans le mot de passe, le contenu du fichier est inaccessible.
- Restrictions de modification (type de protection) contrôlent ce qu’un lecteur peut modifier une fois le document déjà ouvert. Le lecteur peut consulter librement le contenu ; la restriction limite les actions de modification disponibles.
Les restrictions de modification n’empêchent pas la sélection, la copie ou la recherche — elles bloquent uniquement les modifications. Si votre objectif est d’empêcher que le contenu soit emporté, vous avez besoin du chiffrement. Si votre objectif est d’empêcher que le contenu soit modifié tout en permettant sa lecture, vous avez besoin d’une restriction de modification. Les deux mécanismes sont complémentaires et peuvent être utilisés ensemble, mais ils répondent à des objectifs distincts.
Types de protection en un coup d’œil
Spire.Doc for JavaScript expose cinq valeurs d’énumération ProtectionType. Chacune définit une portée modifiable différente — de totalement ouverte à totalement verrouillée. Le tableau ci-dessous résume les cinq afin que vous puissiez choisir la bonne en un coup d’œil.
| ProtectionType | Effet sur le document | Cas d’utilisation typique |
|---|---|---|
NoProtection |
Aucune restriction appliquée ; toutes les actions de modification sont disponibles. | Supprimer une restriction existante ou partir d’un état vierge. |
AllowOnlyReading |
Le document peut être consulté mais pas modifié. Les commandes de modification du ruban sont désactivées. | Rapports finaux, avis publiés ou tout livrable en lecture seule. |
AllowOnlyComments |
Les lecteurs peuvent ajouter des commentaires mais ne peuvent pas modifier le corps du texte. | Cycles de relecture où les relecteurs doivent laisser des retours sans altérer le contenu. |
AllowOnlyFormFields |
Seuls les champs de formulaire sont modifiables ; le reste du document est verrouillé. | Contrats, enquêtes et modèles comportant des zones à remplir. |
AllowOnlyRevisions |
Toutes les modifications sont enregistrées comme modifications suivies et peuvent être examinées ultérieurement. | Rédaction collaborative où chaque modification doit être visible et réversible. |
Comment choisir : Si le lecteur ne doit rien modifier, utilisez AllowOnlyReading. S’il doit uniquement remplir des champs prévus, utilisez AllowOnlyFormFields. S’il doit laisser un retour sans toucher au texte, utilisez AllowOnlyComments. Si chaque changement doit être suivi pour une relecture ultérieure, utilisez AllowOnlyRevisions. Si vous devez supprimer une restriction appliquée précédemment, utilisez NoProtection.
Appliquer un type de protection à l’ensemble du document
L’approche la plus simple consiste à protéger l’ensemble du document avec une seule valeur ProtectionType. Le flux de travail comporte trois étapes : charger les fichiers de police et le document Word cible dans le système de fichiers virtuel WASM via FetchFileToVFS ; instancier un Document, charger le fichier et appeler Protect avec le type de protection souhaité et le mot de passe qui lèvera ensuite la restriction ; puis enregistrer le document, lire le fichier généré depuis le VFS, l’encapsuler dans un Blob et déclencher un téléchargement dans le navigateur.
L’exemple ci-dessous utilise AllowOnlyReading, mais vous pouvez remplacer par n’importe laquelle des cinq valeurs ProtectionType du tableau ci-dessus.
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;
Une fois le document protégé avec le type AllowOnlyReading, son contenu peut uniquement être consulté et les commandes de modification du ruban sont restreintes.

Verrouiller uniquement les sections spécifiées
Protéger uniformément l’ensemble du document fonctionne bien pour des livrables simples, mais de nombreux documents réels nécessitent une approche plus fine. Un modèle de devis, par exemple, peut comporter des conditions fixes qui doivent rester verrouillées à côté d’une section où le client saisit ses informations. Spire.Doc for JavaScript gère cela en combinant une protection de l’ensemble du document avec des exceptions par section.
La stratégie est la suivante : protéger d’abord l’ensemble du document avec AllowOnlyFormFields, puis définir la propriété ProtectForm de toute section qui doit rester modifiable sur false. Cela libère sélectivement certaines sections tandis que le reste du document reste verrouillé.
Le flux de travail comporte trois étapes : charger les fichiers de police dans le système de fichiers virtuel WASM via FetchFileToVFS ; instancier un Document, créer des sections avec AddSection et y écrire du contenu, appeler Protect pour verrouiller tout le document aux seuls champs de formulaire, et définir ProtectForm sur false pour la section à libérer ; puis enregistrer le document, lire le fichier généré depuis le VFS, l’encapsuler dans un Blob et déclencher un téléchargement dans le navigateur.
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;
Une fois la section 2 libérée, seule la section 1 conserve sa restriction de modification dans le document.

FAQ
Une section n’est toujours pas modifiable après ProtectForm = false
La propriété ProtectForm ne prend effet que lorsque le document a été protégé avec AllowOnlyFormFields. Si un autre type de protection tel que AllowOnlyReading est actif, définir ProtectForm sur false pour une section individuelle ne la libérera pas — la restriction de l’ensemble du document est prioritaire.
Pour corriger cela, assurez-vous que le type de protection transmis à Protect est AllowOnlyFormFields avant de libérer des sections individuelles :
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyFormFields, password: "123" });
s2.ProtectForm = false;
Un document protégé peut toujours être sélectionné et copié
Les cinq types de protection restreignent le comportement de modification, pas le comportement de lecture. AllowOnlyReading, par exemple, empêche les modifications du corps du texte mais ne bloque pas la sélection, la copie ou la recherche de texte. C’est intentionnel — les restrictions de modification contrôlent ce que les utilisateurs peuvent modifier, pas ce qu’ils peuvent consulter ou extraire.
Si le contenu ne doit pas pouvoir être copié ou consulté par des utilisateurs non autorisés, utilisez le chiffrement du document (un mot de passe à l’ouverture) plutôt qu’une restriction de modification. Les deux approches répondent à des menaces différentes et peuvent être combinées lorsque la confidentialité et le contrôle des modifications sont tous deux requis :
doc.Protect({ type: wasmModule.ProtectionType.AllowOnlyReading, password: "123456" });