0 votes

Problème de conversion de pages PDF en images avec ImageMagick's convert (et PHP)

J'essaie de créer un petit service web pour convertir des fichiers PDF en une série d'images.

Quand je cours convert /full/path/to/source.pdf full/path/to/target.jpg lors de la connexion au serveur [Mediatemple (gs)] via ssh, tout fonctionne correctement.

Lorsque l'on exécute la même commande par l'intermédiaire de la fonction exec() seules les premières pages du fichier PDF sont converties. Parfois, les pages restantes sont des fichiers jpg de longueur nulle, parfois elles n'apparaissent pas du tout.

De plus, la partie inférieure des premières pages est parfois noire, comme si la conversion s'était arrêtée à mi-chemin de la page.

Quelle pourrait être la cause de ce problème ?

MISE À JOUR :

J'utilise set_time_limit(0).

Si je suis connecté via SSH et que je lance la commande convert -limit area 90 ... L'opération s'achève avec succès au bout de 30 secondes environ. Lorsque l'on fait la même chose via la fonction exec() de PHP, elle s'exécute pendant ~90 secondes et produit des images cassées (comme décrit ci-dessus) en sortie.

Existe-t-il un moyen simple de faire en sorte que la tâche de conversion s'exécute avec les mêmes privilèges et ressources qu'à partir de SSH ?

Par ailleurs, étant donné qu'il doit être très frustrant de travailler autour d'un problème de serveur sur lequel je n'ai que peu de contrôle, existe-t-il un bon service web (API) qui permettrait de convertir les PDF en images ?

0voto

Pekka 웃 Points 249607

Concernant votre mise à jour : pouvez-vous essayer de convertir un tout petit PDF pour voir s'il s'agit finalement d'un problème de mémoire ?

De plus, ImageMagick dispose d'une fonction debug option de ligne de commande :

convert -debug "All" /full/path/to/source.pdf full/path/to/target.jpg

Je pense qu'il débogue vers stdout, il faudrait attraper ce qu'il enregistre et le sortir. Manuel aquí

Autre chose, je pense que pour convertir les PDF, ImageMagick doit appeler ghostscript (je pense que le binaire est gs ). Pouvez-vous essayer de vous assurer que cette fonction peut être appelée avec les droits de l'utilisateur sous lequel PHP s'exécute ? ImageMagick devrait renvoie une erreur si ce n'est pas le cas, mais on ne sait jamais.

0voto

Joel L Points 2209

J'ai abandonné l'idée de faire fonctionner l'application sur un serveur partagé, et je l'ai déplacée sur un autre serveur - tout fonctionne parfaitement maintenant.

Je pense que les limites de ressources du serveur (principalement une limite de mémoire) interféraient avec ImageMagick, et ce de manière très incohérente. La limitation de l'utilisation de la mémoire d'ImageMagick produisait toujours des erreurs et ne permettait pas de convertir les fichiers avec succès.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X