... Ou como escrevemos o piloto do aplicativo para o sistema operacional Sailfish usando poppler.
O ano começou com uma tarefa divertida - em pouco tempo nossa equipe precisou montar um piloto do aplicativo Mobile Manager Workplace no sistema operacional Sailfish. Em essência, este é um cliente móvel do EDMS, ou seja, Ele foi projetado para trabalhar com documentos. E, claro, o leitor de PDF é necessário para trabalhar com documentos. Mas aconteceu que não foi tão fácil fazê-lo funcionar sem problemas. Mas podemos dizer que fizemos (para o protótipo, é claro). Como Leia sob o corte.
Desde o começo, posso dizer que o leitor de pdf embutido no sistema operacional é ótimo, você não precisa montá-lo separadamente. E "Aurora" (parece que este é o futuro nome "russo" do impronunciável "Sailfish Mobile OS Rus") pode se orgulhar disso, pelo qual muitos agradecem a ele. Mas, ainda assim, escrever uma solução rápida não era tão simples.
O Poppler é uma
biblioteca de renderização de pdf incorporada ao Sailfish, e foi por isso que foi escolhida para nossos propósitos obscuros. Mas apenas para escrever um protótipo, porque a licença GPL não permitirá no futuro lançar um produto comercial. E, tendo tocado um pouco, chego à conclusão de que provavelmente existem soluções mais convenientes, mas mais sobre isso mais tarde.
Quero contar principalmente sobre os dois principais problemas que encontrei, tentando extrair pelo menos algo do poppler em pouco tempo. Sugiro assistir a um vídeo demonstrando o funcionamento do aplicativo, que saiu antes de ler meus incômodos.
Problema número um
Vê um carrossel bonito? Essa é uma maneira de exibir documentos em pastas - intuitiva e simples para o usuário, permite visualizar rapidamente documentos e detalhes sobre ele antes de prosseguir diretamente para a leitura do documento e para a concordância. É necessário para que ministros importantes, assinando seus documentos muito importantes, possam deliciar seus olhos com o PathView.
PathView - uma ferramenta maravilhosa, você pode fazer um monte de todo tipo de beleza. Mas nosso problema é o delegado.
Para desenhar a primeira página de um documento (visualização de um documento na tela principal) on-line usando o poppler é uma idéia mais ou menos, porque as pastas não são armazenadas em cache e a transição entre elas começa a travar incrivelmente, o poppler desenha lentamente. Mais precisamente, renderiza, é claro, chama QPainter.
O problema foi resolvido de maneira simples, mas nada elegante: renderizamos a visualização quando o aplicativo é iniciado, salvamos a imagem no dispositivo e, como resultado, desenhamos o QImage no delegado. E, francamente, ainda não descobri como reescrever isso de uma maneira mais elegante.
Problema número dois
Se você tentar desenhar um documento grande de uma só vez (uma página exibindo o conteúdo do documento), ele não apenas faz isso por um longo período de tempo, mas também mancha a imagem. Eu pensei que errei com as dimensões em que o documento é renderizado em uma imagem pequena e, em seguida, o estende para um determinado tamanho, mas não, eu verifiquei tudo 100 vezes. Eu tentei fazer uma imagem maior - tudo a mesma coisa. E não mancha como uma perda de qualidade, mas como se eles tivessem passado a mão por tinta fresca.
Isso, é claro, pode ser resolvido de uma só vez, você precisa desenhar não todo o documento, mas apenas a página atual e as vizinhas, mas ainda não teve tempo para fazer isso.
Sumário
O Poppler é lento e estranho, mas obrigado por ter um. Agora, queremos implementar anotações gráficas e textuais em PDF no piloto, então vou reescrever tudo isso
em outra biblioteca . Isso é algo incrivelmente poderoso à primeira vista. Espero que a funcionalidade declarada corresponda à realidade.
Se alguém tentou ou conhece uma solução mais adequada, ficarei muito grato pelo conselho.