Génération PDF: image+texte

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Génération PDF: image+texte

Message par jmg49 »

Bonjour,

j'utilise le module pbPDFModule pour générer du pdf,
je peux générer un pdf avec texte, un pdf avec image mais quand je veux les deux, l'image écrase le texte,
connaissez vous un paramètre à modifier pour avoir la transparence ?

Merci,

Code : Tout sélectionner

IncludeFile "pbPDFModule.pbi"

PDF::Create(0)
PDF::AddPage(0)
PDF::SetFont(0,"Arial","",28)

PDF::PlaceText(0,"test", 10,100)
PDF::Image(0,"my_img.jpg",0,0,210,250)

PDF::Save(0,"out.pdf")
PB:5.70 x32 Win10pro
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Génération PDF: image+texte

Message par Naheulf »

Je ne sais pas quel format de pdf est générée par ce module mais :
Sur Wikipédia, à la page [url=https://fr.wikipedia.org/wiki/PDF/A#Description]PDF/A[/url] il y a écrit :Les objets et calques transparents (groupes de contenu facultatifs) sont interdits dans la norme PDF/A-1, mais sont autorisés dans la norme PDF/A-2.
Donc, si le module génère du PDF/A-1, tu l'as dans l'***. Mais ça reste à confirmer.

Édit : Après un module ça peut se mettre à jour...
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Génération PDF: image+texte

Message par case »

as tu essayé l'inverse l'image puis le texte?

Code : Tout sélectionner

IncludeFile "pbPDFModule.pbi"

PDF::Create(0)
PDF::AddPage(0)

PDF::Image(0,"my_img.jpg",0,0,210,250)
PDF::SetFont(0,"Arial","",28)

PDF::PlaceText(0,"test", 10,100)
PDF::Save(0,"out.pdf")
ImageImage
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Génération PDF: image+texte

Message par jmg49 »

case a écrit :as tu essayé l'inverse l'image puis le texte?
j'ai essayé, c'est pareil,
j'ai pu avancer en rendant le fond de l'image transparent avec paint ,
le texte est maintenant bien visible,

le but étant d'intégrer un fond de page sur une facture ,
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Génération PDF: image+texte

Message par Ar-S »

le but étant d'intégrer un fond de page sur une facture
Alors crées une image sur laquelle tu écris ta facture et sort cette image en pdf.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Génération PDF: image+texte

Message par jmg49 »

je vais faire comme ça oui , car c'est une galère sans nom pour pouvoir placer le texte correctement dans le fond de page avec PDF::write() ou PDF::placetext()
c'est du test, je vois mal comment je vais pouvoir automatiser et standardiser tout ça ...
de plus, les factures sont générées en format PDF en sortie d'un soft de facturation d'un serveur IBM i .... que je transforme en .txt et où je récupère le texte avec readfile() readstring() ça va faire une usine à gaz , tous les logiciels d'intégration de fond de page sont payants, y compris sur Ibm i , alors on tente...
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Génération PDF: image+texte

Message par jmg49 »

ça peut être utile donc je continue...

il existe un utilitaire gratuit pour utilisation perso en ligne de commande qui fait très bien le travail :coherent pdf , trouvable sur Git etc ....
je vais donc le mettre en includebinary et l'utiliser mais !!!

pourriez-vous me rappeler comment utiliser les paramètres avec RunProgram() quand il y a des "" dans les paramètres ? je ne me rappelle plus s'il faut rajouter des simple quotes ou des () :D

exemple :

ligne cmd d'origine : cpdf.exe -stamp-under FACT_2017.pdf -pos-left "-10 10" fact.PDF -o result.pdf

Code : Tout sélectionner

genPDF = RunProgram("c:\cpdf.exe" ,"-stamp-under FACT_2017.pdf" + "-pos-left "-10 10" +"fact.PDF -o res.pdf","", #PB_Program_Open | #PB_Program_Read | PB_Program_Hide)


le problème est avec le "-10 10" on doit les passer avec les quotes du 3 ,

Merci bien,
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Génération PDF: image+texte

Message par Marc56 »

jmg49 a écrit : pourriez-vous me rappeler comment utiliser les paramètres avec RunProgram() quand il y a des "" dans les paramètres ? je ne me rappelle plus s'il faut rajouter des simple quotes ou des () :D
Au choix: Chr(34), #DQUOTE$ ,ou ~"\"\""

Code : Tout sélectionner

RunProgram( "cpdf.exe", 
            "-stamp-under FACT_2017.pdf -pos-left " + 
            Chr(34) + 
            "-10 10" + 
            Chr(34) + 
            "fact.PDF -o result.pdf", "")

RunProgram( "cpdf.exe", 
            "-stamp-under FACT_2017.pdf -pos-left " + 
            #DQUOTE$ + 
            "-10 10" + 
            #DQUOTE$ + 
            "fact.PDF -o result.pdf", "")

RunProgram( "cpdf.exe", 
            ~"-stamp-under FACT_2017.pdf -pos-left \"-10 10\" fact.PDF -o result.pdf", "")
j'ai pu avancer en rendant le fond de l'image transparent avec paint ,
le texte est maintenant bien visible,
le but étant d'intégrer un fond de page sur une facture
Tu sais que tu peux créer des PNG transparents depuis PB

:wink:
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Génération PDF: image+texte

Message par jmg49 »

j'avais complètement oublié , merci du rafraichissement, en rajoutant des espaces pour que la syntaxe soit respectée :

Code : Tout sélectionner

RunProgram("cpdf.exe" ,"-stamp-under FACT_2017.pdf " + "-pos-left " + Chr(34) + " -10 10" + Chr(34) + " fact.PDF -o final.pdf","", #PB_Program_Open |  #PB_Program_Wait | #PB_Program_Hide)
on peut imaginer passer le nom de la facture et le fichier de sortie en paramètres, le fond de page étant toujours le même, bon, ça ne fonctionne pas encore comme prévu mais tant qu'on avance y'a de l'espoir, je vais reprendre la doc concernant les procédures et les paramètres ....

Code : Tout sélectionner

EnableExplicit

Define File
Global fact$
Global result$

File = CreateFile(#PB_Any, "cpdf.exe")
If File
  WriteData(File, ?cpdf, ?endcpdf - ?cpdf)
  CloseFile(File)
Else
  MessageRequester("Erreur", "Impossible d'écrire le fichier")
EndIf

Procedure genPDF(fact$, result$)
  
 RunProgram("cpdf.exe" ,"-stamp-under FACT_2017.pdf " + "-pos-left " + Chr(34) + " -10 10" + Chr(34) +" "+  fact$ + " -o " + result$,"", #PB_Program_Open | #PB_Program_Wait | #PB_Program_Hide )  
    
DeleteFile("cpdf.exe")
EndProcedure

genPDF(fact$, result$)

DataSection
cpdf:  
IncludeBinary "cpdf.exe"
endcpdf:

même avec la doc je suis nul !!! ou alors je regarde pas au bon endroit , c'est rageant de bloquer sur es trucs simples comme ça ,
mon but est d'utiliser le fichier compilé et lui spécifier les fichiers à traiter . test.exe fichier1.pdf final.pdf => pas d'erreur mais pas de final.pdf généré...

j'ai refait mon code avec des gadgets et buttons qui me récupèrent les noms de fichiers dans des variables string, la procédure génère bien le fichier final ,
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Génération PDF: image+texte

Message par case »

si tu passe des paramètres lors du lancement de ton programme
tu dois récupérer l'information avec

ProgramParameter()


exemple:
compiler en : "param.exe" dans un dossier

Code : Tout sélectionner

source.s=ProgramParameter()
dest.s=ProgramParameter()
main=OpenConsole()
If main
  PrintN("fichier source:"+source)
  PrintN("fichier destination:"+dest)
  Input()
EndIf
a sauver et executer dans le meme dossier que "param.exe"

Code : Tout sélectionner

RunProgram("param.exe","fichiersource.tst fichierdestination.tst","")
ImageImage
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Génération PDF: image+texte

Message par jmg49 »

et voilà ce qu'il me manquait , programparameter()

Code : Tout sélectionner

fact$=ProgramParameter()
result$=ProgramParameter()
mon .exe compilé me génère bien le pdf final passé en paramètres avec le fichier facture

Merci à tous ,
Répondre