L'histoire tragique des rencontres poppler

... Ou alors que nous écrivions le pilote d'application pour le SE Sailfish en utilisant poppler.

L'année a commencé par une tâche amusante - en peu de temps, notre équipe a dû assembler un pilote de l'application Mobile Manager Workplace sur le système d'exploitation Sailfish. En substance, il s'agit d'un client mobile EDMS, c'est-à-dire Il est conçu pour fonctionner avec des documents. Et bien sûr, le lecteur pdf est nécessaire pour travailler avec des documents. Mais il s'est avéré que le faire fonctionner en douceur n'était pas si facile. Mais nous pouvons dire que nous l'avons fait (pour le prototype, bien sûr). Comment? Lisez sous la coupe.

image

Du bon, je peux dire que le lecteur pdf intégré au système d'exploitation est tout simplement génial, il n'est pas nécessaire de l'assembler séparément. Et «Aurora» (il semble que ce soit le futur nom «russe» de l'imprononçable «Sailfish Mobile OS Rus») peut s'en vanter, ce dont beaucoup le remercient. Mais quand même, écrire une solution rapide n'était pas si simple.

Poppler est une bibliothèque de rendu PDF intégrée à Sailfish, c'est pourquoi elle a été choisie pour nos objectifs sombres. Mais uniquement pour l'écriture d'un prototype, car la licence GPL ne permettra pas à l'avenir de sortir un produit commercial dessus. Et, après l'avoir un peu touché, j'arrive à la conclusion qu'il existe probablement des solutions plus pratiques, mais plus à ce sujet plus tard.

Je veux parler principalement des deux principaux problèmes que j'ai rencontrés, en essayant de sortir au moins quelque chose de poppler en peu de temps. Je suggère de regarder une vidéo démontrant le fonctionnement de l'application, qui s'est avérée avant de lire mon lancinante.


Problème numéro un


Vous voyez un joli carrousel? C'est une telle façon d'afficher des documents dans des dossiers - intuitive et simple pour l'utilisateur, vous permet de visualiser rapidement les documents, les détails, avant de passer directement à la lecture du document et d'accepter. Il est nécessaire pour que les ministres importants, signant leurs documents très importants, puissent ravir leurs yeux avec PathView.

PathView - un outil merveilleux, vous pouvez faire un tas de toutes sortes de beauté. Mais notre problème est le délégué.

Pour dessiner la première page d'un document (aperçu d'un document sur l'écran principal) en ligne à l'aide de poppler est une idée, car les dossiers ne sont pas mis en cache et la transition entre eux commence à se bloquer incroyablement, poppler dessine lentement. Plus précisément, le rendu dessine bien sûr QPainter.

Le problème est résolu simplement, mais pas du tout avec élégance: nous rendons l'aperçu au démarrage de l'application, enregistrons l'image sur l'appareil et, par conséquent, dessinons QImage dans le délégué. Et, franchement, je n'ai pas encore trouvé comment réécrire cela d'une manière plus élégante.

Problème numéro deux


Si vous essayez de dessiner un grand document à la fois (une page affichant le contenu du document), non seulement cela fait très longtemps, mais il macule également l'image. Je pensais avoir gâché les dimensions du rendu du document en une petite image, puis il l'étire à une taille donnée, mais non, j'ai tout vérifié 100 fois. J'ai essayé de faire une image plus grande - tout de même. Et cela ne tache pas comme avec une perte de qualité, mais plutôt, comme s'ils avaient passé une main à travers de l'encre fraîche.

Bien sûr, cela peut être résolu d'un seul coup, vous devez dessiner non pas tout le document, mais uniquement la page actuelle et les pages voisines, mais vous n'avez pas encore eu le temps de le faire.

Résumé


Poppler est lent et bizarre, mais merci d'en avoir un. Maintenant, nous voulons implémenter des annotations pdf graphiques et textuelles dans le pilote, donc je vais réécrire tout cela dans une autre bibliothèque , c'est quelque chose d'incroyablement puissant à première vue, j'espère que la fonctionnalité déclarée correspond à la réalité.

Si quelqu'un a essayé ou connaît une solution plus appropriée, je serai très reconnaissant pour les conseils.

Source: https://habr.com/ru/post/fr440864/


All Articles