... O como escribimos el piloto de la aplicación para el sistema operativo Sailfish usando poppler.
El año comenzó con una tarea divertida: en poco tiempo, nuestro equipo necesitó armar un piloto de la aplicación Mobile Manager Workplace en el sistema operativo Sailfish. En esencia, este es un cliente móvil EDMS, es decir Está diseñado para trabajar con documentos. Y, por supuesto, se requiere un lector de PDF para trabajar con documentos. Pero resultó que hacerlo funcionar sin problemas no fue tan fácil. Pero podemos decir que lo hicimos (para el prototipo, por supuesto). Como? Leer debajo del corte.
De lo bueno, puedo decir que el lector de PDF integrado en el sistema operativo es simplemente genial, no necesita ensamblarlo por separado. Y "Aurora" (parece que este es el futuro nombre "ruso" para el impronunciable "Sailfish Mobile OS Rus") puede presumir de esto, por lo que muchas gracias. Pero aún así, escribir una solución rápida no fue tan simple.
Poppler es una
biblioteca de renderizado de PDF integrada en Sailfish, por eso fue elegida para nuestros propósitos oscuros. Pero solo para escribir un prototipo, porque la licencia GPL no permitirá en el futuro lanzar un producto comercial en él. Y, habiéndolo tocado un poco, llego a la conclusión de que probablemente hay soluciones más convenientes, pero más sobre eso más adelante.
Quiero contar principalmente sobre los dos problemas principales que encontré, tratando de exprimir al menos algo de poppler en poco tiempo. Sugiero ver un video que demuestre el funcionamiento de la aplicación, que resultó antes de leer mi fastidio.
Problema número uno
¿Ves un carrusel bonito? Esta es una forma de mostrar documentos en carpetas: intuitiva y simple para el usuario, le permite ver rápidamente documentos, detalles sobre ellos, antes de proceder directamente a leer el documento y aceptarlo. Es necesario para que los ministros importantes, firmando sus documentos muy importantes, puedan deleitar sus ojos con PathView.
PathView: una herramienta maravillosa, puedes hacer un montón de todo tipo de belleza. Pero nuestro problema es el delegado.
Dibujar la primera página de un documento (vista previa de un documento en la pantalla principal) en línea usando poppler es una idea regular, porque las carpetas no se almacenan en caché y la transición entre ellas comienza a colgar increíblemente, poppler dibuja lentamente. Más precisamente, renderiza, por supuesto, dibuja QPainter.
El problema se resuelve de manera simple, pero no elegante: presentamos la vista previa cuando se inicia la aplicación, guardamos la imagen en el dispositivo y, como resultado, dibujamos QImage en el delegado. Y, francamente, todavía no he descubierto cómo reescribir esto de una manera más elegante.
Problema número dos
Si intenta dibujar un documento grande de una vez (una página que muestra el contenido del documento), no solo lo hace durante mucho tiempo, sino que también difumina la imagen. Pensé que había estropeado las dimensiones de que el documento se representa en una imagen pequeña, y luego lo estira a un tamaño determinado, pero no, lo verifiqué todo 100 veces. Traté de hacer una imagen más grande, de todos modos. Y no se mancha como con una pérdida de calidad, sino como si hubieran pasado una mano por tinta fresca.
Esto, por supuesto, se puede resolver de una sola vez, debe dibujar no todo el documento, sino solo la página actual y las vecinas, pero aún no ha tenido tiempo de hacerlo.
Resumen
Poppler es lento y extraño, pero gracias por tener uno. Ahora queremos implementar anotaciones pdf gráficas y textuales dentro del piloto, así que voy a reescribir todo esto
en otra biblioteca , esto es algo increíblemente poderoso a primera vista, espero que la funcionalidad declarada coincida con la realidad.
Si alguien ha intentado o conoce una solución más adecuada, le agradeceré su consejo.