2010-06-17 6 views
14

J'essaie de convertir un document PDF en un fichier PNG en utilisant les outils de ligne de commande ImageMagick à partir d'un site Web ASP.NET. Je crée un nouveau processus shell et il ahve exécutez la commande suivante:Erreur "Paramètre invalide" fom ImageMagick convertir sur Windows

convert -density 96x96 "[FileNameAndPath].pdf" "[FileNameAndPath].png" 

Cela fonctionne bien pour tester le site sur ma machine locale avec le ASP.NET Develeopment serveur de VS et la commande fonctionne aussi bien quand manuellement entré dans la coquille. Lors de l'exécution de la coquille créé dans ASP.NET programatically il y a le message d'erreur suivant:

Invalid Parameter - 96x96 

Quelqu'un sait-il pourquoi cela se produit et ce qu'il faut faire?

J'ai testé la commande en étant connecté sur le serveur via RDP avec un compte d'utilisateur différent du processus ASP.NET. J'ai utilisé exactement les mêmes fichiers d'installation ImageMagick et Ghostscript que sur ma machine locale et j'ai activé l'ajout du chemin d'installation d'ImageMagick aux variables enironment lors de l'installation. Le serveur n'a pas été redémarré depuis.

+0

Pouvez-vous montrer la ligne de commande complète qui ne fonctionne pas s'il vous plaît? (Avec des noms de fichiers réels) –

+0

Et êtes-vous sûr de pouvoir appeler l'exécutable ghostscript à partir du shell créé par programmation? –

+0

La ligne de commande complète est converti -density 96x96 "C: \ inetpub \ wwwroot \ UserData \ Pdf \ f18196da-571c-45a6-b99b-615fb3edb454.pdf" « C: \ inetpub \ wwwroot \ UserData \ Pdf \ f18196da- 571c-45a6-b99b-615fb3edb454.png " Je pensais que convertir appelait gs lorsque le format d'entrée était PDF et converti à partir de l'invite du shell. Je n'ai pas testé ça. –

Répondre

3

Dans Windows existe réellement un "convert.exe" dans system32 - assurez-vous que votre script ne démarre pas celui-là (peut-être que les chemins d'environnement sur votre machine de développement sont définis différemment).

42

convert est également le nom d'un exécutable Windows qui convertit le système de fichiers FAT en NTFS. Lorsque vous ne spécifiez pas le chemin complet d'un exécutable, je cite:

... le système recherche d'abord le répertoire de travail en cours puis recherches le path environment variable, l'examen de chaque répertoire de gauche à droite, à la recherche d'un nom de fichier exécutable qui correspond au nom de commande donné.

"C: \ Windows \ System32" est généralement présent en début de variable% PATH%, ce qui provoque l'de Windows utilitaire de conversion pour lancer, qui échoue avec l'erreur "Paramètre non valide" comme prévu.

Essayez spécifiant le chemin complet de la convert.exe de ImageMagick comme ceci:

"C:\Program Files\ImageMagick\convert.exe" -density 96x96 "path_and_filename.pdf" "path_and_filename.png" 
+2

mon C: \ Program Files \ ImageMagick \ ne contient pas de convertisseur.exe. Est-ce que quelqu'un sait ce que l'exe à pointer dans de nouvelles constructions d'imagemagic? – ScottF

+3

Je viens d'installer la dernière version et on dirait qu'elle s'appelle 'magick.exe'. –

+0

En *** cygwin *** en utilisant _ImageMagick_ la même erreur – Kiquenet

1

oui! si vous lancez une fenêtre de commande de l'administrateur, C: \ windows \ sytem32 \ ... par défaut, la commande ramassera ImageMagick convert.exe

Mon problème était que j'utilisais le "FORFILES" commande qui est difficile car elle nécessite d'utiliser "cmd/c" et de passer la commande convert avec les paramètres @path et @file et il y a des échappements de barres obliques ... inutile de dire que ça m'a causé des heures et des heures de maux de tête . Il analyse même les caractères hexadécimaux, comme si votre chemin de fichier a la combinaison 0x00 dedans, il pensera que c'est une valeur hexadécimale et écrase votre chemin. J'avais un chemin de fichier nommé C:\ImageRes3000x3000 et FORFILES l'interprète littéralement et cela a causé un problème de chemin étrange. Désolé s'il s'agit d'un long post inutile, mais il est destiné à être FYI, si quelqu'un court à travers cela, peut-être que cela va les aider. Cela étant dit, FORFILES et "convert.exe" sont un combo puissant et simple de changement de nom de ligne.

voici tout mon script changement de nom d'image 3 ligne

robocopy D:\SRC_DIR\ D:\DEST_DIR\_staging *.jpg /e /MAXAGE:2 
FORFILES /P D:\DEST_DIR\_staging\ /S /M *.jpg /C "cmd /c convert.exe @path -quality 65 -resize 1500 D:\RESIZED_DIR\\@file" 
DEL D:\DEST_DIR\_staging\*.* /S /Q 
+0

Chemin de votre script? Système Windows Path? 'cmd/c' sera * C: \ windows \ sytem32 * chemin? Où le chemin d'installation _ImageMagick_? avez-vous plus de scripts qui utilisent ** ImageMagick ** dans le même chemin? – Kiquenet

2

quelques autres options pour la fixation de ce:

  • Modifier votre variable système Path pour contenir le chemin vers ImageMagick comme il est le premier contenu puis ajoutez le reste après. Cela fera Windows toujours trouver le imagemagic convert d'abord avant qu'il trouve l'autre programme de conversion. Donc, quelque chose comme ceci: C:\Program Files\ImageMagick-6.9.2-Q16;C:\Program Files\Haskell Platform\2014.2.0.0\lib\extralibs\bin;...

  • Une autre option consiste à créer un dossier dédié quelque part sur votre machine où vous allez placer des raccourcis pour certains de ces conflits de noms. Ensuite, ce que vous faites est que vous renommez ces raccourcis en noms significatifs, par exemple convert_image_magick, puis ajoutez le chemin d'accès à ce dossier à votre chemin d'accès système. Alors maintenant que vous appuyez sur l'onglet plus, vous allez enfin trouver le bon programme que vous voulez exécuter

0

Comme d'autres ont déclaré convert des points à un autre programme dans votre PATH. Préférez plutôt votre commande avec magick. Donc, votre commande serait plutôt:

magick convert -density 96x96 "[FileNameAndPath].pdf" "[FileNameAndPath].png" 
Questions connexes