هل لديك أي رمز مجاني .NET المدارة لتحويل DOCX إلى PDF؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

في مشروع الويب الخاص بي ، أستخدم نوع ملف DOCX لتحتوي على قالب التقرير. أحتاج إلى تحويل نوع ملف DOCX إلى PDF. هل لديك أي رمز مُدار .NET للقيام بذلك؟

أعرف عدة طرق لحل هذا السؤال. لكنه لا يتم إدارته رمزًا ومجانيًا مثل العناصر التالية.

  • Word 12.0 Object Library لحفظ مستند Word 2007 بشكل برمجي إما كمستند PDF أو مستند XPS. لكنه يتطلب تثبيت Office 2007 على الخادم.

  • اطبع باستخدام بعض طابعة PDF المجانية مثل محرر ملفات بي دي إف. لكنني بحاجة إلى بعض البرامج لـ Open Docx على الخادم مثل Office 2007. إنها فكرة سيئة للغاية.

  • تحويل بواسطة برنامج التحويل المجاني. لكن النتيجة ليست مثالية.

  • استخدام إطار مثل خادم عرض XF. إنها فكرة جيدة جدًا لكنها ليست مجانية.

  • قم بإنشاء جميع محتوى المستند في PDF API مثل itextSharp. لكن يجب أن أحاول بجد لإنشاء وثيقة لطيفة.

  • أو إنشاء مستند قالب مع تنسيق ملف آخر يمكنه تصديره إلى تنسيق ملف DOCX و PDF. علاوة على ذلك ، يجب على المستخدمين النهائيين تحرير هذا الملف بسهولة. إذا كنت تعرف، من فضلك قل لي.

شكرًا،

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

المحلول

ليس لدي رمز لتحويل DOCX إلى PDF ، ولكن يبدو أن متطلباتك لـ DOCX ليس ثابتًا. آخر رصاصة لك تقول:

أو إنشاء مستند قالب مع تنسيق ملف آخر يمكنه تصديره إلى تنسيق ملف DOCX و PDF. علاوة على ذلك ، يجب على المستخدمين النهائيين تحرير هذا الملف بسهولة. إذا كنت تعرف، من فضلك قل لي.

قرأت هذا ليعني أنك تريد أن تكون قادرًا على إنشاء مستند قالب ، وملء البيانات وتغطيةها إلى PDF ، ومع ذلك ، السماح بصيانة القالب ، أليس كذلك؟

الحل: XSL-FO

XSL-FO هو معيار W3C مثل HTML ويمكن تحويله بعدد من المنتجات المفتوحة والتجارية إلى PDF ، WordML ، XPS ، PS ، PCL ، SVG ، TIFF ، إلخ. لقد استخدمت هذا لتسليم مئات الآلاف من المستندات في الشهر ، سواء عبر الإنترنت كـ PDFs وغير متصل (أشياء مثل الطباعة بالجملة).

لتبدأ ، إليك صفحة W3C لـ XML-FO. هناك الكثير من المعلومات الجيدة هناك ، بما في ذلك قائمة البرامج (المصدر المفتوح والعملي) أسفل الجانب الأيسر. لقد استخدمت شخصيا منتجين تجاريين يسمى IBEX PDF Creator و xep بواسطة Renderx. كلاهما منتجات ممتازة ، وهناك تطبيق C# المدارة بنسبة 100 ٪ للوصول إلى PDF يسمى fo.net حتى على codeplex. لم أحاول هذا ، لكن يجب أن ترضي معيارك "المجاني".

هناك عدد من الطرق التي يمكنك من خلالها تحرير القالب الذي سيتم إنشاء المستندات في XSL-FO. عادةً ما يكون هذا القالب هو XSLT الذي تنطبق عليه على بيانات XML الخاصة بك ، ولكن هذا ليس شرطًا. لقد بنيت هذه يدويًا ، لكنها منحنى تعليمي قليلاً. يمكنك البدء بمستند في XSL-FO وملء أقسام منه بالرمز ، تمامًا كما يمكنك HTML. الخبر السار هو ذلك هناك نكون عدد من محررين XSL-FO في الخارج. الأخبار السيئة هي أنه لا أحد أعرفه مجاني ، لكن العديد منها رخيصة وقد تجد شيئًا يفي بالمعيار المجاني مع القليل من googling. ومع ذلك ، هناك خيار واحد هو أنه يمكنك التحويل من Word باستخدام ورقة الأنماط (تجاري & مجانا).

نصائح أخرى

إن تثبيت Office 2007 واستخدام مكتبة كائن Word 12 هو بالتأكيد الخيار الذي سأذهب إليه (وقمت بذلك في بعض مشاريعي الخاصة).

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

اسمحوا لي أن أعرف إذا كنت تريد مثال C# لكلمة أتمتة يقوم بهذا التحويل (إنه تافهة للغاية).

أدريان


إليكم الكود الخاص بي ، تم نشره لجاسون. يعمل هذا مع Word 2007. تحتاج إلى تنزيل وتثبيت مصدر PDF من موقع Office Web:

using Microsoft.Office.Interop.Word;

...

object _read_only = false;
object _visible = true;
object _false = false;
object _true = true;
object _dynamic = 2;
object  _missing = System.Reflection.Missing.Value;

object _htmlFormat = 8;        
object _pdfFormat = 17;
object _xpsFormat = 18;

object fileName = "C:\\Test.docx";

ApplicationClass ac = new ApplicationClass();
//ac.Visible = true; // Uncomment to see Word as it opens and converts the document
//ac.Activate();

Document d = ac.Documents.Open(ref fileName, ref _missing, ref _true, ref _read_only, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _visible, ref _missing, ref _missing, ref _missing, ref _missing);

object newFileName = ((string)fileName).Substring(0, ((string)fileName).LastIndexOf(".")) + ".pdf";

d.SaveAs(ref newFileName, ref _pdfFormat, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing);

d.Close(ref _false, ref _missing, ref _missing);
ac.Quit(ref _false, ref _missing, ref _missing);

ac = null;

لذا ، Soul_master ، ما تقوله هو أنك لا تريد استخدام interop (على الرغم من أنك لا تقول السبب ، وهو ما سأكون مهتمًا بمعرفته) ، لا تريد أن تدفع مقابل مصدر تجاري ، و تريد نتائج مثالية؟

لا أستطيع مساعدتك ، أخشى. سوف يعطيك Interop نتائج مثالية ، في كل مرة ، ولديك بالفعل البرنامج. إذا لم تستخدم ذلك ، فسيتعين عليك تقديم تضحية - إما التكلفة أو الجودة.

هل لدى Open Office واجهة برمجة تطبيقات؟ سيكون ذلك على الأقل خيارًا مجانيًا؟

قم بإنشاء PDF باستخدام أداة إعداد تقارير مثل Activereports/Crystal Residents (أسهل بكثير من استخدام ItextSharp)

لقد قمت بحل مشاكلي مع DOCX إلى تحويل PDF مع مكون مجاني يسمى حرة spire.doc. يمكنك رؤية المزيد عنها هذا الموقع. من السهل جدًا استخدامك.

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