Sobre o projeto

## Visão Geral do Projeto cups-web-print é um serviço de impressão web baseado em Python Flask e CUPS, fornecendo uma interface gráfica HTTP para servidores de impressão CUPS. Ele pode converter impressoras USB conectadas ao servidor em impressoras de rede, permitindo que dispositivos na rede local concluam a impressão através do navegador, sem necessidade de instalar drivers ou configurar filas de impressão em cada dispositivo. ## Principais Recursos ### Gerenciamento de Arquivos - Suporta PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, TXT, RTF e formatos de imagem como JPG, JPEG, PNG, GIF, BMP, SVG - Suporta upload por arrastar e soltar - Pré-visualização online: pré-visualização de PDF no computador, pré-visualização de imagens no celular - Visualização e exclusão de lista de arquivos ### Configurações de Impressão - Tamanho do papel: A1-A4 para escritório, 5-10 polegadas para fotos, etc. - Tipo de papel: papel comum, papel fotográfico brilhante, etc. - Modo de cor: colorido / preto e branco - Impressão frente e verso: frente única, frente e verso com encadernação na borda longa, frente e verso com encadernação na borda curta - Orientação de impressão: retrato / paisagem - Número de cópias: 1-99 cópias - Intervalo de páginas: como 1-5 8 10-12 - Escala de impressão: automática / ajustar / preencher / sem escala - Espelhamento de página: suporta inversão horizontal ### Gerenciamento de Tarefas - Detecção de status online da impressora (limitado a impressoras IPP) - Monitoramento de status de tarefas em tempo real: enviado / processando / concluído / falhou / cancelado - Exibição de progresso da tarefa (estimado com base no tempo e na fila CUPS) - Cancelamento de tarefas - Visualização em tempo real da fila de impressão - Informações da bandeja de papel, informações do cartucho de tinta, informações da impressora (tempo de operação, versão do firmware, alertas, etc.), todas obtidas via protocolo IPP ### Segurança - Proteção contra ataques de travessia de caminho - Verificação de lista de permissões de tipos de arquivo - Limite de tamanho de arquivo de 100MB - Rotação automática de logs - Limpeza automática do cache de pré-visualização ao excluir arquivos ### Interface Bilíngue - Interface em chinês: http://localhost:5000/zh - Interface em inglês: http://localhost:5000/en ## Pilha Tecnológica - Backend: Python 3.9+ e Flask 3.0+ - Frontend: HTML5 e Tailwind CSS (CDN) - Serviço de impressão: CUPS 2.0+ - Conversão de documentos: LibreOffice 6.0+ - Processamento de PDF: poppler-utils (pdftoppm), pdftk - Protocolo IPP: ipptool (cups-client) ## Nota de Compatibilidade O projeto usa o protocolo padrão IPP e comandos padrão CUPS, teoricamente compatível com a maioria das impressoras que suportam o protocolo IPP. O README indica que foi testado na Canon G3881, outras impressoras precisam de verificação própria. ## Métodos de Implantação ### Instalação em Contêiner (Recomendado) Executado via Docker, mapeando as portas 5000 (interface web) e 631 (CUPS), e montando a configuração CUPS, filas, logs, e diretórios de upload e pré-visualização. Impressoras USB requerem modo privilegiado e montagem de dispositivo USB; ao usar apenas impressoras de rede, esses dois itens podem ser removidos. Exemplo de adição de impressora (com impressora de rede como exemplo): ``` docker exec cups-web-print lpadmin -p Canon_G3881 -v ipp://192.168.1.16:631/ipp/print -m everywhere -E ``` ### Instalação Local Requer instalação de cups, cups-client, componentes LibreOffice, poppler-utils, pdftk e dependências Python, iniciar o serviço CUPS, adicionar a impressora com lpadmin e depois executar app.py. O README também fornece uma opção de inicialização automática via crontab. ## Estrutura de Diretórios - app.py: arquivo principal da aplicação Flask - ipp_client.py: obtém informações de status como bandeja de papel e cartucho de tinta via IPP - printer_checker.py: confirma o status online da impressora via protocolos IPP, BJNP, etc. - templates/: index.html (página principal em chinês) e index_en.html (página principal em inglês) - uploads/, previews/: diretórios de arquivos enviados e arquivos de pré-visualização ## Solução de Problemas O README fornece uma lista de verificação relativamente completa, cobrindo: falha ao adicionar impressora com lpadmin (incluindo diferenças de endereço IPP por marca, modo driver less, cupsenable/cupsaccept), porta 5000 sem resposta (processo, escuta de porta, firewall, endereço de vinculação do Flask), nenhuma impressora disponível na página, falha na conversão de documentos, falha na geração de pré-visualização de PDF, falha na extração de intervalo de páginas, incapacidade de obter informações de cartucho/bandeja, e o caso de "sucesso indicado mas sem saída" (requer confirmação do parâmetro -m everywhere, driver CUPS e arquivo PPD, status de ociosidade da impressora e logs CUPS). ## Licença GPLv3. O README declara que o software é fornecido "como está", e o autor não se responsabiliza pelas consequências do uso.