سؤال

لذلك ، أنا أستخدم ماثيو إفرايم Ghostscriptsharp, ، وهو عبارة عن غلاف C# بسيط لـ Win32 Ghostscript DLL غير المدير في مشروع ASP.NET MVC الخاص بي. بعض الخلفية:

ما أحاول القيام به هو أن يكون لديك مستخدم يقوم بتحميل ملف PDF ، ثم تحويل هذا المستند إلى صورة يمكنني بعد ذلك حفظها في أي دليل أختاره (وكذلك القيام ببعض OOP لربط هذه الصورة الجديدة إلى موقعي) .

قررت استخدام فئة غلاف السيد إفرايم (GhostscriptSharp) لأنه كان بسيطًا بما يكفي للاستخدام ، ويمنحني الوصول النظيف نسبيًا إلى واجهة برمجة تطبيقات DLL.

لاختبار ذلك ، قمت بإنشاء تطبيق وحدة C# Dummy C# للتأكد من أنه يمكنني تحميل DLL ، والوصول إليه ، وتسليمه ملف PDF على القرص المحلي ، ثم جعلها تكتب JPG إلى نفس القرص المحلي. بعد بضع تجارب تعليمية ، حققت نجاحًا. أود تسليمها c: input.pdf ، سوف يسلمني c: output.jpg.

ومع ذلك ، بعد دمج رمز GhostscriptSharp الذي كان لدي في تطبيق وحدة التحكم في مشروع ASP.NET MVC الخاص بي إلى درجة كنت أتصل بـ DLL مع P/Invoke ، يعود Ghostscript مع رمز INT/ERRO -100, ، وهو خطأ فادح (يسمى E_Fatal في رمز مصدر Ghostscript). أحصل على نفس النتيجة مع كل من الملف الذي تم تحميله من خلال نموذج HTML ، وإذا قمت بتسليمه نفس المسارات المرمزة التي استخدمتها في تطبيق وحدة التحكم الخاصة بي.

للرجوع إليها ، فإن الخطوط التي يتم إلقاؤها هي 93-97 في Ghostscriptsharp.cs (وهو في CallApi وظيفة):

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

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

من الواضح أن الاستثناء قد تم إلقاؤه بسبب result هو -100.

عندما يتم استدعاء initapi ، فإن المثيل PTR صالح int (على الرغم من أنني لا أعرف ما إذا كان مثيل GS صحيحًا أم لا) ، فإن Args يبلغ طوله 20 ( string[]) من خيارات Ghostscript صالحة (بما في ذلك المسارات ذات الإثارة والملفات الخاصة بي بشكل صحيح).

قصة قصيرة طويلة ، ماذا أفعل خطأ؟ رمز الخطأ -100 يبدو وكأنه جذب للجميع لأنه لا يوجد وثائق تنص على ما يمكن أن يحدث خطأ هنا.

أي مساعدة موضع تقدير كبير ، شكرًا لك مقدمًا.

هل كانت مفيدة؟

المحلول 3

لذلك ، انتهى الأمر بكونه خطأ ID10T الذي كان يخرجني هنا في هذه الحالة المحددة.

في رمز Matthew Ephraim's GhostscriptSharp ، يستخدم اثنين من التعدادات لتحديد الخيارات المنصوص عليها في Ghostscript ، واثنان على وجه الخصوص كانا GhostscriptDevices و GhostscriptPageSizes التعداد. المشكلة هي أن الطريقة التي يتم بها كتابتها Resharper (المكون الإضافي لـ JetBrains Visual Studio) لديها قواعد افتراضية لتسمية أعضاء التعداد. لا أفكر ، لقد أصلحت كل هذه التعريفات لإرضاء عدم إدراك أن هذه قد انتقلت مباشرة إلى Ghostscript ، لذا بدلاً من الحصول عليها a7 إلى عن على -sPAPERSIZE كانت GS تحصل A7, ، ولل -sDEVICE كان يحصل Jpeg بدلاً من jpeg.

في الوقت الحالي ، لم تكن الأذونات مشكلة في نهايتي ، ولكن فقط لأنني أقوم بتشغيل خادم اختبار Dev Cassini في Visual Studio.

بفضل MarkRedman و TvanFosson على اقتراحاتهم المفيدة!

نصائح أخرى

الخطأ -100 هو "خطأ فادح" عام في Ghostscript.

بعض الأشياء للتحقق:

1) أذونات (تتطلب عمليات AL الوصول إلى الملف)

2) النطاق ، تريد إضافة مجلد بن GS إلى متغيرات المسار

3) فكر في عدم استدعاء Ghostscript مباشرة من ASP.NET ، يمكن أن تكون GS مكثفة للغاية في وحدة المعالجة المركزية ، وبدلاً من ذلك الملفات في خدمة منفصلة

لقد قمت أيضًا بإنشاء غلاف ، أرسل لي بريدًا إلكترونيًا (عنوانًا في الملف الشخصي) وسأرسله لك. يسمح للمرء بالمرور في مجلد GS Bin الذي يساعد.

على الأرجح ، لا تملك العملية تشغيل تطبيق الويب إذنًا للكتابة إلى الدلائل التي تستخدمها. أقترح إنشاء دليل محدد لتطبيق التطبيق ومعرف محلي لاستخدامه لتشغيل تجمع التطبيقات ، ثم أعط هذا المعرف امتيازات كافية لقراءة/كتابة الدليل الذي أنشأته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top