Estou tentando converter conteúdo HTML em um Google Doc formatado. Meu fluxo de trabalho atual usa um nó de Código para gerar os dados base, que são então passados para um nó HTML para estruturar o conteúdo. Preciso pegar a saída deste nó HTML e criar um novo Google Document enquanto preservo a formatação HTML. O nó padrão do Google Docs lida facilmente com texto simples, mas estou procurando o método correto ou uma solução alternativa para fazer upload da saída HTML para que o estilo permaneça intacto.
O problema é que o nó padrão do Google Docs no n8n foi desenvolvido apenas para texto simples. Se você tentar enviar código HTML para ele, o nó não “lê” a formatação; ele simplesmente imprime as tags HTML brutas (como <b> ou <h3>) diretamente na página, deixando você com uma bagunça sem formatação.
Para resolver isso, você precisa mudar sua abordagem: em vez de tentar inserir texto em um documento existente, você faz upload do seu HTML como arquivo para o Google Drive. Usando uma configuração específica chamada “mimeType”, você pode dizer ao Google para converter automaticamente esse arquivo HTML em um Google Doc nativo durante o processo de upload. Isso permite que o próprio sistema do Google lide com a formatação, preservando seus títulos, texto em negrito e listas de marcadores.
Na prática, isso requer substituir o nó do Google Docs por um nó HTTP Request. Você primeiro usa um nó Code para empacotar seu conteúdo HTML e nome do documento em um pacote especial “multipart”, e depois o nó HTTP Request envia esse pacote para a API do Google Drive. Esse workaround contorna as limitações do nó padrão e garante que seu documento final tenha uma aparência profissional e esteja corretamente formatado.
Abaixo está o JSON para o workflow do n8n. Você pode copiar isso e colar diretamente na sua tela do n8n.
Observação: Você precisará selecionar suas próprias credenciais do Google Drive OAuth2 no nó “Create Google Doc” após importar, pois as credenciais não podem ser exportadas em JSON.
@Benry_Hendix infelizmente você vai achar bem difícil converter HTML → Doc de forma confiável. HTML/CSS e Google Docs funcionam de maneiras bem diferentes por baixo dos panos. Texto, títulos e listas devem converter com bastante facilidade, mas os outros componentes (particularmente os mais estilizados) provavelmente ficarão bem diferentes.
Duas outras abordagens potenciais
- Converter o HTML para markdown e DEPOIS converter isso para um Google Doc, mas isso fica bem bagunçado.
- Converter o HTML para PDF em vez de um Google Doc
Se alguém tiver uma boa solução, eu gostaria de ouvir, mas não conheço um método confiável para fazer conversões HTML → Google Doc.
Não é a resposta que você esperava com certeza, mas espero que seja pelo menos um pouco útil.
Alex
O caminho mais confiável que encontrei para isso é pular o nó do Google Docs e usar a documents.batchUpdate da API do Google Docs via nó HTTP Request no lugar. A abordagem: criar um documento em branco com o nó Docs, depois enviar uma solicitação batchUpdate com uma série de requisições insertText + updateParagraphStyle construídas a partir da sua estrutura HTML analisada. É mais trabalho para configurar, mas oferece estilos de título reais (HEADING_1, HEADING_2, NORMAL_TEXT) e execuções de negrito/itálico que o Docs realmente reconhece.
Se sua estrutura HTML for simples (h1-h3, p, ul/li), um nó Code que remove tags e constrói o array de requisições geralmente é suficiente — sem bibliotecas externas necessárias. Fico feliz em compartilhar um trecho de código se você puder colar uma amostra de como sua saída HTML se parece.
O nó do Google Docs não funcionará para isso; ele só trata texto simples. A solução é fazer upload do seu HTML diretamente para o Google Drive usando seu conversor integrado. Quando você faz upload de um arquivo HTML e diz ao Drive para salvá-lo como um Google Doc, ele lê as tags HTML e as transforma em formatação real, títulos, texto em negrito, listas com marcadores, tabelas, tudo isso.
Aqui está a configuração exata em dois passos:
Passo 1 - Adicione um nó Code após seu nó HTML. Isso transforma seu texto HTML em um arquivo que pode ser enviado
Passo 2 - Adicione um nó HTTP Request depois disso. Este é o nó que envia seu arquivo para o Google Drive.
Uma coisa a observar: CSS não é transferido. Se seu estilo vem de atributos style= ou classes CSS, o Google Drive os ignora. Ele só lê tags HTML como <h1>, <strong>, <ul> e <table>. Se seu nó HTML já está usando essas tags, você está pronto para começar.
Aqui está
Node: PDF API Hub
Etapa 1, pdf para html
etapa 2, pdf para docx
aqui está o fluxo de trabalho
se precisar de alguma alteração no node ou formato, é só me avisar, posso fazer um push de uma atualização,
Você pode usar primeiro as soluções fornecidas pelos outros usuários e depois experimentar esta. Eu estava enfrentando o mesmo problema no Google Docs e não queria usar o Google Drive, então criei um arquivo .gs no App Script dentro do Google Docs que dispara a cada minuto (baseado no meu caso de uso) e depois ele analisa o HTML ou MD, seja qual for o conteúdo que você está anexando ao documento após o disparo. Você pode encurtar e estender a duração do gatilho baseado nas suas necessidades. Espero que isso resolva o problema para você.
@Benry_Hendix Expandindo a abordagem batchUpdate acima, aqui está um trecho de nó Code que faz a conversão de elementos HTML básicos (h1–h3, p, strong, ul/li) em um array de requisições da API Docs. Isso ocorre depois que um documento em branco foi criado e seu ID está disponível
// Input: {{ $json.html }} — sua string HTML
// Input: {{ $json.html }} — sua string HTML
// Output: array de requisições 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 } }];
Passe o array requests para um nó HTTP Request atingindo POST https://docs.googleapis.com/v1/documents/{docId}:batchUpdate com suas credenciais Google OAuth2. O CSS não será transferido, mas as tags estruturais serão.
