IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Superposition d'images


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Superposition d'images
    Bonjour,

    Pour une application web qui tourne en Java , je dispose d'un programme qui a une visionneuse . La visionneuse se trouve dans un navigateur de type Mozilla Firefox 5X. La visionneuse affiche des pdf dans une dimenssion 21X29.7 sur une ou deux pages (dans le cas de documents multipage).

    Sur la visionneuse un code java a été tapé pour permettre de venir fusionner le document (format pdf) avec une signature qui a été scanné (format png/jpeg/jpg/gif ).

    La signature peut se trouver sur 9 endroits de la page (imaginer une feuille 21x29.7 découpé en 9 carrés identiques).

    Voici le code jav qui est censé positionner l'image de la signature sur la visionneuse :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    protected Rectangle positionBlock(String position, Rectangle pageRect, int width, int height)
        {
     
        float pageHeight = pageRect.getHeight();
        float pageWidth = pageRect.getWidth();
     
        Rectangle r = null;
        //Rectangle constructor(float llx, float lly, float urx, float ury)
        if (position.equals(POSITION_BOTTOMLEFT))
        {
        r = new Rectangle(0, height, width, 0);
        }
        else if (position.equals(POSITION_BOTTOMCENTER))
        {
        r = new Rectangle(width, height, (pageWidth - width), 0);
        }
        else if (position.equals(POSITION_BOTTOMRIGHT))
        {
        r = new Rectangle((pageWidth - (width / 2)), height, pageWidth, 0);
        }
        else if (position.equals(POSITION_TOPLEFT))
        {
        r = new Rectangle(0, pageHeight, width, (pageHeight - height));
        }
        else if (position.equals(POSITION_TOPCENTER))
        {
        r = new Rectangle(width, pageHeight, (pageWidth - width), (pageHeight - height));
        }
        else if (position.equals(POSITION_TOPRIGHT))
        {
        r = new Rectangle((pageWidth - (width / 2)), pageHeight, pageWidth, (pageHeight - height));
        }
        else if (position.equals(POSITION_CENTERLEFT))
        {
        r = new Rectangle(0, ((pageHeight / 2) + height), width, (pageHeight / 2));
        }
        else if (position.equals(POSITION_CENTER))
        {
        r = new Rectangle(width, ((pageHeight / 2) + height), (pageWidth - width), (pageHeight / 2));
        }
        else if (position.equals(POSITION_CENTERRIGHT))
        {
        r = new Rectangle((pageWidth - (width / 2)), ((pageHeight / 2) + height), pageWidth, (pageHeight / 2));
        }
        return r;
        }

    L'image de la signature arrive bien sur la visionneuse mais reste desepérement au centre une fois les deux documents fusionnés . L'appelle de la libraire Itextjava a été utilisé.

    Je ne peux tout vous mettre tout le code il y a 3000 lignes .

    Merci de m'aiguiller

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    A première vue, on a bien un rectangle qui dépend de la valeur de la chaîne position. Donc le problème vient :

    • soit de position qui est toujours à la même valeur (CENTER) : à vérifier en debug ou par trace
    • soit le rectangle retourné n'est pas pris en compte (c'en est un autre)
    • soit le problème se situe au niveau de la fusion elle-même (peut-être d'un effet de layout).

    Eventuellement, tu pourrais te faire un petit snippet qui vérfier en dehors du contexte le positionnement des rectangles, sur une image par exemple, juste pour vérifier que la logique est bonne (et tiens bien compte de l'inversion des Y).

    Juste pour info, le width et le height passés en paramètre, c'est censé être la taille de l'image c'est ça ?

    Et la fusion, elle se fait par quel moyen ? Dessin direct dans le buffer (PdfContentByte), ou positionnement d'un objet Image (genre par Chunk) ? C'est pour éliminer justement un effet dû au layout.

    En revanche, à première vue également, il me semble que certains rectangles ne sont correctement positionnés : j'ai l'impression que TOP et CENTER sont inversés par exemple. Et il y a des centres qui ne prennent pas en compte la largeur de l'image. Avec un switch, et un traitement des x et des y à part ça donnerait moins mal au crane de vérifier tout ça (cela dit, personnelement, je me suis fait un convertisseur pour travailler les coordonnées dans le sens classique, avec le 0,0 en haut à gauche, c'est bien plus simple de tout traiter comme on fait d'habitude, et pas besoin d'aspirine à faire l'homothétie de tête).
    Mais ça n'explique pas pourquoi tout irait au centre, puisque tous les rectangles, correctes ou pas, ne sont pas au centre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par joel.drigo Voir le message
    Juste pour info, le width et le height passés en paramètre, c'est censé être la taille de l'image c'est ça ?
    Oui effectivement c'est deux paramètres qui sont passé à la fonction ici dans notre cas.

    Citation Envoyé par joel.drigo Voir le message
    Et la fusion, elle se fait par quel moyen ?
    C'est PDFstamp qui est utilisé dans le cas présent.

    Citation Envoyé par joel.drigo Voir le message
    Dessin direct dans le buffer (PdfContentByte), ou positionnement d'un objet Image (genre par Chunk) ? C'est pour éliminer justement un effet dû au layout.
    Aucun des deux n'est utilisés.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    C'est PDFstamp qui est utilisé dans le cas présent. .
    PDFStamper tu veux dire (pas PDFStamp l'exe ?)
    Tu peux me montrer le code, parce que le seul moyen que je connaisse avec PDFStamper, c'est par PDFContentByte (soit le over, soit le under...), genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PdfReader reader = new PdfReader(pdfInput);
    PdfStamper stamper = new PdfStamper(reader, pdfOutput);
     
    PdfContentByte over = stamper.getOverContent(i);
    Image img = Image.getInstance( imagePath );
    img.setAbsolutePosition(x, y);
    over.addImage(img);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voici les morceaux de code comme demandé :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    protected Rectangle positionBlock(Rectangle pageRect, JSONObject box)
        {
        float startX = Float.parseFloat(String.valueOf(box.get("startX")));
        float startY = Float.parseFloat(String.valueOf(box.get("startY")));
        float endX = Float.parseFloat(String.valueOf(box.get("endX")));
        float endY = Float.parseFloat(String.valueOf(box.get("endY")));
     
        // make sure that the ll and ur coordinates match iText's expectations
        startY = pageRect.getHeight() - startY;
        endY = pageRect.getHeight() - endY;
     
        // create the rectangle to contain the signature from the corrected coordinates
        Rectangle r = new Rectangle(startX, startY, endX, endY);
     
        return r;
        }

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rectangle sigRect =     positionBlock(pageRect, box);
     PdfFormField sigField = stamp.addSignature(fieldName, page, sigRect.getLeft(), 
     sigRect.getBottom(), sigRect.getRight(), sigRect.getTop());

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Quand tu parlais de superposition d'image, je pensais que tu parlais de superposition d'image... me suis jamais servi des signatures.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Superposition d'images semi-transparentes
    Par Celelibi dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 13/12/2006, 15h30
  2. Réponses: 4
    Dernier message: 06/12/2006, 10h29
  3. [CSS] lien dans un div avec superposition d'image
    Par avogadro dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 26/07/2006, 10h10
  4. Position et superposition d'images
    Par Flodelarab dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/01/2006, 14h37
  5. Superposition d'image
    Par Cpt.Spiff dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 27/05/2005, 23h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo