Je essaie de convertir du contenu HTML en un Google Doc formaté. Mon flux de travail actuel utilise un nœud Code pour générer les données de base, qui sont ensuite transmises à un nœud HTML pour structurer le contenu. Je dois prendre la sortie de ce nœud HTML et créer un nouveau Google Document tout en préservant le formatage HTML. Le nœud Google Docs standard gère facilement le texte brut, mais je cherche la bonne méthode ou solution de contournement pour télécharger la sortie HTML afin que le style reste intact.
Salut @Benry_Hendix
Le problème est que le nœud Google Docs standard dans n8n est conçu uniquement pour le texte brut. Si vous essayez d’envoyer du code HTML à ce nœud, celui-ci ne « lit » pas le formatage ; il imprime simplement les balises HTML brutes (comme <b> ou <h3>) directement sur la page, ce qui vous laisse avec un désordre non formaté.
Pour corriger cela, vous devez changer votre approche : au lieu d’essayer d’insérer du texte dans un document existant, vous téléchargez votre HTML en tant que fichier sur Google Drive. En utilisant un paramètre spécifique appelé « mimeType », vous pouvez indiquer à Google de convertir automatiquement ce fichier HTML en document Google natif lors du processus de téléchargement. Cela permet au système propre de Google de gérer le formatage, ce qui préserve vos titres, votre texte en gras et vos listes à puces.
En termes pratiques, cela nécessite de remplacer le nœud Google Docs par un nœud HTTP Request. Vous utilisez d’abord un nœud Code pour regrouper votre contenu HTML et le nom du document dans un paquet « multipart » spécial, puis le nœud HTTP Request envoie ce paquet à l’API Google Drive. Cette solution contourne les limitations du nœud standard et assure que votre document final est professionnel et correctement formaté.
Voici le JSON du flux de travail n8n. Vous pouvez le copier et le coller directement sur votre canevas n8n.
Remarque : Vous devrez sélectionner vos propres identifiants Google Drive OAuth2 dans le nœud « Create Google Doc » après l’importation, car les identifiants ne peuvent pas être exportés en JSON.
@Benry_Hendix malheureusement, tu vas avoir du mal à convertir du HTML en Document Google de manière fiable. HTML/CSS et Google Docs fonctionnent assez différemment sous le capot. Le texte, les titres et les listes devraient se convertir assez facilement, mais les autres composants (particulièrement les plus stylisés) vont probablement avoir un aspect très différent.
Deux autres approches potentielles
- Convertir le HTML en markdown puis convertir ça en Document Google, mais ça devient assez compliqué.
- Convertir le HTML en PDF à la place d’un Document Google
Si quelqu’un a une bonne solution, j’aimerais bien l’entendre, mais je ne connais pas de méthode fiable pour convertir du HTML en Document Google.
Ce n’est pas la réponse que tu espérais j’en suis sûr, mais j’espère que c’est un peu utile.
Alex
Le chemin le plus fiable que j’ai trouvé pour cela est de contourner le nœud Google Docs et d’utiliser à la place l’API Google Docs documents.batchUpdate via un nœud HTTP Request. L’approche : créez un document vierge avec le nœud Docs, puis envoyez une requête batchUpdate avec une série de demandes insertText + updateParagraphStyle construites à partir de votre structure HTML analysée. C’est plus de travail à mettre en place, mais cela vous donne de vrais styles de titre (HEADING_1, HEADING_2, NORMAL_TEXT) et des passages en gras/italique que Docs reconnaît réellement.
Si votre structure HTML est simple (h1-h3, p, ul/li), un nœud Code qui supprime les balises et construit le tableau de demandes est généralement suffisant - aucune bibliothèque externe nécessaire. Je serais ravi de partager un extrait de code si vous pouvez coller un exemple de ce à quoi ressemble votre sortie HTML.
Le nœud Google Docs ne fonctionnera pas pour cela ; il ne gère que le texte brut. La solution consiste à télécharger votre HTML directement sur Google Drive en utilisant son convertisseur intégré. Quand vous téléchargez un fichier HTML et demandez à Drive de l’enregistrer en tant que Google Doc, il lit les balises HTML et les transforme en formatage réel, titres, texte gras, listes à puces, tableaux, tout cela.
Voici la configuration exacte en deux étapes :
Étape 1 - Ajoutez un nœud Code après votre nœud HTML. Cela transforme votre texte HTML en un fichier qui peut être téléchargé
Étape 2 - Ajoutez un nœud HTTP Request après cela. C’est le nœud qui envoie votre fichier à Google Drive.
Une chose à surveiller : le CSS ne se transfère pas. Si votre style provient d’attributs style= ou de classes CSS, Google Drive les ignore. Il ne lit que les balises HTML comme <h1>, <strong>, <ul> et <table>. Si votre nœud HTML utilise déjà ces balises, vous êtes bon.
Voilà
Nœud : PDF API Hub
Étape 1 : PDF en HTML
Étape 2 : PDF en DOCX
voici le flux de travail
si vous avez besoin de modifications au nœud ou au format, faites-le moi savoir, je peux publier une mise à jour,
Vous pouvez d’abord essayer les solutions proposées par les autres utilisateurs, puis tenter celle-ci. J’avais le même problème avec Google Docs et je ne voulais pas utiliser Google Drive, alors j’ai simplement créé un fichier .gs dans App Script dans Google Docs qui se déclenche toutes les minutes (selon mon cas d’usage), puis il analyse le HTML ou MD, selon ce que vous ajoutez au document après son déclenchement. Vous pouvez raccourcir et allonger la durée du déclenchement selon vos besoins. J’espère que cela résoudra le problème pour vous.
@Benry_Hendix En développant l’approche batchUpdate ci-dessus, voici un extrait de nœud Code qui convertit les éléments HTML basiques (h1–h3, p, strong, ul/li) en un tableau de requêtes API Docs. Cela se produit après la création d’un document vierge et la disponibilité de son ID
// Entrée : {{ $json.html }} — votre chaîne HTML
// Entrée : {{ $json.html }} — votre chaîne HTML
// Sortie : tableau de requêtes batchUpdate
const html = $input.first().json.html;
const requests = [];
let index = 1;
const lines = html
.replace(/<h1>(.*?)<\/h1>/gi, ‘##H1##$1\n’)
.replace(/<h2>(.*?)<\/h2>/gi, ‘##H2##$1\n’)
.replace(/<h3>(.*?)<\/h3>/gi, ‘##H3##$1\n’)
.replace(/<p>(.*?)<\/p>/gi, ‘$1\n’)
.replace(/<li>(.*?)<\/li>/gi, ‘• $1\n’)
.replace(/<[^>]+>/g, ‘’)
.split(‘\n’)
.filter(l => l.trim());
for (const line of lines) {
const isH1 = line.startsWith(‘##H1##’);
const isH2 = line.startsWith(‘##H2##’);
const isH3 = line.startsWith(‘##H3##’);
const text = line.replace(/##H[123]##/, ‘’) + ‘\n’;
const style = isH1 ? ‘HEADING_1’ : isH2 ? ‘HEADING_2’ : isH3 ? ‘HEADING_3’ : ‘NORMAL_TEXT’;
requests.push({ insertText: { location: { index }, text } });
if (style !== ‘NORMAL_TEXT’) {
requests.push({
updateParagraphStyle: {
range: { startIndex: index, endIndex: index + text.length },
paragraphStyle: { namedStyleType: style },
fields: 'namedStyleType'
}
});
}
index += text.length;
}
return [{ json: { requests } }];
Transmettez le tableau requests à un nœud HTTP Request envoyant une requête POST à https://docs.googleapis.com/v1/documents/{docId}:batchUpdate avec vos identifiants Google OAuth2. Le CSS ne sera pas transféré, mais les balises structurelles le seront.
