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 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
212 :
213 :
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 :
224 :
225 :
226 :
227 :
228 :
229 :
230 :
231 :
232 :
233 :
234 :
235 :
236 :
237 :
238 :
239 :
240 :
241 :
242 :
243 :
244 :
245 :
246 :
247 :
248 :
249 :
250 :
251 :
252 :
253 :
254 :
255 :
256 :
257 :
258 :
259 :
260 :
261 :
262 :
263 :
264 :
265 :
266 :
267 :
268 :
269 :
270 :
271 :
272 :
273 :
274 :
275 :
276 :
277 :
278 :
279 :
280 :
281 :
282 :
283 :
284 :
285 :
286 :
287 :
288 :
289 :
290 :
291 :
292 :
293 :
294 :
295 :
296 :
297 :
298 :
299 :
300 :
301 :
302 :
303 :
304 :
305 :
306 :
|
'==========================================================================
'Nom : Rédacteur de méta-données de pdf
'Version : 1.1
'Last modified : 2005-05-31
'URL de programme : http://www.arilabs.com/software/pdfmeta/pdfmeta.vbs
'Nom de fichier : pdfmeta.vbs
'Auteur : Brian haut
'Copyright : Analytical Resources, Inc. (2005)
'Permis : Version 2 de GNU GPL (ou plus grand). Voir la section de PERMIS ci-dessous.
'Description : Elle te permet d'éditer le titre, l'auteur, le sujet, et les mots-clés.
' C'est un embout avant facile à utiliser, mais limité au pdftk.
'Exige : pdftk-1.12, appui de langue de VBScript (centre serveur de manuscrit de Windows)
'==========================================================================
'============
'Instructions
'============
'(1) exige de ce manuscrit (pdfmeta.vbs) d'être dans la même chemise que pdftk.exe.
'La manière la plus facile d'installer le pdftk est d'installer le « constructeur de PDFTK » (libre).
'http://users.on.net/~johnson/pdftkb/pdftkb_setup.exe
Le 'constructeur de PDFTK est un embout avant de GUI pour le pdftk et a beaucoup de dispositifs utiles.
' --Ou-- vous pouvez défaire la fermeture éclair de pdftk.exe à partir du dossier de fermeture éclair trouvé ici :
' http://www.accesspdf.com/pdftk/ (le lien de téléchargement de clic et obtiennent la fermeture éclair.)
' (Endroit pdftk.exe dans une chemise convenablement appelée et localisée.)
' Voir également : http://hacks.oreilly.com/pub/h/2422
'(2) endroit ce manuscrit (pdfmeta.vbs) dans la chemise d'installation pour
'paquet de pdftk. Faire pour raccourcir à pdfmeta.vbs et à endroit sur le votre
'ordinateur de bureau, si vous aimez.
'(3) UTILISATION : Traîner juste le dossier de pdf de source sur ce manuscrit de VBS (ou a
'raccourcir à lui). Suivre les messages de sollicitation. La chemise provisoire s'ouvrira
'et le nouveau pdf sera à l'intérieur. Déplacer le nouveau pdf à sa destination.
'====================================================================
'PERMIS : GNU GPL v2 ou plus grand : http://www.gnu.org/licenses/gpl.txt
'====================================================================
'Ce programme est logiciel gratuit ; vous pouvez le redistribuer et/ou le modifier
'il en vertu du permis de grand public de GNU comme édité près
'Free Software Foundation ; ou version 2 du permis, ou
'(à votre option) toute version postérieure.
'
'Ce programme est distribué dans l'espoir que ce sera utile,
'mais SANS TOUTE GARANTIE ; sans même garantie implicite de
'VALEUR MARCHANDE ou FORME PHYSIQUE POUR UN BUT PARTICULIER. Voir
'Permis de grand public de GNU pour plus de détails.
Option explicite
'Déclarer les variables
Obscurcir sInfile, sFileName, sTempFile, sCurrentDir, sCurrentDrive, sScriptName
Obscurcir le sComSpec, sMeta, sTempPath, sCmd, sPdftk, sAppTitle, sTKCmd, args
'Configurer le titre d'application et le nom de fichier de la commande de PDFTK
sAppTitle = « rédacteur v1.1 de méta-données de pdf »
sTKCmd = « pdftk.exe »
'Pour employer différents champs de méta-données, changer cette définition de rangée
Obscurcir les aFields (3.1)
aFields (0.0) = « titre »
aFields (1.0) = « sujet »
aFields (2.0) = « auteur »
aFields (3.0) = « mots-clés »
'Placer le drapeau pour le « dictionnaire non trouvé »
Obscurcir le noDict
noDict = faux
'Définir les constantes
Const créent = rectifient, DontCreate = faux
Const HideWindow = 0, ShowWindow = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 3
'Routine principale
GetArguments ()
OpenPDFFile ()
GetCurrentDirectory ()
TryToAccessPDFTK ()
GetTempFolder ()
DeleteMetaFile ()
CreateDumpDataCmd ()
WriteMetaData ()
DisplayMetaData ()
PromptForMetaData ()
WriteNewMetaData ()
WriteMetaDataIntoNewPDF ()
'Sous-routines
GetArguments secondaire privé
Faible sErr, numérique, oShell
'Obtenir les arguments et le contrôle de manuscrit pour au moins un (le nom de fichier)
Placer l'oShell = le WScript.CreateObject (« WScript.Shell »)
Placer les args = le WScript.Arguments
sScriptName = WScript.ScriptFullName
numérique = args. Compte
sErr = « utilisation : [cscript | wscript] pdfmeta.vbs » et vbCRLF et _
« (Juste traîner un dossier de pdf sur ce manuscrit et suivre les messages de sollicitation.) »
Si = 0 numérique puis
sErr de WScript.Echo
WScript.Quit 1
Finir si
S'InStr (UCase (args. Article (0)), « .PDF ») = 0 puis
sErr de WScript.Echo
WScript.Quit 1
Finir si
Finir le sous-marin
OpenPDFFile secondaire privé
Faible sErr, sFile, oFile, FSO
'Essai pour ouvrir le dossier d'entrée
Placer FSO = WScript.CreateObject (« Scripting.FileSystemObject »)
sFile = args. Article (0)
le sErr = sFile et « n'existe pas ! »
Si FSO.FileExists (sFile) puis
oFile réglé = FSO.GetFile (sFile)
sInfile = oFile.path
sFileName = oFile.name
Autrement
sErr de WScript.Echo
WScript.Quit 1
Finir si
Finir le sous-marin
GetCurrentDirectory secondaire privé
Faible aCurrentPath, FSO, sErr, oFile
'Obtenir l'annuaire courant (où le manuscrit est localisé)
Placer FSO = WScript.CreateObject (« Scripting.FileSystemObject »)
Placer oFile = FSO.GetFile (le sScriptName)
sCurrentDir = oFile.path
l'aCurrentPath = s'est dédoublé (sCurrentDir, « : ")
sCurrentDrive = aCurrentPath (0)
le sErr = « ce programme doit résider sur une commande locale ou la commande tracée. »
Si Len 1 (sCurrentDrive <> ) puis
sErr de WScript.Echo
WScript.Quit 1
Finir si
sCurrentDir = aCurrentPath (1)
sCurrentDir = mi (sCurrentDir, 1, Len (sCurrentDir) - Len (oFile.name))
sPdftk = sCurrentDrive et « : » et sCurrentDir et sTKCmd
Sous-marin d'extrémité
TryToAccessPDFTK secondaire privé
Faible sErr, FSO
'Essai pour accéder au programme de pdftk.exe
Placer FSO = WScript.CreateObject (« Scripting.FileSystemObject »)
le sErr = le sPdftk et « n'existe pas ! »
Si FSO.FileExists (sPdftk) puis
'Pdftk.exe trouvés dans l'annuaire courant…
Autrement
sErr de WScript.Echo
WScript.Quit 1
Finir si
Finir le sous-marin
GetTempFolder secondaire privé
Faible oShell
'Obtenir le chemin de la chemise provisoire
placer l'oShell = le CreateObject (« WScript.Shell »)
sTempPath = oShell.ExpandEnvironmentStrings (« %temp%")
sComSpec = oShell.ExpandEnvironmentStrings (« %comspec%")
sTempFile = sTempPath et « \ » et sFileName
Sous-marin d'extrémité
DeleteMetaFile secondaire privé
Faible FSO, oOrigMetaFile
'Supprimer les méta-données classent s'il existe déjà
sMeta = sTempPath et « \ metadata.txt »
Placer FSO = CreateObject (« Scripting.FileSystemObject »)
Si FSO.FileExists (sMeta) puis
oOrigMetaFile réglé = FSO.GetFile (sMeta)
oOrigMetaFile.Delete
Finissent si
Sous-marin d'extrémité
CreateDumpDataCmd secondaire privé
Faible oShell
'Créer un objet de coquille de commande et l'information de pdf de décharge aux méta-données classent
sCmd = sComSpec et « """ de /d de chdir de /c et sCurrentDrive et » : « et _ de sCurrentDir
et """ et « et sTKCmd et » """ et _ sInfile et de """ de dump_data «
et « > """ et sMeta et """ 2>&1 »
Placer l'oShell = le WScript.CreateObject (« Wscript.Shell »)
sCmd d'oShell.Run, HideWindow, vrai
Sous-marin d'extrémité
FixBrokenDictionary secondaire privé
Faible oShell
Pdf d'information 'créer de commande de coquille d'objet et de « chat » pdf nouveau
sCmd = """" et sPdftk et """" et « « et """" et sInfile et """" et _
le « chat produit » et le """" et sTempFile et le """" et « ne font pas _ask »
Placer l'oShell = le WScript.CreateObject (« Wscript.Shell »)
sCmd d'oShell.Run, HideWindow, vrai
sCmd = sComSpec et « mouvement /y de /c » et """" et sTempFile et """" et « « et _ de """"
et sInfile et """"
Placer l'oShell = le WScript.CreateObject (« Wscript.Shell »)
sCmd d'oShell.Run, HideWindow, vrai
CreateDumpDataCmd ()
WriteMetaData ()
Sous-marin d'extrémité
WriteMetaData secondaire privé
Faible AU SUJET DE, FSO, TSO, sErr
sErr = « incapable de réparer le dictionnaire d'information. »
'Lire des méta-données classent, essai pour des expressions,
'et valeurs de méta-données de magasin
Placer FSO = CreateObject (« Scripting.FileSystemObject »)
Si FSO.FileExists (sMeta) puis
Placer TSO = FSO.OpenTextFile (sMeta, ForReading, DontCreate)
Placer AU SUJET DE = nouveau RegExp
Obscurcir I, sLine
Faire tandis que pas TSO.AtEndOfStream
sLine = TSO.ReadLine
RE.Pattern = « aucun dictionnaire d'information a trouvé »
Si RE.Test (sLine) puis
Si le noDict = rectifient alors
sErr de WScript.Echo
WScript.Quit 1
Autrement
le noDict = rectifient
'TextStreamObject étroit
TSO.Close
FixBrokenDictionary ()
Sortir le sous-marin
Finir si
Autrement
noDict = faux
Pour I = LBound (aFields) à UBound (aFields)
RE.Pattern = « InfoKey : » et aFields (I, 0)
Si RE.Test (sLine) puis
sLine = TSO.ReadLine
aFields (I, 1) = mi (sLine, 12)
Finir si
Après
Finir si
Boucle
'TextStreamObject étroit
TSO.Close
Finir si
Finir le sous-marin
DisplayMetaData secondaire privé
Obscurcir I, msg, étiquettes, retval
le msg = « votre dossier de pdf a les propriétés suivantes : » et vbCRLF et vbCRLF
Pour I = LBound (aFields) à UBound (aFields)
Si Len (aFields (I, 0)) > 7 puis étiquettes = étiquettes de vbTab = vbTab et vbTab d'autre
msg = msg et aFields (I, 0) et « : » et étiquettes et aFields (I, 1) et vbCRLF
Après
msg = msg et vbCRLF et OK de vbCRLF et « de clic à continuer ou décommander à stopper. »
retval = msgbox (msg, vbOKCancel, sAppTitle)
Si retval = vbCancel puis WScript.Quit 1
Sous-marin d'extrémité
PromptForMetaData secondaire privé
'Utilisateur prompt pour des méta-données, using des méta-données dans le dossier original en tant que défauts
Obscurcir I
Pour I = LBound (aFields) à UBound (aFields)
aFields (I, 1) = _
InputBox (« écrire » et les aFields (I, 0) et « : », sAppTitle, aFields (I, 1))
Après
Sous-marin d'extrémité
WriteNewMetaData secondaire privé
Faible FSO, TSO
'Ouvrir un dossier des textes et lui écrire les méta-données
Placer FSO = CreateObject (« Scripting.FileSystemObject »)
Placer TSO = FSO.OpenTextFile (le sMeta, ForWriting, créent)
Obscurcir I
Pour I = LBound (aFields) à UBound (aFields)
TSO.Write « InfoKey : » et aFields (I, 0) et vbCrLf
TSO.Write « InfoValue : » et aFields (I, 1) et vbCrLf
Après
'TextStreamObject étroit
TSO.Close
Sous-marin d'extrémité
WriteMetaDataIntoNewPDF secondaire privé
Faible oShell
'Créer une variable de chaîne d'ordres de pdftk d'objet et d'ensemble de coquille de commande
placer l'oShell = le WScript.CreateObject (« Wscript.Shell »)
sCmd = """" et sPdftk et """" et « « et """" et sInfile et """" et _
« update_info » et """" et sMeta et """" et « rendement » et _ de """"
et sTempFile et """" et « ne font pas le _ask »
Faible retval
'Courir la commande de pdftk et détruire les variables locales pour libérer la mémoire
sCmd d'oShell.run, HideWindow, vrai
retval = msgbox (« rechercher le dossier de rendement dans la chemise provisoire » et le _
« qui s'ouvrira après. » et vbCRLF et « le dossier de rendement » et _
« aura le même nom que le dossier original. », _
vbOKCancel, sAppTitle)
Si retval = vbCancel puis WScript.Quit 1
'Explorateur ouvert à la chemise de temp
oShell.run « explorateur » et sTempPath, 1, vrai
Sous-marin d'extrémité
|