2017-02-06 1 views
0

Essayer de comprendre comment utiliser memoryStream et renvoyer des images à l'aide de Ghost Script. Voici le code ainsi que l'erreur que je reçois une fois que j'exercerai rasterizer.Open:Erreur GhostScript irrécupérable: nom de fichier indéfini

public static System.Drawing.Image PDFToImage(MemoryStream inputMS) 
    { 
     GhostscriptRasterizer rasterizer = null; 
     GhostscriptVersionInfo version = null; 
     if (Environment.Is64BitProcess) 
      version = new GhostscriptVersionInfo(
       new Version(0, 0, 0), @"C:\Program Files\gs\gs9.20\bin\gswin64.exe", 
       string.Empty, GhostscriptLicense.GPL); 
     else 
      version = new GhostscriptVersionInfo( 
       new Version(0, 0, 0), @"C:\Program Files (x86)\gs\gs9.20\bin\gswin32.exe", 
       string.Empty, GhostscriptLicense.GPL); 

     int dpi = 96; 
     System.Drawing.Image img = null; 

     using (rasterizer = new GhostscriptRasterizer()) 
     { 
      rasterizer.Open(inputMS, version, true); 

      for (int i = 1; i <= rasterizer.PageCount; i++) 
      { 

       using (MemoryStream ms = new MemoryStream()) 
       { 
        img = rasterizer.GetPage(dpi, dpi, i); 
        img.Save(ms, ImageFormat.Jpeg); 
        ms.Close(); 
       } 

      } 
      rasterizer.Close(); 
     } 
     return img; 
    } 

GhostScriptConsole

Répondre

1

Le problème est que vous pointez sur le fichier exe au lieu de dll. Lorsque vous remplacez 'gswin64.exe' par 'gsdll64.dll' (identique pour la version 32 bits) votre code devrait fonctionner.

+1

Merci pour la réponse Habjan.Il convertit le PDF en une image maintenant! – Crumblenautjs

1

Eh bien, Ghostscript vous dit qu'il ne peut pas ouvrir le fichier «/config: C: \ Utilisateurs \ Sean.McNary \ ApexRemington \ .vs \ config \ applicationhosts.config 'car (pas tout à fait sans surprise avec un tel nom de fichier brouillé), il ne peut pas trouver le fichier.

Je suppose que vous utilisez une sorte de wrapper autour de Ghostscript (qui est une DLL écrite en C), parce que vous utilisez apparemment C#, il serait utile si vous étiez d'indiquer ce que vous utilisez là.

Il ressemble à n'importe quel wrapper que vous utilisez, il s'attend à recevoir un nom de fichier d'entrée, et passe simplement cela à Ghostscript. Bien qu'il soit possible de transmettre des données de la mémoire à Ghostscript et que le résultat rendu soit renvoyé en mémoire, sachez que si l'entrée est un fichier PDF, vous n'enregistrez rien, car Ghostscript spoulera toute l'entrée dans un fichier PDF. fichier temporaire avant de le traiter Vous devez rechercher autour d'un fichier PDF, vous devez donc avoir un accès aléatoire, d'où son écrit en tant que fichier.

Vous devrez déboguer dans votre emballage et voir ce que ça fait.

+0

Hey @KenS. J'utilise GhostScript.NET. Ce que j'essaye d'accomplir est de passer dans le flux de mémoire de ce pdf, et de renvoyer une image. Ensuite, je veux convertir cette image en un flux, où je vais l'ajouter à une file d'attente de flux, et imprimer tous les flux. La raison pour laquelle je ne convertis pas le PDF directement dans un flux et que je fais stream.enqueue (PDF) est parce que quand je fais cela, j'obtiens une erreur générique GDI +. La file d'attente d'origine des flux sont des images. Si vous connaissez une meilleure façon de le faire, alors je suis tout à fait pour. – Crumblenautjs

+0

Vous devez ajouter le tag Ghostscript.net à votre question, afin que l'auteur puisse le remarquer et le commenter. Je ne suis pas un programmeur C#, donc je n'ai aucune idée de ce que vous essayez vraiment de réaliser, je crains de ne pas comprendre votre explication :-(Mon point principal était que le passage d'un fichier PDF 'en mémoire' signifie seulement que Ghostscript l'écrit comme un fichier temporaire, cela ne vous évitera rien: Si vous cherchez à imprimer un fichier PDF sur une imprimante, Ghostscript peut déjà le faire en utilisant l'appareil mswinpr2, probablement mieux car il rendra à résolution de l'imprimante – KenS

+0

Ghostscript.NET ne fonctionne pas avec ghostscript exe Vous devriez le pointer vers ghostscript dll – HABJAN