إضافة المسار النسبي لرسم خارجي في مستند XSL؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

أولاً ، لا أعرف الكثير عن XSL.

أنا أستخدم تطبيقًا يسمى DITA لإنشاء ملفات PDF. أحد الأشياء التي يتطلبها هو الكتابة فوق ملف XSL ؛ لإضافة تصميم مخصص.

أحاول إضافة رسم خارجي باستخدام مسار نسبي. لا يعمل ، إلا إذا قمت بتوفير المسار الكامل.

لا يعمل:

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="../../images/logo.png"/>
</fo:block>

تعمل:

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="/absolute/path/to/images/logo.png"/>
</fo:block>

لقد نظرت إلى الويب ، وقيل لاستخدام "File: Image.png" وموقع الويب الآخر الذي قيل لاستخدام "url (image.png)" ، لكن لم ينجح أي منهما.

ما الخطأ الذي افعله؟

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

المحلول

هذا سؤال قديم ولكن شيء يساء فهمه غالبًا عند العمل مع DITA-OT.
الشيء المهم الذي يجب معرفته هو أن المسار الخارجي النزيهي يتعلق بالعمل الفني DITA-OT.

أستطيع أن أفكر في طريقتان لإضافة الشعار.

الطريق السهل

نسخ logo.png في Arwork diretory

DITA-OT/demo/fo/cfg/common/artwork/logo.png

قم بتغيير مسار الرسومات XSL الخاص بك إلى

<fo:block text-align="center" width="100%">
  <fo:external-graphic src="Configuration/OpenTopic/cfg/common/artwork/logo.png"/>
</fo:block>

طريقة أصعب

من الممكن تغيير دليل العمل الفني الذي تأخذ منه DITA صوره بالإضافة إلى دليل الإخراج الذي سيتم استخدامه بواسطة FOP لتقديم PDF.

افتح ملف build.xml

DITA-OT/demo/fo/build.xml

جذر العمل الفني

تحديد دليل الجذر حيث يجب أن ينسخ DITA العمل الفني إلى الافتراضي

<property name="artwork.dir" value="${dita.map.output.dir}"/>

والتي ستضع الجذر على المكان الذي سيتم فيه حفظ PDF النهائي.

وجهة العمل الفني

حدد المسار الذي يجب تخزين الملفات بالنسبة إلى دليل جذر العمل الفني

<copy todir="${coreArtworkDestinationDir}/Configuration/OpenTopic"

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

مصدر العمل الفني

حدد المكان الذي يتم فيه حفظ العمل الفني الأصلي بحيث يمكن لـ DITA-OT نسخ الملفات إلى الوجهة.
يشير السطر الأول إلى العمل الفني الافتراضي الذي يأتي مع DITA-OT ويجب عدم تغييره.

<fileset dir="${basedir}" includes="cfg/common/artwork/**/*.*"/>

والثاني مخصص للتخصيص وبالتالي كونه الشخص الذي ينبغي استخدامه للتخصيص.

<fileset dir="${customization.dir}" includes="common/artwork/**/*.*"/>

المسار بالنسبة إلى DITA-OT/DEMO/FO/التخصيص.

نصائح أخرى

واجهت مشكلة مماثلة واكتشفت في منتدى آخر أن المشكلة هي النموذج لتعيين مسار "المؤسسة" ، لأن مسار المؤسسة يجب أن يكون له ملف البادئة ":".

هنا طريقة في C# لإنشاء PDF مع الصور:

   private string CreatePDF(string fileToCreate, string templateFile)
   {
       org.apache.fop.configuration.Configuration.put("baseDir", "file:" + AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["ImagesPath"] + @"\");

       //Load the style sheet.
       XslCompiledTransform xslt = new XslCompiledTransform();
       xslt.Load(templateFile);

       //Execute the transform and output the results to a file.
       xslt.Transform(fileToCreate, "temp.fo");

       FileInputStream streamFO = new FileInputStream("temp.fo");
       InputSource src = new InputSource(streamFO);

       string pdfFilesPath = ConfigurationManager.AppSettings["PDFFilesPath"];
       if (!Directory.Exists(pdfFilesPath))
       {
           Directory.CreateDirectory(pdfFilesPath);
       }

       pdfFilesPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["PDFFilesPath"];

       string fileName = fileToCreate.Substring(fileToCreate.LastIndexOf(@"\") + 1, fileToCreate.LastIndexOf(".") - 1 - fileToCreate.LastIndexOf(@"\")) + ".PDF";
       FileOutputStream streamOut = new FileOutputStream(pdfFilesPath + @"\" + fileName);
       Driver driver = new Driver(src, streamOut);

       driver.setRenderer(1);
       driver.run();
       streamOut.close();

       return fileName;
   }

يعتبر! جبريل.

أود أن أقول إن لديك تعارضًا بين المكان الذي تعتقد أنك فيه وأين يعتقد محرك المعالجة. المسارات المطلقة تعمل دائما. حاول التحقق من موقع "الحالي" وسترى ما يحدث.

يكون المسار نسبة إلى موقع مستند XML ، وليس موقع ورقة الأنماط.

تحتاج إلى ضبط baseDir قبل الرجوع إلى أي مورد خارجي. هذه يمكن أن يساعدك النشر في هذا.

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