Topic: Générer et afficher la premiere page d'un pdf mis en téléchargement

Bonjour,

est-ce que quelqu'un sait comment générer puis afficher une image générée à partir de la 1re page d'une ressource pdf ?

Pour résumé, sur un type de contenu particulier j'ai un champ qui permet de mettre une plaquette en téléchargement.
Actuellement à l'affichage c'est juste un lien.

Comment générer une image de la première page du pdf, et afficher cette dernière (pour qu'elle devienne un lien cliquable afin de télécharger).

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Bonjour, si vous disposez du plugin Flipbook, vous pouvez tenter ceci (exemple dans une metadonnée nommée "document-pdf")

<img src="{resolver:resolveImage(concat(metadata/document-pdf/@type, '-flipbook'), metadata/document-pdf/@path, $height, $width)}"/>

ou ceci pour maximiser la taille de l'image mais conserver son ration

<img src="{resolver:resolveBoundedImage(concat(metadata/document-pdf/@type, '-flipbook'), metadata/document-pdf/@path, $maxHeight, $maxWidth)}"/>

il se peut qu'au premier affichage vous obteniez une image par défaut, et qu'il faille rafraichir pour obtenir la vraie une fois qu'elle est prête.

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Ok j'ai tenté mais j'ai toujours une image générique (un livre bleu).

La metadata nommée "document-pdf" est bien de type="file" ? ou y a-t-il un type specifique ?

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

oui elle est de type file.
avez-vous une erreur dans vos logs ?

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Petite précision avant d'aller plus loin, cette modification concerne les contenus de type program de l'ODF. Je sais qu'il y a parfois des barrières entre CMS et ODF...

Sinon je n'ai aucune nouvelle erreur.

Les seules sont celles-ci mais elles ne me paraissent pas bloquante

2015-06-02 16:47:54,415 ERROR [sitemap.handled-errors] (http-8080-8;/preview/skins/UBM/resources/css/content.css) Resource not found for URI : file:/export/cms/Ametys_CMS/application/v3_1_4/cms/skins/UBM/resources/css/content.css
2015-06-02 16:47:54,419 ERROR [sitemap.handled-errors] (http-8080-23;/preview/skins/UBM/resources/css/news.css) Resource not found for URI : file:/export/cms/Ametys_CMS/application/v3_1_4/cms/skins/UBM/resources/css/news.css

Last edited by jbabadie (03/06/2015 10:30:00)

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Petite précision également, notre plugin flipbook est configuré avec pdfbox (par défaut)

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Concernant pdfbox, son défaut principal sont des images de moindre qualité : pour des miniatures pas de problème.
Ponctuellement il peut y avoir des problèmes avec certains fichiers PDF, c'est pour cela que je voulais voir les logs : dans le doute, pouvez-vous tester avec un autre fichier PDF simple ?

Pouvez-vous faire un <xsl:value-of>
- de     concat(metadata/document-pdf/@type, '-flipbook')
- et de      metadata/document-pdf/@path ? et me donner les valeurs.

Pouvez-vous me mettre le code complet que vous utilisez pour créer le lien et l'image ?

Dernière question, le répertoire de cache "WEB-INF/data/flipbook" a-t-il bien été créé ? si oui que contient-il ?

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

"concat(metadata/comattachment/@type, '-flipbook')" donne "explorer-flipbook"

"metadata/comattachment/@path" donne "resource://c70c5f4a-320e-4fdc-b4c8-479fc09b47ee"

<div>
     <a href="{resolver:resolve(metadata/comattachment/@type, metadata/comattachment/@path, 'true')}" title="{metadata/comattachment/@filename} ({metadata/comattachment/@size})">
           <img class="img-responsive" src="{resolver:resolveBoundedImage(concat(metadata/comattachment/@type, '-flipbook'), metadata/comattachment/@path, 0, 449)}" />
            <p><xsl:value-of select="metadata/comattachment/@filename"/></p>
            <p><xsl:value-of select="concat(metadata/comattachment/@type, '-flipbook')"/></p>
            <p><xsl:value-of select="metadata/comattachment/@path"/></p>
      </a>
</div>


WEB-INF/data/flipbook a bien été créé (hier à 13h31)
Il contient une réplique de l'arborescence menant à un pdf stocké dans l'explorateur de ressources (fichier partagé) + un répertoire portant le nom du fichier dans lequel se trouve :
- un fichier "document.md5"
- 1 répertoire document contenant le pdf.
- 1 répertoire "pages" avec 2 images correspondant bien aux pages du fichier :
     -page1.png et
     -page2.png

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Dans le cas d'un fichier non partagé

"metadata/comattachment/@path" donne "comattachment" (le nom de la metadonnée)

et l'image affichée (le livre bleu) est stocké _plugins/flipbook/www/contents/program-lad-31/metadatas/comattachment/RDA_CFVU_30-04-2015.pdf/pages/thumbnail_max449x0.png

Last edited by jbabadie (03/06/2015 11:26:37)

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Ben tout ça m'a l'air très bien. Dans le cache, page1.png est bien la première page de votre pdf ?

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

à moins qu'il n'y ait un problème d'encoding de caractère dans votre path de l'explorateur de ressources ? contient-il uniquement des noms plutot court avec des caractères simples ? (pour le test)

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Ben tout ça m'a l'air très bien. Dans le cache, page1.png est bien la première page de votre pdf ?

> oui tout a fait

à moins qu'il n'y ait un problème d'encoding de caractère dans votre path de l'explorateur de ressources ? contient-il uniquement des noms plutot court avec des caractères simples ? (pour le test)

Pour le test en cours sur l'explorateur de ressources le fichier simple est le suivant : /_resources/ODF/exemplepdf.pdf

Last edited by jbabadie (03/06/2015 11:30:36)

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Ca ressemble plus à des erreurs de cache ou des absences de génération qu'autre chose. Il doit y avoir un problème sous-jacent. Je vais enqueter sur le serveur de dev

Last edited by jbabadie (03/06/2015 11:39:35)

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Si le fichier est bien généré, c'est que l'appel XSL est correct en effet.
Ensuite, le CMS n'arrive pas à trouver le fichier généré ça peut provenir de deux choses:
* un bug Ametys
* un problème avec le système de fichiers

Si après votre inspection le second n'est pas concerné, je vous invite à ouvrir un ticket sur le jira Ametys.
Vous pourriez aussi faire un test sur un PC local en téléchargeant la démo ametys et en ajoutant une metadonnée de type file à un type de contenu, pour tester l'affichage.

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Vous pourriez aussi faire un test sur un PC local en téléchargeant la démo ametys et en ajoutant une metadonnée de type file à un type de contenu, pour tester l'affichage.

je vais essayer aussi

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Bonjour,

nous avons investigué le problème.
Actuellement, le plugin flipbook ne lance la préparation du PDF que si vous faites un lien de type flipbook vers le pdf.
Dans votre cas, vous avez un lien de type téléchargement simple.

Donc, dans l'état actuel des choses, il faut faire un lien flipbook pour que l'image flipbook fonctionne ; mais nous sommes en train d'améliorer la chose pour que l'image flipbook fonctionne de manière autonome.

Raphael Franchet
Expert Ametys

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Ok je comprend. Merci

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Le problème a été corrigé pour la version 1.5.0 du plugin flipbook (https://issues.ametys.org/browse/FLIPBOOK-31)

Pour faire un lien vers un PDF en affichant une image correspondant à la première du PDF vous pouvez faire :

<a href="{resolver:resolve(metadata/[metadataPath]/@type, metadata/[metadataPath]/@path, 'true')}" title="{metadata/[metadataPath]/@filename} ({metadata/[metadataPath]/@size})">
    <img src="{resolver:resolveBoundedImage(concat(metadata/[metadataPath]/@type, '-flipbook'), metadata/[metadataPath]/@path, 200, 200)}" />
</a>
            
Laurence Aumeunier
Ametys Expert

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Bonjour,

cela fonctionne presque dans l'ODF...

L'url est bonne mais le fichier final est inexistant. il cherche "thumbnail_0x0.png". Comme il n'existe pas je souhaiterais le remplacer par "page1.png" dans l'url générée.

Savez-vous comment effectuer un simple remplacement de texte dans une URL ?
J'ai tenté un replace() mais sans succès.
Je tente un translate() :

<img class="img-responsive" src="{translate(resolver:resolveImage(concat($comattachnode/@type, '-flipbook'), $comattachnode/@path,0,0), 'thumbnail_0x0.png' , 'page1.png')}"/>

Le nom de fichier est bien remplacé mais il me modifie entièrement l'url et met un point à la fin:

src="/preview/www/_plugins/flipbook/www/resources//ODF/plaquette/licence/UFR%2520Langues/licence-allemand-u-bordeaux-montaigne.pdf/pages/thumbnail_0x0.png"

devient

src="/revnew/www/ggn.s/fgn1ook/www/resogrces//ODF/gpqgeppe/epsper/epsper-ecogone-agepn.edf/pes/page1.png."

au lieu de :

src="/preview/www/_plugins/flipbook/www/resources//ODF/plaquette/licence/UFR%2520Langues/licence-allemand-u-bordeaux-montaigne.pdf/pages/page1.png"

sad  hmm

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Salut,

- pour la fonction replace, je crois que c'est un problème de version de xpath/xslt en v1 au lieu de v2

- pour la fonction translate, il me semble qu'elle sert a faire un remplacement caractère par caractère.Tous les t deviennent des p , puis tous les a des h, et ainsi de suite , ce qui n'est pas du tout ce que tu veux faire. (et vu qu'il y a moins de caractère à droite, je ne sais pas trop ce que ça fait pour les caractères en trop à gauche..)

-pour remplacer une chaîne de caractère par une autre, il y a l'air d'y avoir plusieurs solutions sur cette page : https://stackoverflow.com/questions/306 … placeCelle

Celle qui m'a l'air la plus simple : dans la balise stylesheet mettre :

xmlns:xalan="http://xml.apache.org/xalan"
xmlns:str="xalan://java.lang.String"

<xsl:value-of select="str:replaceAll(
  '/preview/www/_plugins/flipbook/www/resources//ODF/plaquette/licence/UFR%2520Langues/licence-allemand-u-bordeaux-montaigne.pdf/pages/thumbnail_0x0.png',
  'thumbnail_0x0.png',
  'page1.png'
    
)"/>

Par contre, je ne sais pas si il y a une fonction vaguement équivalente déjà inclus dans AmetysXsltHelper ou pas

Bonne journée smile
Mathieu

Re: Générer et afficher la premiere page d'un pdf mis en téléchargement

Merci beaucoup cela fonctionne !!! (y)