سؤال

أنا أعمل على تطبيق ويب يتيح للمستخدمين تنزيل ملفات PDF التي تم إنشاؤها ديناميكيًا.

هذا يعمل بشكل جيد في IE8 و Firefox لكنه فشل في IE6 مع Adobe Reader مع إعطاء الرسالة "كان هناك خطأ في فتح هذا المستند. لا يمكن العثور على هذا الملف"

إذا قمت بحفظ الملف على القرص أولاً ، فهو يفتح بشكل جيد في القارئ.

لقد أعطيت الملف اسم ملف قصير بسيط ، بدون مسافات ، لست متأكدًا مما يجب تجربته. أي اقتراحات مرحب بها للغاية.

مزيد من المعلومات: يتم إنشاء PDF في رمز ASP.NET باستخدام المكون الإضافي ABCPDF

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

المحلول

نصائح أخرى

هل هناك حقًا حاجة لدعم IE6 على صفحة الويب الخاصة بك؟ هل سيكون الحل الصحيح هو مجرد مطالبة المستخدمين بالترقية إلى إصدار لاحق من IE؟

توفي IE6 قبل شهرين ونصف. ((IE6 جنازة)

ربما بسبب إعداد المهلة في Adobe Reader ActiveX لـ IE. يمكنك الرد على المتصفح بمستند انتهى جزئيًا ، ثم استغرق برنامجك بعض الوقت لمواصلة الاستجابة لبقية المستند وقارئ Adobe Timeottated. حاول إنشاء مستند PDF بالكامل ثم الرد على طلب HTTP. على سبيل المثال في PHP.

$s = "";
for(int i=0;i<10;i++)
    $s .= "1";
echo #s;

بدلاً من

for(int i=0;i<10;i++)
    echo "1";

أعتقد أنني لاحظت مثل هذا السلوك المزعج (الخطأ) الأكثر إزعاجًا في IE6 وإذا كنت أتذكر ، فإن سبب الخطأ هو أنه لم يتم تخزين الملف في ذاكرة التخزين المؤقت ولكن انتهت صلاحيته/تم حذفه على الفور. تحقق مما يلي:

  1. هل تقوم بإرجاع الملف عبر https؟
  2. تحقق من رؤوس الاستجابة ، أي شيء عن انتهاء الصلاحية؟
  3. هل تواجه نفس المشكلات مع الملف الذي يتم تقديمه بشكل ثابت (ولكن في نفس عنوان URL تقريبًا ، جرب ".../file.pdf" و ".../file.asp" مع متصفح Redirect to /file.pdf)

IMHO هذه مشكلة تفسير الرأس. أنا لست مألوفًا جدًا أو مغرمًا بـ ASP.NET ولكن على الأقل في PHP تحتاج إلى الحصول على هذه:

ob_start(); (* should be equivalent to HttpContext.Current.Response.Buffer = true *)

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=somefile.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//header('Content-Length: ' . filesize($file));

ob_flush(); (* should be equivalent to HttpContext.Current.Response.Flush() *)
** output the pdf contents here

(* header() should be similar to HttpContext.Current.Response.AddHeader() function *)

لاحظ هذا الإعداد Content-Length: معا مع content-disposition: قد يفشل المرفق في العمل في Safari و IE.

أتمنى أن يساعد ...

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