Conversor do Hancom Hangul baseado em Pandoc - apresentando uma ferramenta open source que converte md, html e docx para hwpx.
(github.com/msjang)Desenvolvi isso para resolver os incômodos do trabalho com documentos HWP, após 9 anos trabalhando em um instituto de pesquisa governamental.
Contexto do desenvolvimento
- 2018: na época em que eu ainda era iniciante em Python, tentei criar um conversor HML/HWPML baseado em expressões regulares - https://github.com/msjang/md2hml
- Janeiro de 2025: desenvolvimento do hwpfy
- Consolidação dos relatórios semanais de trabalho de cerca de 20 pessoas com base em uma wiki de edição colaborativa em tempo real
- Wiki → exportar para DOCX → converter para DOCX com o formulário oficial aplicado (hwpfy) → abrir no app Hancom Hangul e salvar como HWPX → compartilhar em HWPX com o departamento superior interno
- Dezembro de 2025: pypandoc-hwpx
- Achei que já tinha acumulado experiência suficiente, então investi tempo de forma séria e desenvolvi a ferramenta.
Como foi desenvolvido
- Criei um DOCX com o formato desejado e o salvei como HWPX.
- Descompactei o DOCX e o HWPX gerados para inspecionar os XMLs, removi propriedades desnecessárias e fiz ajustes. Depois, confirmei também se ambos abriam corretamente no Word e no app Hancom Hangul.
- Criei um documento comparando os formatos md, html, docx e hwpx. - https://github.com/msjang/pypandoc-hwpx/…
- A princípio, eu pretendia usar o
format_comparison.mdacima para pedir a um LLM que escrevesse o código, mas percebi que já tinha em mãos o HWPX correto como gabarito. - Fui criando com várias rodadas de feedback usando o Antigravity (Gemini Pro 3). Como a saída não vinha no formato desejado, analisei o XML em detalhes e fui dando feedback. Eu não mencionei diretamente o documento de comparação de formatos, mas ter assimilado seu conteúdo ajudou muito na revisão.
Próximos passos
Quero remover a dependência de Python no Pypandoc, reescrever em Haskell e contribuir com um writer HWPX para o Pandoc.
7 comentários
https://velog.io/@wjsdj2009/…
Tem um artigo desse tipo; que tal tentar entrar em contato com políticos...?
Parece o tipo de coisa que a Hancom deveria ter desenvolvido primeiro... se a Hancom realmente tiver intenção de se expandir para fora do país.
Apoio as contribuições em Haskell!
Eu originalmente pretendia criar isso aos poucos ao longo de um ou dois meses, mas ontem saiu a notícia https://youtu.be/8cSqPRsM_Yg, então acabei fazendo às pressas.
Muito legal.
Mas, com todo o respeito, a direção de conversão que o presidente quer não seria
hwp* -> .md, docs, pdf plain text ...? O projeto também oferece suporte à conversão inversa?Há muito tempo existem bibliotecas para fazer parsing de
hwpouhwpx. No ecossistema Java, esta é bem conhecida.https://github.com/neolord0/hwplib
https://github.com/neolord0/hwpxlib
Também existe uma opção em Python que faz um wrapper da API win32 do Hancom. É aquela que aparece nas aulas iniciais de automação de HWP. A ideia é controlar, no backend, o aplicativo HWP para Windows.
https://pypi.org/project/pyhwpx/
Também há esta opção para lidar com HWPX em Python de forma standalone, sem programa separado. Ela permite ler ou substituir conteúdo, além de adicionar parágrafos ou tabelas. https://github.com/airmang/python-hwpx
Mas, pensando bem, hoje a maior parte do tempo nos comunicamos com apps de LLM. Acessamos ChatGPT, Claude e Gemini pelo navegador e interagimos por chat. Mesmo ao rodar modelos locais com OpenWebUI, o uso também é feito pelo navegador. Até os resultados obtidos no modo de voz do app do ChatGPT no smartphone podem ser conferidos depois no log de chat no navegador. E, se você clicar no botão de copiar da saída do LLM e colar no bloco de notas, verá que aquilo está em markdown.
O LLM gera markdown ou html, mas existe alguma biblioteca que converta isso diretamente para
hwpxe salve? Não existe.Quando você está pensando em ideias de patente com o GEMINI Pro, ele pergunta se deve transformar isso em documento. E, ao clicar no botão, já existe um rascunho de memorial descritivo de patente criado no Google Docs. No fim das contas, ele só converteu markdown em documento, mas o resultado fica bastante apresentável.
Queiramos ou não, a Coreia do Sul adotou o HWP como padrão para execução de trabalho e comunicação. E, dentro do nosso fluxo de trabalho, gerar HWP é, de certo modo, algo natural.
Depois de ouvir todo o conteúdo de uma reunião no modo de voz do ChatGPT, ao pedir coisas como “resuma e transforme em ata de reunião, depois envie por e-mail aos participantes” ou “transforme o conteúdo do brainstorming em um rascunho de memorial descritivo de patente”, a ideia é que a saída deveria ser um HWP.
Até agora, o processo foi: uma pessoa pega o resultado do LLM no navegador, copia para o aplicativo Hancom, ajusta a formatação, mexe cuidadosamente em largura dos caracteres, espaçamento entre letras e diagramação.
Numa era em que o GEMINI cria Google Docs para você, não deveriam os modelos e serviços de LLM financiados com dinheiro público na Coreia do Sul gerar HWPX sem intervenção humana?
Eu tinha essa demanda por causa da automação do meu trabalho e, por isso, criei isso.
Observação.
O HWP em si é fácil de fazer parsing e converter para texto. O Google já havia criado isso desde os anos 2000 para indexar documentos em coreano e vinha aplicando internamente, e isso também é plenamente possível com os projetos open source mencionados acima.
Se forem aplicados os estilos de níveis de tópico 1 a 6, correspondentes a
h1~h6do HTML, também é possível criar o documento preservando a hierarquia do documento.No entanto, o HWP tem funções demais no editor, e como quem o usa costuma se concentrar em aplicar formatação para que o material impresso em papel fique bonito, não houve esforço para aplicar níveis de tópico (
outline level) ao usar estilos.Um exemplo claro disso é que, quando um instituto salva em PDF um documento HWP de 300 páginas, nenhuma informação de marcador é gerada. Então, embora seja um documento eletrônico, é preciso procurar rolando a tela. É extremamente inconveniente. E, com PDFs grandes, por melhor que seja o computador, se você rolar rapidamente para folhear, ele engasga bastante.
Como não dá para fazer isso durante uma avaliação institucional, eles imprimem e empilham várias cópias de relatórios de centenas de páginas, de acordo com o número de avaliadores, para conduzir a avaliação. E, quando a avaliação termina, jogam tudo fora imediatamente.
Em relatórios do exterior, quando se recebe um PDF de 400 páginas, só o sumário já tem 16 páginas, e o sumário vem com links, de modo que ao clicar você vai para a página correspondente. Ao abrir a visualização de tópicos, os marcadores estão muito bem detalhados e organizados. Isso significa que a ferramenta permite inserir essas informações com facilidade, mesmo sem que a pessoa precise se preocupar com isso, e elas são geradas automaticamente.
Enfim, voltando ao ponto: nos HWP produzidos pelo costume atual, em que a grande maioria usa o Hancom Hangul, é possível obter o texto, mas é difícil obter as informações de hierarquia do documento.
Mas, se o HWP for gerado por um LLM sem intervenção humana, isso pode ser criado automaticamente levando esses pontos em consideração.