Frage

Also, ich bin mit Matthew Ephraim GhostscriptSharp , das ist ein einfacher C # Wrapper für die nicht verwaltete Win32 Ghost DLL in meinem ASP.Net MVC-Projekt. Einige Hintergrundinformationen:

Was ich versuche zu tun haben ein Benutzer eine PDF laden und wandeln dann das Dokument in ein Bild, das ich dann in sparen off kann, was Verzeichnis ich wählen (wie auch einige andere OOP tun, um dieses neue Bild binden zu meine Seite).

habe ich beschlossen, Herr Ephraim-Wrapper-Klasse zu verwenden (GhostscriptSharp), weil es einfach genug zu bedienen war, und es gibt mir relativ sauberen Zugriff auf die API-DLL.

Um es zu testen, habe ich eine Dummy-C # Konsolenanwendung, um sicherzustellen, konnte ich die DLL laden, darauf zugreifen, hand es eine PDF-Datei auf der lokalen Festplatte und dann haben sie ein JPG mit der gleichen lokalen Festplatte zu schreiben. Nach ein paar Lernerfahrungen hatte ich Erfolg. Ich würde geben es C: \ Eingabe.pdf, es würde reichen Sie mir C: \ OUTPUT.jpg.

Doch nach dem GhostScriptSharp Code zu integrieren, dass ich in der Konsolenanwendung in mein ASP.NET MVC-Projekt bis zu dem Punkt, wo ich war die DLL mit P / Invoke-Aufruf wird Ghostscript mit dem int / Fehlercode -100 Rückkehr das ist ein schwerwiegender Fehler (E_Fatal wird in dem Quellcode Ghost genannt). Ich bekomme das gleiche Ergebnis sowohl mit der Datei, die durch das HTML-Formular hochgeladen, und wenn ich es genau die gleichen hartcodierte Pfade Hand, die ich in meiner Arbeit Konsolenanwendung verwendet wird.

Als Referenz, die die Linien die Ausnahme ausgelöst wird, sind 93-97 in GhostScriptSharp.cs (die in der CallApi Funktion ist):

int result = InitAPI(gsInstancePtr, args.Length, args);

if (result < 0) {
  throw new ExternalException("Ghostscript conversion error", result);
}

Offensichtlich ist die Ausnahme ausgelöst wird, weil result -100 ist.

Wenn InitAPI genannt wird, ist die Instanz ptr eine gültige int (obwohl ich weiß nicht, ob die Instanz von GS korrekt ist oder nicht), hat args eine Länge von 20 (ein string[]) gültigen Ghostscript-Optionen (einschließlich die richtig-escaped Pfade zu meinen Input & Output-Dateien).

Lange Rede kurzer Sinn, was mache ich falsch? Der Fehlercode -100 scheint wie ein Catch-all, weil es keine Dokumentation ist, dass die Staaten, was möglicherweise falsch hier gehen könnten.

Jede Hilfe ist sehr geschätzt, danke im voraus.

War es hilfreich?

Lösung 3

So wird ein ID10T Fehler endete, die mich hier in diesem speziellen Fall wurde entgleist.

In Matthew Ephraim GhostscriptSharp Code, verwendet er ein paar Aufzählungen die Optionen für Ghostscript weiter zu definieren, und zwei waren vor allem die GhostscriptDevices und GhostscriptPageSizes Aufzählungen. Das Problem ist, wie sie geschrieben sind ReSharper (Jetbrains Visual Studio Plugin) hat Standardregeln für Enum-Mitglieder zu benennen. Nicht denken, fest ich dieser Definitionen alle ReSharper nicht ahnend, dass diese weitergegeben direkt an Ghostscript, so anstatt sich a7 für -sPAPERSIZE GS wurde immer A7 und für -sDEVICE es wurde Jpeg statt jpeg zu gefallen.

Für die vorläufig Berechtigungen waren kein Problem auf meinem Ende, aber nur, weil ich den Cassini Web-Entwickler Test-Server in Visual Studio ausgeführt werden.

Dank @MarkRedman und @tvanfosson für ihre hilfreichen Anregungen!

Andere Tipps

Der -100 Fehler ist ein allgemeiner "fataler Fehler" in Ghostscript.

Ein paar Dinge zu überprüfen:

1) Berechtigungen (Al Operationen erfordern Dateizugriff)

2) Scope, möchten Sie den GS Binärordner auf die PATH-Variablen hinzufügen

3) Betrachten Sie nicht Ghostscript direkt von asp.net aufrufen, können GS sehr viel CPU-Kapazität, sondern Prozessdateien in einem separaten Service

Ich habe auch einen Wrapper erstellt, senden Sie mir eine E-Mail (Adresse im Profil) und ich werde es Ihnen. Es ermöglicht eine in der GS Binärordner passieren, das hilft.

Höchstwahrscheinlich wird der Prozess die Web-Anwendung läuft nicht über die Berechtigung für die Verzeichnisse zu schreiben, dass Sie verwenden. Ich würde vorschlagen, einige spezifische Verzeichnis für die App nutzen zu schaffen und eine lokale ID zu verwenden, um die app-Pool zu laufen, dann geben, dass id genügend Berechtigungen zum Lesen / Schreiben Sie das Verzeichnis erstellt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top