كيف يمكنني تحويل صفحة ColdFusion إلى تنزيل PDF؟

StackOverflow https://stackoverflow.com/questions/73964

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في تحويل HTML الذي تم إنشاؤه بواسطة صفحة CFM الخاصة بي إلى ملف PDF، ومطالبة المستخدم باستخدام المطالبة القياسية "حفظ باسم" عند الانتقال إلى صفحتي.

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

المحلول

يجب عليك استخدام علامة cfdocument (بتنسيق = "PDF") لإنشاء ملف PDF عن طريق وضعه حول الصفحة التي تقوم بإنشائها.ستحتاج إلى تحديد سمة اسم الملف، وإلا فسيتم بث المستند مباشرة إلى متصفحك.

بعد حفظ المحتوى كملف PDF، استخدم cfheader وcfcontent معًا لإخراج ملف PDF كمرفق ("حفظ باسم") وإضافة الملف إلى تدفق الاستجابة.لقد قمت أيضًا بإضافة حذف الملف = "نعم" على علامة cfcontent للحفاظ على نظافة نظام الملفات من الملفات.

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    Hello World
</body>
</html>
</cfdocument>
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf">
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes">

جانبا:أنا فقط أستخدم file.pdf لاسم الملف في المثال أدناه، ولكن قد ترغب في استخدام بعض السلاسل العشوائية أو التي تم إنشاؤها من خلال الجلسة لاسم الملف لتجنب المشكلات الناتجة عن حالات السباق.

نصائح أخرى

إذا كنت تريد تجنب تخزين ملف PDF على الإطلاق، فإن استخدام cfdocument بدون اسم ملف سيؤدي إلى إرسال ملف pdf (من ورق الفلاش) مباشرة إلى المتصفح دون استخدام cfheader وcfcontent.

تنبيه قضائي:كما هو الحال مع استخدام cfheader/cfcontent، يتعين عليك القيام بذلك قبل أن يتم مسح ذاكرة التخزين المؤقت في المتصفح، نظرًا لأنه يقوم بنفس الشيء دون الحاجة إلى تخزين الملف.

للحصول على المحتوى، من المحتمل أن أستخدم cfsavecontent ملفوفًا حول نفس المكالمات/يتضمن/إلخ.التي تنشئ الصفحة، مع استثناءين رئيسيين.يبدو أن cfdocument به مشكلات مع أوراق الأنماط الخارجية، لذا فإن استخدام التضمين لوضع الأنماط مباشرة في المستند ربما يكون فكرة جيدة.يمكنك تجربة استخدام @import بدلاً من ذلك - فهو يعمل مع بعض الأشخاص.وأيضًا، سأكون حذرًا بشأن الروابط النسبية للصور، لأنها قد تنقطع في بعض الأحيان.

ال <cfdocument> النهج هو الطريقة المعتمدة لإنجاز ذلك، إلا أنه لا يقدم كل ما هو ممكن في طريقة التعامل مع مستندات PDF الموجودة.كان لدي مشروع حيث كنت بحاجة إلى إنشاء قسائم بناءً على قالب PDF عالي الدقة مصمم مسبقًا. <cfdocument> كان سيسمح لي بتقريب المخرجات، ولكن فقط مع الصور النقطية المضمنة في HTML.صحيح، كان بإمكاني تزييف دقة الطباعة عن طريق إنشاء صورة كبيرة وقياسها بتنسيق HTML، لكن الملف الأصلي كان ملف صورة جميلًا ونظيفًا ومتجهًا وأردت استخدامه بدلاً من ذلك.

انتهى بي الأمر باستخدام نسخة من <cfx_pdf> لإنجاز هذه المهمة.(موقع المطور, متجر علامات CF) عبارة عن غلاف CF حول مكتبة Java PDF يتيح لك التعامل مع مستندات PDF الموجودة، بما في ذلك ملء نماذج PDF، وتعيين الأذونات، ودمج الملفات، ورسم الرسومات المتجهة، والجداول، والنص، واستخدام الخطوط المخصصة، وما إلى ذلك.إذا كنت على استعداد للعمل معها، يمكنك الحصول على بعض النتائج المذهلة.

العيب الوحيد هو أنه يبدو أن المطور قد ترك هذا المنتج في الخارج لفترة طويلة.لا يزال موقع المطور محمي بحقوق الطبع والنشر لعام 2003 ولا يذكر أي شيء يتجاوز ColdFusion MX 6.1.وانتهى بي الأمر إلى كسر بعض القوالب المشفرة لإصلاح بعض الأخطاء وجعلها تعمل حسب حاجتي إليها.ومع ذلك، فهي أداة قوية.

لست على دراية بـ ColdFusion، ولكن ما عليك فعله هو تعيين نوع محتوى الصفحة عندما يطلب المستخدم أن تكون تطبيقًا/ثمانية دفق.سيطالبهم هذا بالتنزيل في كل مرة.

أتمنى أن يساعدك هذا!

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