Difficulté d'impressions pdf

Product :4D - 4D Server>4D : v15.4>OS : Mac OS X

Bonjour,

Je bataille depuis un moment pour imprimer des états en pdf. Je veux choisir le dossier de destination; le nom du document à imprimer ainsi que le format pdf. Mon code est le suivant :

SET PRINT OPTION(Destination option;3;":Sorties_pdf:"+[UP]MSU1) //Sortie doc pdf et dossier de destination
SET PRINT OPTION(Spooler document name option;[UP]MSU1) //Titre du doc pdf
SET PRINT OPTION(Mac spool file format option;0) //Mode pdf
PRINT RECORD([UP];>)

Hélas mes options ne semblent pas prises en compte. Parfois cela sort sur le spooler de l’imprimante (chaque document est alors correctement nommé). Parfois cela sort en pdf, sans prise en compte de la mise à jour du titre. Autrement dit, je ne retrouve que la dernière copie qui porte le nom du premier document et qui est composé du contenu du dernier document. Chaque impression pdf écrase la précédente.

Me serais-je trompé quelque part ou s’agit-il d’un bug ?

Merci pour vos lumières …

Je ne comprends pas trop le but, ça sert à quoi de faire ça ?

Il me semble que cela permet de donner un nom au fichier pour le serveur d’impression.

I think you have to use http://doc.4d.com/4Dv16/4D/16.3/OUVRIR-TACHE-IMPRESSION.301-3651119.fr.htmlOUVRIR TACHE IMPRESSION> to put all records in a single job=document.

Plus concrètement : à quoi sert la ligne 1 ?

ben la
<http://doc.4d.com/4Dv16R4/4D/16-R4/FIXER-OPTION-IMPRESSION.301-3318228
fr.html>doc> dit :

Option destination
Entier long = 9
valeur1: code indiquant le type de destination de l’impression :
1=Imprimante, 2=Fichier (PC)/PS (Mac), 3=Fichier PDF, 5=Ecran (option
du pilote OS X)
Si valeur1 est différent de 1 ou de 5, valeur2 contient un chemin
d’accès pour le document résultant. Ce chemin sera utilisé jusqu’à ce
qu’un autre chemin soit spécifié. Si un fichier du même nom existe
déjà à l’emplacement de destination, il est remplacé. Avec LIRE
OPTION IMPRESSION, si la valeur courante n’est pas dans la liste
prédéfinie, valeur1 contient -1 et la variable système OK vaut 1. Si
une erreur se produit, valeur1 et la variable système OK valent 0.
Note : Sous Windows, vous pouvez définir la destination d’impression
3 (Fichier PDF) lorsque le pilote PDF Creator a été installé. Lorsque
les valeurs (9;3;chemin) sont passées, 4D lance automatiquement une
impression PDF “silencieuse” et prend en compte les codes d’options
éventuellement passés (à noter que si vous passez une chaîne vide
dans valeur2 ou omettez ce paramètre, une boîte de dialogue
d’enregistrement de fichier apparaît au moment de l’impression). A
l’issue de l’impression, les paramétrages courants sont restaurés. Ce
principe simplifie le pilotage des impressions PDF par 4D et permet
d’écrire du code multi-plate-forme. Si les valeurs (9;3;chemin) ne
sont pas passées, l’impression n’est pas pilotée par 4D et les
éventuels codes d’options de PDF Creator sont ignorés.

cette option te permet donner le nom du fichier (PDF ici).

La première ligne m’étonne : je n’ai jamais essayé avec un chemin relatif, mais avec un chemin absolu je n’ai aucun Pb. J’utilise le nom long du document avec son extension .pdf
Dans la deuxième ligne, il doit y avoir le nom (court) du document y compris son extension. (sans son chemin)

Par contre sur mac la ligne : SET PRINT OPTION(Mac spool file format option;0) ne me semble pas nécessaire en tous cas je ne l’utilise jamais et il doit bien sortir chez moi l’équivalent d’une ramette en PDF chaque jour et une ramette sur l’imprimante qui sont Postcript.
La doc précise : Sous Mac OS X, les impressions sont effectuées par défaut en mode PDF.

Par la première ligne, je tente de définir le dossier de dépôt de mon document pdf par un chemin relatif : au même niveau que l’appli, dans le dossier “Sorties_pdf”, mon document. En fait, je ne suis pas trop certain de la validité syntaxique du nom de mon doc qui correspond à la valeur du champ [UP]MSU1.

Les impressions dirigées vers l’imprimante fonctionnent normalement. Mais lorsque je demande une sortie vers un format pdf, cela ne fonctionne plus !

Lorsque je choisi l’option 5 (impression écran sur Mac), le résultat est celui attendu : affichage de deux fichiers, correctement et distinctement nommés.
Lorsque je met la valeur 3, je n’obtiens qu’un seul fichier avec pour contenu les valeurs du dernier document “imprimé” en pdf. J’en déduis que le fichier n’est pas renommé et que le suivant écrase le précédent.

J’en profite pour vous demander à quoi correspond l’option 2 : fichier (PC)/PS (Mac) ? a quoi correspond ce format ?

Merci pour vos réponses.

: Philippe DESMARCHELIER

J’en profite pour vous demander à quoi correspond l’option 2 :
fichier (PC)/PS (Mac) ? a quoi correspond ce format ?
Dans les deux environnement ça sert à produire un fichier électronique (en clair on met le souk dans son disque au lieu de saloper du papier).

Sur mac, ça génère un fichier PS, qui est l’abréviation de https://fr.wikipedia.org/wiki/PostScriptPostScript> (en gros, c’est le pépé du pdf). Le logiciel Aperçu le propose encore dans ses formats Enregistrer sous (alt enfoncée) :
[]22318741;“Your comment here…”[/]

Sur windows, je ne sais pas de quel format il peut s’agir, juste des pistes.

: Philippe DESMARCHELIER

Lorsque je choisi l’option 5 (impression écran sur Mac), le résultat
est celui attendu : affichage de deux fichiers, correctement et
distinctement nommés.
Je pense que je comprends que j’ai rien compris ; faut m’expliquer plus lentement…
Tu veux produire quoi au juste :

  • un fichier pdf et une sortie papier de la même impression ?
  • lier deux impressions en une seule ?
  • autre ?
: Patrick EMANUEL

cette option te permet donner le nom du fichier (PDF ici).
Ce que je ne comprends pas :

  • si je destine mon impression à un fichier pdf, en quoi l’imprimante et sa file d’attente sont concernées
  • inversement si je destine à l’imprimante, je ne vois pas pourquoi je dois créer un fichier pdf
    Je précise que je n’ai pas expérimenté, ce sont des questions que je pose.
: Arnaud DE MONTARD
: Patrick EMANUEL

cette option te permet donner le nom du fichier (PDF ici).
Ce que je ne comprends pas :

  • si je destine mon impression à un fichier pdf, en quoi l’imprimante
    et sa file d’attente sont concernées
  • inversement si je destine à l’imprimante, je ne vois pas pourquoi
    je dois créer un fichier pdf
    Je précise que je n’ai pas expérimenté, ce sont des questions que je
    pose.

ben sur mac, tu peux faire du PDF directement.
Moi, j’ai les options suivantes (que je n’ai pas touchées depuis plusieurs années) :

<code 4D>
SET PRINT OPTION(Destination option;3;$NomFic) // Donne le nom du fichier, qu’il soit PDF ou pas.
SET PRINT OPTION(Scale option;100) // Remise à 100% au cas où une impression réduite aurait eu lieu
SET PRINT OPTION(Hide printing progress option;1) // 0 = Afficher; 1 = Masquer
SET PRINT OPTION(Spooler document name option;$VnomDocument) // donne le nom du fichier au serveur d’impression
</code 4D>

Si le but de ce code est de produire un fichier pdf, à quoi sert la ligne 4 ?

La ligne 4 est destinée à nommer le fichier pdf attendu.

Je redis ma problématique … Je veux sortir des documents pdf. Le but est de les identifier car il doit être opéré ensuite un regroupement de fichiers (dont des fichiers autres que 4D) destinés à être adressés par courriel à différentes personne.

Le code de réglage pour sortie pdf ne fonctionne pas. Il me semble qu’il s’agit d’un bug de fonctionnement. Pour débugger j’essaie d’autres réglages : la fonction impression papier fonctionne correctement ; la fonction option d’aperçu à l’écran itou. Il n’y a que lorsque je règle pour une sortie pdf que cela ne fonctionne plus.

Ma question est de savoir si j’ai fait une erreur de programmation ou s’il s’agit d’un bug. A vous lire les uns et les autres, il semble que votre code corresponde au mien, ce qui conforte ma seconde hypothèse.

J’ai cherché sur le web s’il existe un équivalent de pdf creator pour Mac qui me permettrait peut-être de contourner. Mais je n’ai rien trouvé.

Donc ce soir mon problème reste entier.

Merci pour vos avis et votre aide.

Regarde l’exemple que j’ai donné avec mes 4 lignes de code:
la première ligne correspond au nom du fichier (chemin complet).

Donc, pour imprimer, tu fais :

Configuration de ton impression
OPEN PRINTING JOB
tu imprimes ICI
CLOSE PRINTING JOB

Voilà

: Philippe DESMARCHELIER

Je veux sortir des documents pdf.
Vu.

À ma connaissance, produire un pdf sur mac ne passe pas par une imprimante, c’est pour ça que je ne vois pas à quoi sert de donner un nom en file d’attente d’imprimante (spool).

Pour produire un pdf, je fais juste ça :
<code 4D>
$racine_t:=dossier système(bureau)+“Sorties_pdf”+separateur dossier //sur le bureau par exemple
assert(tester chemin accès($racine_t)=est un dossier) //sécurité
$docName_t:=$racine_t+[UP]MSU1+".pdf" //extension pdf puisque c’est un pdf
assert(tester chemin accès($docName_t)#est un document) //re sécurité
SET PRINT OPTION(Destination option;3;$docName_t)
PRINT RECORD([UP];>)
</code 4D>

  • j’en rajoute un peu sur la sécurité, mais avec les chemins d’accès ça évite les pertes de temps -

Il est possible comme tu l’évoquais que le champ [UP]MSU1 te produise un nom “non acceptable” par le système, ça dépend des caractères qui s’y trouvent. Si tu as un doute, nomme le pdf autrement.

Merci Arnaud,

Ta méthode fonctionne mieux que la mienne !

Tu me fais connaître au passage la fonction assert que je ne connaissais pas et pour laquelle j’utilisais des chemins détournés. Merci donc pour cette découverte.

Il me semble cependant que ta ligne 4 est mal placée. Comment, en effet, cette fonction pourrait-elle tester un document qui n’est créé que deux lignes plus loin !

Encore merci pour aide précieuse.

: Philippe DESMARCHELIER

Comment, en effet, cette fonction pourrait-elle tester un document
qui n’est créé que deux lignes plus loin !
Non, c’est tellement parano que tu es passé à coté :wink: : comme elle va (tenter de) le créer 2 lignes plus loin, elle vérifie qu’il n’existe pas déjà un document de ce nom dans le dossier cible. Je dis parano car l’utilité est discutable, ça dépend de ce que tu veux faire de ce que signale la doc : “Si un fichier du même nom existe déjà à l’emplacement de destination, il est remplacé”.

PS : dans la vraie vie, je suggèrerais de remplacer la destination “sur le bureau” par Dossier temporaire…