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.

Editor de terminal exibindo um Dockerfile baseado em Debian com LibreOffice Writer e fontes instaladas.
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.

Terminal mostrando `docker build -t lo-headless .` concluindo a criação da imagem do contêiner.
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.

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --env HOME=/tmp \
  -v "$PWD/input:/input:ro" \
  -v "$PWD/output:/output" \
  lo-headless \
  --headless --nologo \
  -env:UserInstallation=file:///tmp/lo-profile \
  --convert-to pdf:writer_pdf_Export \
  --outdir /output \
  /input/report.docx

--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.

Comando de terminal executando o contêiner lo-headless com entrada somente leitura, saída gravável, conversão para modo headless e um perfil separado.
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.

O terminal lista o arquivo report.pdf no diretório de saída e o identifica como um documento PDF.
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.

Para obter informações precisas sobre o comportamento das opções, consulte a referência de parâmetros da linha de comando do LibreOffice . Os nomes dos pacotes podem ser verificados na lista de pacotes do LibreOffice Writer no Debian Bookworm . A documentação oficial do Docker explica os bind mounts e as instruções do Dockerfile .

Deixar um comentário

Faça o LibreOffice reconhecer seu ambiente de execução Java.

Faça o LibreOffice reconhecer seu ambiente de execução Java.

Instale um ambiente de execução Java compatível, habilite-o no LibreOffice e solucione problemas de uma lista de JRE vazia sem alterar configurações irrelevantes.

Execute o LibreOffice Headless no Docker para conversão de PDF.

Execute o LibreOffice Headless no Docker para conversão de PDF.

Crie um pequeno contêiner LibreOffice, converta documentos do Office sem interface gráfica e verifique a saída em PDF, limitando o acesso aos arquivos do host.

Reduza o tamanho dos arquivos do LibreOffice Impress sem desfocar as imagens.

Reduza o tamanho dos arquivos do LibreOffice Impress sem desfocar as imagens.

Reduza o tamanho de arquivos de apresentação do LibreOffice comprimindo fotos incorporadas, escolhendo configurações de imagem adequadas e verificando a qualidade dos slides antes de compartilhar.

Impeça que as impressões de tamanho personalizado sejam cortadas no LibreOffice.

Impeça que as impressões de tamanho personalizado sejam cortadas no LibreOffice.

Antes de imprimir um documento com tamanho personalizado, verifique se as dimensões da página do LibreOffice correspondem às da sua impressora, certifique-se de que as margens imprimíveis estejam corretas e ajuste a escala adequadamente.

Acelere as macros do Calc lendo e gravando dados em lotes.

Acelere as macros do Calc lendo e gravando dados em lotes.

Substitua o acesso repetido a células por leituras e gravações em lote de intervalos, compare o resultado e proteja as fórmulas em grandes planilhas do Calc.

Organizar um livro do LibreOffice com documentos mestres vinculados

Organizar um livro do LibreOffice com documentos mestres vinculados

Divida um manuscrito longo em capítulos, organize-os no Writer e mantenha a consistência nos estilos, conteúdos e verificações de exportação.

Conecte o LibreOffice Base ao PostgreSQL com o assistente integrado.

Conecte o LibreOffice Base ao PostgreSQL com o assistente integrado.

Utilize a opção PostgreSQL direta do Base para inserir os detalhes do seu servidor, fazer login, salvar um arquivo de conexão ODB e solucionar erros de acesso comuns.

Disponibilizar fontes personalizadas para o LibreOffice Flatpak

Disponibilizar fontes personalizadas para o LibreOffice Flatpak

Instale uma fonte na pasta de fontes do seu usuário Linux, reinicie o LibreOffice Flatpak e confirme se ela aparece no Writer sem comprometer o sandbox do aplicativo.

Pare as falhas do LibreOffice Save no Sonoma: priorize o trabalho local.

Pare as falhas do LibreOffice Save no Sonoma: priorize o trabalho local.

Proteja seu trabalho e isole falhas de salvamento em unidades de rede no LibreOffice no macOS Sonoma com um fluxo de trabalho que prioriza o local, verificações de permissão e testes direcionados.

Mantenha os IDs CSV intactos no Calc importando-os como texto.

Mantenha os IDs CSV intactos no Calc importando-os como texto.

Para preservar os zeros à esquerda no Calc, definindo as colunas de ID como Texto durante a importação de CSV, verificando a pré-visualização e confirmando os dados salvos.