Início
» Dicas para PC
»
Execute o LibreOffice Headless no Docker para conversão de PDF.
Execute o LibreOffice Headless no Docker para conversão de PDF.
Sim. Para conversões pontuais de documentos, crie uma pequena imagem Docker com o LibreOffice instalado e execute soffice --headless-a --convert-to. Monte o diretório de entrada como somente leitura e um diretório de saída separado com permissão de gravação para que o PDF apareça no seu host. Este exemplo usa uma imagem baseada em Debian e converte um arquivo DOCX para PDF; ele não expõe o LibreOffice como um serviço de rede.
O Dockerfile instala o LibreOffice Writer e um pacote básico de fontes, e então usa o soffice como comando do contêiner.
O que faz o modo headless e quando o Docker é útil?
O modo headless inicia o LibreOffice sem sua interface gráfica. O LibreOffice documenta esse modo para uso via linha de comando e API, e suas opções de linha de comando suportam conversão de arquivos com diretório de saída. O Docker empacota o aplicativo e suas dependências para que um script ou estação de trabalho possa executar a mesma imagem de contêiner sem instalar o pacote de aplicativos no host.
Esse padrão funciona bem para trabalhos em lote locais, tarefas de CI ou um worker de backend que recebe um arquivo e salva o resultado convertido. Um contêiner headless simples não é, por si só, uma API de conversão HTTP: ele não escuta em nenhuma porta e não aceita uploads da web. Se você precisar de um serviço persistente, crie uma API e uma fila de tarefas em torno do processo de conversão e adicione validação de requisição, timeouts, limites de tamanho de arquivo e isolamento.
1. Crie as pastas de entrada e saída.
Em um host Linux ou macOS usando Bash ou um shell similar, crie uma pasta de projeto com diretórios separados. Coloque o documento fonte dentro dela inpute deixe-a outputvazia na primeira execução:
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
Os comandos do Docker abaixo usam caminhos e sintaxe de shell no estilo Unix. No Windows, ajuste a sintaxe do caminho do host para o PowerShell ou Prompt de Comando e certifique-se de que o Docker Desktop tenha permissão para compartilhar a unidade que contém essas pastas.
2. Criar uma imagem com o LibreOffice
Crie um arquivo chamado Dockerfile`inside` lo-workcom o seguinte conteúdo:
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice-writer fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["soffice"]
libreoffice-writerFornece ao Writer e aos filtros de conversão necessários para formatos comuns de processamento de texto. Adicione libreoffice-calcou libreoffice-impressse o contêiner precisar converter planilhas ou apresentações. O pacote de fontes é apenas básico; instale as fontes que seus documentos exigem e para as quais você tem permissão de uso, pois a falta de fontes pode alterar a quebra de linha e a quebra de página.
Crie a imagem a partir do diretório que contém o Dockerfile:
docker build -t lo-headless .
O exemplo usa nomes de pacotes do Debian Bookworm. As tags da imagem base e os pacotes do repositório mudam com o tempo; para uma compilação de produção, escolha uma base mantida, reconstrua-a regularmente para obter atualizações de segurança e fixe a imagem base por digest se precisar de compilações reproduzíveis. Evite instalar pacotes de um repositório não relacionado apenas para corresponder a um tutorial.
Crie a imagem local a partir do Dockerfile antes de executar o contêiner de conversão.
3. Execute o LibreOffice com montagens separadas.
Inicie um contêiner descartável e passe as opções de conversão após o nome da imagem. O ponto de montagem de entrada é somente leitura; apenas o diretório de saída é gravável. A --useropção executa o processo com seu usuário e grupo do host no Linux, enquanto HOME=/tmpconcede ao LibreOffice um diretório inicial gravável. Ajuste as permissões da pasta se o usuário do host não puder gravar nela output.
--headlessSuprime a interface gráfica, --convert-to pdf:writer_pdf_Exportseleciona o filtro de exportação para PDF e --outdirdireciona o resultado para a pasta de saída montada. O caminho exclusivo do perfil de usuário fornece a este processo um diretório de configuração do LibreOffice com permissão de escrita; se você executar várias conversões simultaneamente em um contêiner de longa duração, use um caminho de perfil diferente para cada processo.
Use ` mount` --mountem vez de `mount` -vse preferir a sintaxe de montagem mais explícita do Docker. Montagens de vinculação (bind mounts) estão associadas a caminhos no host do daemon do Docker, enquanto montagens de leitura e gravação permitem que os processos do contêiner alterem arquivos do host. Mantenha as montagens restritas, evite montar seu diretório home ou socket do Docker e não execute um processo de conversão de documentos com privilégios desnecessários.
O comando de execução passa o arquivo de origem para o soffice, limitando o acesso do host às duas pastas do projeto.
4. Confirme se o PDF foi criado.
Verifique o diretório de saída do host após o encerramento do Docker:
ls -l output/
file output/report.pdf
test -s output/report.pdf
O PDF deve existir e não estar vazio. Abra-o em um leitor de PDF e verifique a contagem de páginas, tabelas, imagens, quebras de página e fontes antes de utilizá-lo. A conclusão bem-sucedida do processo não garante que todos os elementos foram renderizados conforme o esperado, especialmente quando um documento utiliza fontes ou recursos indisponíveis no contêiner. Utilize um diretório de saída limpo ou um novo nome de arquivo de saída para cada execução, para que um PDF antigo não seja confundido com a conversão mais recente.
Verifique se o arquivo de saída existe e é reconhecido como um PDF e, em seguida, revise as páginas para verificar se houve alterações no layout.
O que devo verificar se a conversão falhar?
Nenhum arquivo de saída: confirme o nome do arquivo de origem e o caminho do contêiner, que inputfoi montado em < caminho_do_contêiner /input>, e se o outputdiretório do host tem permissão de escrita para o usuário selecionado.
Erros de perfil ou bloqueio: verifique se o -env:UserInstallationcaminho tem permissão de escrita. Use um diretório de perfil separado para cada processo simultâneo do LibreOffice.
Layout alterado: instale as fontes necessárias na imagem e revise o PDF. A renderização pode diferir em relação a um sistema de desktop devido à disponibilidade de fontes, filtros de exportação e diferenças de versão.
Erro de montagem do Docker: verifique se ambos os diretórios do host existem antes de usar `docker-compose up` -vou ` --mountdocker-compose up`, e verifique se o daemon pode acessá-los.