Générer un document Word en JavaScript avec Docx.js ?
Je suis en train d'utiliser docx.js (Dépôt Github) pour générer un document Word mais je n'arrive pas à le faire fonctionner.
J'ai copié le code brut dans le Google Chrome console, après modification de la ligne de 247 à fixer une "'textAlign' undefined erreur"
if (inNode.style && inNode.style.textAlign){..}
Ce qui rend la fonction convertContent
disponibles. Le résultat de ce qui est un Objet, par ex.
JSON.stringify( convertContent($('<p>Word!</p>)[0]) )
Résultats en
"{"string":
"<w:body>
<w:p>
<w:r>
<w:t xml:space=\"preserve\">Word!</w:t>
</w:r>
</w:p>
</w:body>"
,"charSpaceCount":5
,"charCount":5,
"pCount":1}"
J'ai copié
<w:body>
<w:p>
<w:r>
<w:t xml:space="preserve">Word!</w:t>
</w:r>
</w:p>
</w:body>
dans Notepad++ et enregistré comme un fichier avec une extension 'docx', mais quand je l'ouvre dans MS Word, mais il dit "ne peut pas être ouvert car il y a un problème avec le contenu".
Je manque un peu d'attribut ou de balises XML ou quelque chose?
Avez-vous essayé d'utiliser le dépôt Github de M4rio ? il a un exemple d'utilisation: github.com/MrRio/DOCX.js
Après l'exécution de l'exemple de code que j'obtiens cette erreur -
Avez-vous chargé jQuery ? Les dépendances sont les suivantes:
Oui je l'ai fait. J'essaye de configurer un JSFiddle mais je ne suis pas sûr si c'est un environnement approprié jsfiddle.net/iampeterbanjo/srK2u/6
Vous avez raison, c'est que le dossier
Après l'exécution de l'exemple de code que j'obtiens cette erreur -
TypeError: Object function bound(var_args) { return func.apply(thisObject, args.concat(slice(arguments))); } has no method 'ajax'
Avez-vous chargé jQuery ? Les dépendances sont les suivantes:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="./libs/base64.js"></script> <script type="text/javascript" src="./libs/jszip/jszip.js"></script>
Oui je l'ai fait. J'essaye de configurer un JSFiddle mais je ne suis pas sûr si c'est un environnement approprié jsfiddle.net/iampeterbanjo/srK2u/6
Vous avez raison, c'est que le dossier
blank
contient les données d'un document vide, et le Javascript les charges de ce document vierge via ajax
pour créer le nouveau document
OriginalL'auteur Peter | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Ce code ne peut pas fonctionner sur un JSFiddle en raison de la ajaxCalls à des fichiers locaux (tout ce qui est dans le
blank
dossier), ou vous devez entrer tous les fichiers dans ByteArray format et l'utilisation de lajsFiddle
echo API: http://doc.jsfiddle.net/use/echo.htmlSi vous voulez un javascript seule solution pour générer docx de docx modèles ont un look à la bibliothèque que j'ai créé: github.com/edi9999/docxgenjs
wow. c'est vraiment cool. pouvez-vous utiliser des images en base64 ou les éléments canvas avec elle? avez-vous une page de démonstration ou hello_word.docx exemple(s)?
Désolé, je viens de trouver un de vos exemples - github.com/edi9999/docxgenjs/blob/master/examples/...
yep, en ligne, des exemples peuvent être trouvés ici: javascript-ninja.fr/docxgenjs/examples/simpleTagging.html#
OriginalL'auteur edi9999
Vous pouvez générer un Docx Document à partir d'un modèle à l'aide de docxtemplater (bibliothèque que j'ai créé).
Il peut remplacer les balises par leurs valeurs (comme un moteur de template), et aussi remplacer les images dans une version payante.
Voici une démo du moteur de template: https://docxtemplater.com/demo/
OriginalL'auteur edi9999
Je sais que c'est une vieille question et vous avez déjà une réponse, mais j'ai du mal à obtenir ce pour une journée de travail, alors j'ai pensé que je vous ferais partager mes résultats.
Comme vous, j'ai eu à résoudre le
textAlign
bug en remplaçant la ligne:Aussi, il ne gère pas les commentaires HTML. Donc, j'ai dû ajouter la ligne suivante au-dessus de la vérification pour un "#texte" nœud dans le
for
boucle:Pour créer le docx était délicate, car il n'y a absolument aucune documentation sur cette chose encore. Mais en regardant à travers le code, je vois qu'il sattend à ce que le HTML soit dans un Fichier objet. Pour ma part, j'ai voulu utiliser le HTML, j'ai rendu, pas un fichier HTML que l'utilisateur doit sélectionner l'option de téléchargement. J'ai donc dû le tromper en faisant mon propre objet avec la même propriété qu'il était à la recherche pour et de le transmettre. Pour l'enregistrer sur le client, j'utilise FileSaver.js, ce qui nécessite un blob. Je inclus cette fonction qui convertit en base64 dans un blob. Donc mon code pour mettre en œuvre ce qu'elle est:
En fin de compte, ce serait de travailler pour de simples documents Word, mais n'est pas près sophistiqué pour quelque chose de plus. Je ne pouvais pas l'un de mes styles de rendu, et je n'ai même pas tenter d'obtenir des images de travail. Depuis, j'ai abandonné cette approche et je suis maintenant à la recherche de DocxgenJS ou de certains solution côté serveur.
OriginalL'auteur adam0101
Vous pouvez trouver ce lien utile,
Une démo en ligne ici:
npm install
la suite:html-docx-js
,brfs
,coffeeify
,coffeescript
,file-saver
(poursaveAs
)OriginalL'auteur xyz
Que vous faites la bonne chose codewise, mais votre fichier n'est pas valide d'un fichier docx. Si vous regardez à travers le
docx()
fonction dans docx.js, vous verrez que d'un fichier docx est en fait un zip contenant plusieurs fichiers xml.Je pense que vous pouvez passer une complète fichier html pour la
docx()
fonction du paramètre de fichier. Il sera de retour le résultat.OriginalL'auteur Joshua Smith
Je suis en utilisant SDK Open Xml pour le JavaScript.
http://ericwhite.com/blog/open-xml-sdk-for-javascript/
Fondamentalement, sur serveur web, j'ai un vide docx fichier en tant que nouveau modèle.
lorsque l'utilisateur dans le navigateur, cliquez sur nouveau fichier docx, je vais récupérer le vide docx fichier en tant que modèle, de les convertir en BASE64 et de le retourner à l'Ajax réponse.
dans les scripts client, vous convertir le BASE64 chaîne de tableau d'octets et de l'aide openxmlsdk.js pour charger le tableau d'octets comme un javascript OpenXmlPackage objet.
une fois que vous avez le paquet chargé, vous pouvez utiliser les OpenXmlPart de créer un véritable document. (insertion d'image, création de tableau/ligne ).
la dernière étape est de le transmettre à l'utilisateur final comme un document. cette partie est relative à la sécurité. dans mon code, je l'ai renvoyer au serveur web et est enregistré temporairement. et de préparer une réponse http pour notifier à l'utilisateur final pour le télécharger.
De vérifier l'URL ci-dessus, il y a des exemples utiles de le faire en JavaScript.
OriginalL'auteur Victor Xie