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

Langage Delphi Discussion :

PDFium unité des coordonnées


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut PDFium unité des coordonnées
    Bonjour,

    dans mes tentatives de modification d'un PDF (ajout d'un QRCode) je me heurte à une petite incompréhension.

    J'ai tenté :
    PDFDocument.AddPicture(QRCodeBitmap,0,0); et PDFDocument.AddPicture(QRCodeBitmap,1,1); et ces deux instructions me positionne l'image en bas à gauche su document

    Je pense donc que les unités ont un rôle important, j'ai pu voir sur le net que certains parlaient en pouces (mesure barbarbare ) mais j'ai un doute.
    Peut-être est-ce que cela dépend des chiffres ? La déclaration de la fonction est

    procedure AddPicture(Bitmap: TBitmap; X, Y: Double);
    Add picture to the current PDF page using the specified coordinates.

    procedure AddPicture(Bitmap: TBitmap; X, Y, Width, Height: Double);
    Add picture to the current PDF page using the specified coordinates.
    Je n'ai pas encore testé un forçage de type genre PDFDocument.AddPicture(QRCodeBitmap,Double(1),Double(1)); le devrais-je ?

    infos : Delphi 10.4.1 (FMX mais peu importe) , PDFIum de Winsoft et DelphiZXIngQRCode

    A moins que cela soit un bogue de la bibliothèque utilisée ?

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Merci, encore un truc de barbare !
    Nom : Capture.PNG
Affichages : 495
Taille : 23,2 Ko
    bon là j'ai triché (un peu) j'ai eu l'idée de le mettre quasiment au centre histoire de vérifier si c'était un problème de bibliothèque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FPDF1.AddPicture(QRCodeBitmap,FPdf1.PageWidth /2,FPdf1.PageHeight/2);
    Je n'ai plus qu'à me faire des conversions parce que je présume que la taille de l'image à insérer il faut aussi qu'elle soit en 72éme de pouces pour faire simple je vais utiliser ton (around 0.3528 mm)

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    mais ......

    Je croyais que tu ne voulais pas de code vcl parce que tu es adepte fmx pur et dur maintenant

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Ce que tu vois là est FMX

    L'unité PDFIum de Winsoft est celle pour FMX et il semblerait que la partie DelphiZXIngQRCode fonctionne, en fait ce n'est que la génération du code.
    Pour ce qui est du QRCode il faut ensuite générer l'image, là cela différe de la VCL mais j'ai trouvé un blog qui indique comment faire (impossible de remettre la main dessus ce matin )
    un bémol, au niveau affichage écran une pixelisation assez gênante.

    Cela étant, je me bat toujours avec ces coordonnées !
    Si la division des tailles me fait bien un centrage, plus exactement coin haut gauche au centre si je mets 0,0 je suis toujours en bas à gauche !

    du coup j'avais pensé utilisé procedure AddPicture(Bitmap: TBitmap; X, Y, Width, Height: Double); mais Width et Height ? pixel ou 1/72 de pouce ou ....

    Je fais de l'empirique pour comprendre. Il faut vraiment que j'aille dans les sources de PDFium d'origine

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Mais quel idiot je fais, je me donnerai des baffes, je n'ai jamais remis en question, ni même me suis posé la question sur, le point d'origine !

    Trop habitué aux écrans, je restais sur le point d'origine en haut à gauche alors que mes essais me démontre qu'il est à gauche, certes, mais en bas !

    Ce n'est plus donc qu'une question de minutes avant que je clique sur le bouton

    Le temps de peaufiner quelques fonctions de conversion. Quand j'écris minutes c'est minutes effectives de travail sur le sujet pas après ce post j'ai du lait sur le feu

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Je parlais de Vcl parce que le code indiqué par Paul montre l'utilisation de libPDFium.dll

    Et pour le point d'origine, tu as les même apriori que moi.
    Je me suis souvent trompé là aussi sur le sujet

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je parlais de Vcl parce que le code indiqué par Paul montre l'utilisation de libPDFium.dll
    en même temps libPDFium c'est pour Windows, mais n'est pas lié à la VCL

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Exact !

    Mais l'utilisation d'une dll ne limite pas l'OS final à Windows ?
    L'avantage de FMX, pour moi c'est quand même le multi plateforme.
    Sinon, VCL a toujours bien fait le boulot

    (Là, y'en a qui vont râler mais tant pis )

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Exact !

    Mais l'utilisation d'une dll ne limite pas l'OS final à Windows ?
    L'avantage de FMX, pour moi c'est quand même le multi plateforme.
    Sinon, VCL a toujours bien fait le boulot

    (Là, y'en a qui vont râler mais tant pis )
    vu que PDFium est multiplateforme, il est possible de faire un libPDFium multiplateforme...faut juste changer le Paint(DC: hDC...) par autre chose

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    (Là, y'en a qui vont râler mais tant pis )
    Si je suis visé, sache que mon choix de passer FMX, FMX desktop plutôt n'est pas du fait que je ne veuille pas faire de la VCL mais plutôt que je me suis trouvé confronté à dire :
    "non mon logiciel ne fonctionnera pas sur mac" ou non "mon logiciel ne fonctionne pas sur Linux" quoique pour cette dernière affirmation je ne connaissais pas, à l'époque, Wine. Il en est d'ailleurs peut-être de même pour mac, peut-être y a t-il un "émulateur windows" ou peut-être fonctionnerait-il en machine virtuelle, mais bon je ne suis pas très "pomme".

    Donc mon objectif avant d'arriver à ma retraite (1009 jours à ce jour, oui on me croirait au service militaire) , avoir quelque chose de plus "multi-plateforme" desktop, mobile est un peu différent et sera si besoin approché différement.

    Dans ce petit essai prise tête (j'ai encore des difficultés de calculs de conversion, pixels en pouces/72 ) si mon essai est FMX c'est presque que parce que maintenant FMX m'est plus naturel (note le presque) j'aime les composants parent de composant et oui même les LiveBindings que beaucoup prenne avec des pincettes.
    Cet tentative est avant tout et uniquement ciblée Windows pour répondre à un besoin, une idée, émanant d'un personne tierce. Cela dit toute expérience est bonne à prendre

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 831
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Ce 1/72ème de pouce me surprend un peu. Sous Windows c'est normalement 1/100" (MM_LOENGLISH) ou 1/1000" (MM_HIENGLISH).

    Et si le DC est accessible, on doit pouvoir sans autre le forcer en millimètre.

  13. #13
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ce 1/72ème de pouce me surprend un peu. Sous Windows c'est normalement 1/100" (MM_LOENGLISH) ou 1/1000" (MM_HIENGLISH).

    Et si le DC est accessible, on doit pouvoir sans autre le forcer en millimètre.
    oui mais PDF c'est Adobe, pas Microsoft

    le DC n'est utilisé par PDFium que dans le contexte de Windows

    PDFium c'est le moteur multiplateforme PDF de Chrome, il est OpenSource et est un sous-ensemble du SDK Foxit non libre.

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Bon alors ceci va peut-être mettre fin à la discussion.
    Une fois compris le point d'origine il m'a été "facile" de faire les calculs nécessaires et une fonction encore un peu brute

    calculer la position horizontale était facile
    X:= (Gauchecm/2.54)*72; explication transformation de cm en pouce (Gauchecm/2.54) puis en 72éme de pouce *72la position verticale elle nécessitait deux choses ; la même transformation de la position
    ((HautCm/2.54)*72) à retirer de la hauteur de la page (je rappelle le 0 est en bas à gauche)
    mais aussi retirer la taille de l'image, et pour cela calculer celle-ci en fonction de pixel (windows du coup) : (Image.height/92)*72 (les voilà les 92 et 72 )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     procedure PositionnerImage(const pdf : TFPDF; Hautcm,Gauchecm : Double; Image : TBitMap);
      var  X,Y : Double;
      begin
      X:= (Gauchecm/2.54)*72;
      Y:=pdf.PageHeight-((HautCm/2.54)*72)-((Image.height/92)*72);
       PDF.AddPicture(Image,X,Y);
      end;
    La fonction est "brute" et certainement à améliorer pour tenir compte ces débordements par exemple

    Dire que cela serait juste pour un autre OS, je pense étant donné que mon programme crée le bitmap. Corrigez moi si je me trompe mais par défaut c'est bien du 92 dpi le bitmap quelque soit l'OS ?
    Maintenant, toujours parlant de DPI puisqu'en fin de compte il s'agit de cela, un PDF serait toujours en 72 dpi ? J'ai un doute.

    En tout cas cela semble fonctionner (même si je n'ai rien imprimé et mesuré)

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Ce n'est pas encore tout à fait ça
    Nom : Capture.PNG
Affichages : 423
Taille : 22,4 Ko
    le calcul de la hauteur du bitmap est encore à peaufiner, mon (Image.height/92)*72 est à revoir, au temps pour ma théorie "pacifiante"
    c'est quelque part beaucoup plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y:=pdf.PageHeight-((HautCm/2.54)*72)-Image.height;
    il ne me reste "plus" qu'une étape, avoir une image de taille voulue et pas forcément celle créée par la fonction de DelphiZXIngQRCode. C'est prévu dans pdfium donc actons du coup il me faut une conversion cm -> pixels à moins que ce soit la cm->74éme de pouce déjà établie mon prochain essai tirera cela au clair !

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut Suite et fin
    Nom : Capture.PNG
Affichages : 419
Taille : 33,7 Ko
    ici un agrandissement du QRCode à 2 cm, je suis même assez étonné de la qualité !
    J'envisageai d'investiguer sur les procédures

    procedure AddPath;
    procedure CreatePath(X, Y: Single; FillMode: TPdfFillMode = fmAlternate; FillColor: TAlphaColor = TAlphaColorRec.Black; Stroke: Boolean = True; StrokeColor: TAlphaColor = TAlphaColorRec.Black; StrokeWidth: Single = 1.0; LineCap: TPdfLineCap = lcDefault; LineJoin: TPdfLineJoin = ljDefault; BlendMode: TPdfBlendMode = bmDefault);
    Pensant, à juste titre ?, qu'il s'agissait de définir des chemins SVG (une autre de mes marottes), je vais botter en touche.

    Donc, hormi des détails, je clos le sujet, si quelqu'un est intéressé par mon approche je peux bien sûr fournir les sources de ce petit programme.

    @papy214 je pense que le traitement avec Synedit PDF serait quasi identique, j'ai fait avec ce que j'ai dispo en FMX sans toutefois le tester sur autre plateformes

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

Discussions similaires

  1. Récupération des coordonnées de la souris
    Par kabil.cpp dans le forum MFC
    Réponses: 11
    Dernier message: 23/05/2008, 07h43
  2. [Access et Delphi 5] Récuperer des coordonnées
    Par jouze dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/03/2006, 11h55
  3. Une infobulle à partir des coordonnées sur une image
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 22h20
  4. Ecrire du texte avec des coordonnées 3D
    Par julian_ross dans le forum DirectX
    Réponses: 3
    Dernier message: 21/06/2005, 16h05
  5. Détourage d'image et recupération des coordonnées
    Par kiroukou dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 13/02/2005, 16h27

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