Bonjour
Voila je cherche en vain à pourvoir imprimer un fichier pdf sans avoir à ouvrir acrobat.
Savez vous comment puis je faire?
Merci par avance
Bonjour
Voila je cherche en vain à pourvoir imprimer un fichier pdf sans avoir à ouvrir acrobat.
Savez vous comment puis je faire?
Merci par avance
up svp je crois que l'on peut le faire en java script mais pas compris :s
Faut voir les paramètres d'Acrobat. Tu peux utiliser ShellExecute( "print" ) qui va lancer l'action "Imprimer" que Acrobat a associé aux fichier pdf. Dans la base de registre, on voit que ça lance acrobat avec les options /p /h.
Si ça ne te convient pas, faut chercher d'autres options.
http://www.experts-exchange.com/Web/..._20841450.html
Merci pour ton aide.
Donc j'ai fait un script batch :
Donc le pb c'est que j'utilise un programme externe pskill, c'est moyen, il y a pas une commande permettant de killer un proccesus? Je crois sous XP pro que oui mais pas sur? Et de plus j'utilise le ping pour attendre 10 s avant la fermeture d'acrobat, c'est un peu de la bidouille, pas très pro, vous avez pas une autre idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @echo off echo "%1" Title Impression du fichier Avis.pdf echo Impression en cours... cd "C:\Program Files\Adobe\Acrobat 7.0\Reader" start AcroRd32.exe /p /h "c:\%1" ping 127.0.0.1 -n 10 > nul cd "C:\" pskill.exe AcroRd32.exe echo Impression terminé
Voila merci d'avance
D'après le lien que je t'ai donné, la commande /t demande à Acrobat de se terminer une fois fini.
start AcroRd32.exe /t "c:\%1"
ah ok je vais essaye mais bon peut être que j'ai trouvé la solution à mon pb par un script en vbs. Mais voila connais pa du tout ce langage :s
Donc je l'a copié sous c:\Windows\system32
Code : 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 Dim pdfKey, printCmd, printToCmd, printJob Dim printerName, printerDriver, printerPort, regPath Dim fso, fileName, fullPath, readerActive Dim wmi, wmiq, colProcesses, colPrinters Dim printJobStarted, loopCounter Dim arDefaultPrinter Const TIMEOUT = 60 '-- Initialize variables printJobStarted = False loopCounter = 0 strComputer = "." readerActive = False '-- Initialize objects Set objShell = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Set wmi = GetObject("winmgmts:") Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objArgs = WScript.Arguments If objArgs.length = 0 Then WScript.echo("Usage: PrintPDF <PDF File Path> [""Printer Name""]") WScript.Quit(1) End If '-- Get PDF Filename from command line fileName = objArgs(0) '-- Get full path to PDF file fullPath = fso.GetAbsolutePathName(fileName) '-- Query for active acrobat reader processes wmiq = "select * from Win32_Process where name='AcroRd32.exe'" Set colProcesses = wmi.ExecQuery(wmiq) '-- Set flag if acrobat reader is running For Each process in colProcesses readerActive = True Next '-- Get the registry key of file association for ".pdf" pdfKey = objShell.RegRead("HKCR\.pdf\") '-- Get the print or printto command from the registry If objArgs.length = 1 Then '-- Get the default printer printerName=objShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device") arDefaultPrinter=Split(printerName,",") If IsArray(arDefaultPrinter) Then printerName=arDefaultPrinter(0) printerPort=arDefaultPrinter(2) End If Else '-- Get the printer name arg from command line printerName = objArgs(1) End If '-- Get the printto command for .pdf files printCmd = objShell.RegRead("HKCR\" & pdfKey & "\shell\printto\command\") '-- Get the remaining args from the registry regPath = "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\" & printerName printerDriver = objShell.RegRead(regPath & "\Printer Driver") printerPort = objShell.RegRead(regPath & "\Port") '-- Replace printjob argument with the PDF file path printJob = Replace(printCmd, "%1", fullPath) '-- Second argument is printer name printJob = Replace(printJob, "%2", printerName) '-- Third argument is driver name printJob = Replace(printJob, "%3", printerDriver) '-- Fourth argument is port printJob = Replace(printJob, "%4", printerPort) '-- Print the PDF file objShell.Run(printJob) wmiq = "select * from Win32_Printer where Name ='" & printerName & "'" Do '-- Query status of the printer Set colPrinters = objWMIService.ExecQuery(wmiq) '-- Check printing status of the printer For Each objPrinter in colPrinters Select Case objPrinter.PrinterStatus Case 1 '-- Status Other If printJobStarted Then Exit Do Case 2 '-- Status Unknown If printJobStarted Then Exit Do Case 3 '-- Status Idle If printJobStarted Then Exit Do Case 4 '-- Status Printing printJobStarted = True Case 5 '-- Status Warming Up End Select Next '-- Wait 100 ms WScript.Sleep 100 '-- Increment our loop counter loopCounter = loopCounter + 1 '-- Timeout after TIMEOUT seconds If loopCounter > (TIMEOUT * 10) Then Exit Do Loop '-- If acrobat reader wasn't active before printing, kill it If readerActive = False Then '-- Query for active acrobat reader processes wmiq = "select * from Win32_Process where name='AcroRd32.exe'" Set colProcesses = wmi.ExecQuery(wmiq) '-- Terminate all acrobat reader processes For Each process in colProcesses process.Terminate(1) Next End If
Quand je le lance, j'ai une erreur sur la ligne 63 qui est :
Mon erreur est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 '-- Get the printto command for .pdf files printCmd = objShell.RegRead("HKCR\" & pdfKey & "\shell\printto\command\")
Là je sais pas si tu peux m'aider? il faut peut être que je poste dans une autre partie du forum? Je crois que c'est un pb avec la base des registre non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Racine incorrecte dans la clé de Registre "HKCR\pdffile\shell\printto\command\"
Ce script reproduit le comportement de ShellExecute( "printto" ). Sauf que ça ne le fait pas complètement, et pour cause c'est bcp de boulot.
A savoir, chez moi, la clé "HKCR\.pdf" a pour valeur "AcroExch.Document" (et non "pdffile", mais ça dépend de Acrobat ça) et
la clé "HKCR\AcroExch.Document" renvoie sur "HKCR\AcroExch.Document.7" qui elle contient bien "/shell/printto". Vu que ton script ne gère pas ce genre d'indirection, il suffit qu'il y ait la même chose chez toi pour que ça échoue.
C'est ce qui arrive quand on se base sur des méthodes non documentées.
Je t'encourage donc à utiliser ShellExecute( "printto" ), en lui donnant les paramètres attendus.
ce qui revient à appeler acrobat ainsi:'-- Replace printjob argument with the PDF file path
printJob = Replace(printCmd, "%1", fullPath)
'-- Second argument is printer name
printJob = Replace(printJob, "%2", printerName)
'-- Third argument is driver name
printJob = Replace(printJob, "%3", printerDriver)
'-- Fourth argument is port
printJob = Replace(printJob, "%4", printerPort)
Code : Sélectionner tout - Visualiser dans une fenêtre à part "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /t "%1" "%2" "%3" "%4"
Euh oui lol j'ai pas tout compris
Le paramètre que j'ai besoin est juste le nom du fichier c'est tout, l'imprimante est celle par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Je t'encourage donc à utiliser ShellExecute( "printto" ), en lui donnant les paramètres attendus.
Mais tu me dis que ca dépend de la version d'acrobat non?
Je peux pas adpater ce script à la version 7, c'est la version qui sera utilisé?
Merci beaucoup pour ton aide
Edit1: Ah cool j'ai modifier & pdfKey & par AcroExch.Document.7 ca à l'air de marcher mais voila il me ferme pas acrobat pq :'( je tourne en rond snif
Edit2: Ben j'ai testé sur un autre pc bon c'est le rgistre de l'imprimante qui marche pas cette fois ci pffff
Ahh si proche du but c'est bête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 regPath = "HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\" & printerName printerDriver = objShell.RegRead(regPath & "\Printer Driver")
je viens d'essayer avec /t fichier.pdf. Il m'ouvre aussi acrobat. Si ce dernier a été programmé pour toujours s'ouvrir, tu ne peux pas y faire grand chose...Le paramètre que j'ai besoin est juste le nom du fichier c'est tout, l'imprimante est celle par défaut.
Avec autoit tu peux peut être l'automatiser pour qu'il se ferme.
http://www.autoitscript.com/autoit3/
Arf ok ben merci quand même c'est sympa d'avoir passé du temps
Bon ben je vais rester avec mon script batch alors
C'est bete pour le vbs, il me plaisait bien
@+
Je reprends la conversation car j'ai le même souci,
Quand j'utilise l'option /t tout marche bien sauf que Reader ne se ferme pas aprés l'impression.
J'ai vu qu'en utilisant une ancienne version d'adobe cela pourrait peut etre marchait ...
Personne n'a une autre solution plus simple et plus pérènne pour imprimer un pdf par programmation ?
tu code toi-meme l'impression en utilisant la bibliotheque poppler
L'Opus attire les Prélats
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager