diff --git a/html/arabic/java/conversion-html-to-other-formats/_index.md b/html/arabic/java/conversion-html-to-other-formats/_index.md index 7c53c6411..b5c7da4bb 100644 --- a/html/arabic/java/conversion-html-to-other-formats/_index.md +++ b/html/arabic/java/conversion-html-to-other-formats/_index.md @@ -83,21 +83,15 @@ XPS هو صيغة الطباعة الخاصة بمايكروسوفت. باستخ ## التحويل - دروس تحويل HTML إلى صيغ أخرى ### [تحويل HTML إلى PDF](./convert-html-to-pdf/) -تعلم كيفية تحويل HTML إلى PDF في Java باستخدام Aspose.HTML. أنشئ ملفات PDF عالية الجودة من محتوى HTML بسهولة. ### [تحويل HTML إلى MHTML](./convert-html-to-mhtml/) -حوّل HTML إلى MHTML بسهولة باستخدام Aspose.HTML for Java. اتبع دليلنا خطوة بخطوة لتحويل HTML إلى MHTML بكفاءة. ### [تحويل HTML إلى XPS](./convert-html-to-xps/) -تعلم كيفية تحويل HTML إلى XPS بسهولة باستخدام Aspose.HTML for Java. أنشئ مستندات متعددة المنصات بسهولة. ### [تحويل Markdown إلى HTML](./convert-markdown-to-html/) -حوّل Markdown إلى HTML في Java بسلاسة مع Aspose.HTML for Java. اتبع دليلنا خطوة بخطوة لتبسيط احتياجات تحويل المستندات. ### [تحويل SVG إلى صورة](./convert-svg-to-image/) -تعلم كيفية تحويل SVG إلى صور في Java باستخدام Aspose.HTML. دليل شامل لإنتاج مخرجات عالية الجودة. ### [تحويل SVG إلى PDF](./convert-svg-to-pdf/) -حوّل SVG إلى PDF في Java باستخدام Aspose.HTML. حل سلس لتحويل المستندات بجودة عالية. ### [تحويل SVG إلى XPS](./convert-svg-to-xps/) -تعلم كيفية تحويل SVG إلى XPS باستخدام Aspose.HTML for Java. دليل بسيط خطوة بخطوة لتحويلات سلسة. ### [تحويل HTML إلى PDF في Java – دليل خطوة بخطوة مع إعدادات حجم الصفحة](./convert-html-to-pdf-in-java-step-by-step-guide-with-page-siz/) -تعلم تحويل HTML إلى PDF في Java مع إعدادات حجم الصفحة خطوة بخطوة باستخدام Aspose.HTML. +### [دليل html إلى pdf – تحويل HTML إلى PDF في Java خطوة بخطوة](./html-to-pdf-tutorial-convert-html-to-pdf-in-java-step-by-ste/) +### [تحويل Markdown إلى PDF في Java – دليل كامل خطوة بخطوة](./convert-markdown-to-pdf-in-java-full-step-by-step-guide/) ## الأسئلة المتكررة diff --git a/html/arabic/java/conversion-html-to-other-formats/convert-markdown-to-pdf-in-java-full-step-by-step-guide/_index.md b/html/arabic/java/conversion-html-to-other-formats/convert-markdown-to-pdf-in-java-full-step-by-step-guide/_index.md new file mode 100644 index 000000000..a7b00b81c --- /dev/null +++ b/html/arabic/java/conversion-html-to-other-formats/convert-markdown-to-pdf-in-java-full-step-by-step-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-06-03 +description: تحويل markdown إلى PDF باستخدام Java. تعلم كيفية إنشاء PDF من markdown + باستخدام مكتبة بسيطة وإنشاء PDF من ملف markdown في دقائق. +draft: false +keywords: +- convert markdown to pdf +- generate pdf from markdown +- create pdf from markdown file +- how to convert markdown to pdf +- convert markdown file to pdf +language: ar +og_description: حوّل الماركدون إلى PDF بسرعة. يوضح هذا الدليل كيفية إنشاء PDF من الماركدون، + وإنشاء PDF من ملف ماركدون، ويجيب على سؤال كيفية تحويل الماركدون إلى PDF. +og_title: تحويل ماركداون إلى PDF في جافا – دليل برمجة شامل +schemas: +- author: Aspose + dateModified: '2026-06-03' + description: Convert markdown to PDF using Java. Learn how to generate PDF from + markdown with a simple library and create PDF from markdown file in minutes. + headline: Convert Markdown to PDF in Java – Full Step‑by‑Step Guide + type: TechArticle +tags: +- Java +- Markdown +- PDF +- Document Conversion +title: تحويل Markdown إلى PDF في Java – دليل كامل خطوة بخطوة +url: /ar/java/conversion-html-to-other-formats/convert-markdown-to-pdf-in-java-full-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تحويل Markdown إلى PDF في Java – دليل خطوة‑بخطوة كامل + +هل تساءلت يوماً **كيف تحول markdown إلى pdf** دون مغادرة بيئة التطوير المتكاملة؟ لست وحدك. يحتاج العديد من المطورين إلى تحويل ملفات README، مسودات المدونات، أو المواصفات التقنية إلى ملفات PDF منسقة بشكل جميل للمشاركة، وإن القيام بذلك برمجياً يوفر الكثير من النسخ واللصق اليدوي. + +في هذا الدرس سنستعرض حلاً نظيفاً وجاهزاً للإنتاج **ينتج PDF من markdown** باستخدام عدد قليل فقط من تبعيات Maven. في النهاية ستتمكن من **إنشاء pdf من ملف markdown** ببضع أسطر من Java فقط، وسترى أيضاً كيفية التعامل مع الصور، CSS مخصص، والوثائق الكبيرة. + +> **Pro tip:** نفس النهج يعمل على تحويل ملفات markdown إلى صيغ أخرى (HTML, DOCX) – كل ما عليك هو استبدال المكوّن النهائي. + +## ما ستتعلمه + +- إعداد المكتبات المطلوبة (`flexmark-java` و `openhtmltopdf`). +- قراءة ملف markdown من القرص. +- تحويل markdown إلى HTML (الجسر بين markdown و PDF). +- تمرير HTML إلى مُولِّد PDF وكتابة ملف الإخراج. +- معالجة الحالات الشائعة مثل مسارات الصور النسبية وحروف Unicode. + +## المتطلبات المسبقة + +- JDK 17 أو أحدث (الكود يستخدم الكلمة المفتاحية `var` للاختصار، لكن يمكنك الرجوع إلى 11 إذا لزم الأمر). +- أداة بناء Maven أو Gradle (مثال Maven موضح). +- ملف markdown تريد تحويله – لأغراض العرض سنستخدم `readme.md` الموجود في مجلد يسمى `YOUR_DIRECTORY`. + +--- + +## الخطوة 1: إضافة مكتبات التحويل + +أولاً، استورد مكتبتين مُصانعتين جيداً: + +| المكتبة | لماذا نحتاجها | إحداثيات Maven | +|---------|----------------|------------------| +| **flexmark‑java** | يحلل Markdown ويحوّله إلى HTML. | `com.vladsch.flexmark:flexmark-all:0.64.8` | +| **openhtmltopdf‑core** | يأخذ HTML وينتج PDF. | `org.openhtmltopdf:openhtmltopdf-pdfbox:1.0.10` | + +أضفهما إلى ملف `pom.xml` الخاص بك: + +```xml + + + + com.vladsch.flexmark + flexmark-all + 0.64.8 + + + + + org.openhtmltopdf + openhtmltopdf-pdfbox + 1.0.10 + + +``` + +> **Why these two?** Flexmark gives us a faithful Markdown‑to‑HTML conversion (tables, code fences, footnotes, you name it). OpenHTMLtoPDF then renders that HTML using the PDFBox engine, which handles fonts and images out‑of‑the‑box. Together they let us **convert markdown file to pdf** with minimal boilerplate. + +--- + +## الخطوة 2: قراءة مصدر Markdown + +سنقرأ الملف إلى `String`. استخدام `java.nio.file.Files` يبقي الكود مختصراً ويتعامل مع Unicode تلقائياً. + +```java +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.charset.StandardCharsets; +import java.io.IOException; + +/** + * Loads the markdown content from the given path. + * + * @param markdownPath absolute or relative path to the .md file + * @return the file content as a UTF‑8 string + * @throws IOException if the file cannot be read + */ +static String loadMarkdown(String markdownPath) throws IOException { + Path path = Path.of(markdownPath); + return Files.readString(path, StandardCharsets.UTF_8); +} +``` + +> **Edge case:** إذا كان ملف markdown يحتوي على نهايات سطر Windows (`\r\n`)، فإن `readString` يقوم بتطبيعها إلى `\n`، وهو ما يتوقعه Flexmark. + +--- + +## الخطوة 3: تحويل Markdown إلى HTML + +Flexmark يقوم بالعمل الشاق. يمكنك تخصيص المحلل – على سبيل المثال، تمكين الجداول بنكهة GitHub أو الحواشي السفلية – لكن الإعداد الافتراضي يعمل لمعظم الوثائق. + +```java +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.Node; + +/** + * Turns raw markdown into HTML. + * + * @param markdown the markdown source + * @return HTML string ready for PDF rendering + */ +static String markdownToHtml(String markdown) { + Parser parser = Parser.builder().build(); + HtmlRenderer renderer = HtmlRenderer.builder().build(); + Node document = parser.parse(markdown); + return renderer.render(document); +} +``` + +**Why we go through HTML:** مولّدات PDF تفهم التخطيط، CSS، والخطوط أفضل بكثير من Markdown الخام. بتحويله إلى HTML أولاً، نحصل على تحكم كامل في التنسيق – مثل رؤوس مخصصة، أرقام صفحات، أو حتى علامة مائية. + +--- + +## الخطوة 4: تحويل HTML إلى PDF + +OpenHTMLtoPDF يقبل `String` بسيط من HTML ويكتب PDF إلى `OutputStream`. أدناه ملف تغليف صغير يضيف أيضاً ورقة أنماط CSS أساسية (يمكنك استبدال `style.css` بملفك الخاص). + +```java +import org.openhtmltopdf.pdfboxout.PdfRendererBuilder; +import java.io.OutputStream; +import java.io.FileOutputStream; + +/** + * Generates a PDF file from HTML. + * + * @param html the HTML content produced by Flexmark + * @param pdfPath path where the resulting PDF should be saved + * @throws IOException if writing the PDF fails + */ +static void htmlToPdf(String html, String pdfPath) throws IOException { + try (OutputStream os = new FileOutputStream(pdfPath)) { + PdfRendererBuilder builder = new PdfRendererBuilder(); + builder.useFastMode(); // speeds up rendering for large docs + builder.withHtmlContent(html, null); // base URI null → relative URLs resolved against working dir + builder.toStream(os); + // Optional: add a custom stylesheet + // builder.withCssFile(new File("style.css")); + builder.run(); + } +} +``` + +> **Note on images:** إذا كان markdown الخاص بك يشير إلى صور بمسارات نسبية، تأكد من أن تلك الملفات قابلة للوصول من دليل العمل أو اضبط URI أساسي مناسب في `withHtmlContent(html, baseUri)`. + +--- + +## الخطوة 5: تجميع كل شيء – محوّل السطر الواحد + +الآن يمكننا تنفيذ التحويل المكوّن من ثلاثة أسطر كما في المقتطف الأصلي، ولكن مع معالجة الأخطاء وتسجيل الأحداث بشكل صحيح. + +```java +public class MarkdownPdfConverter { + + /** + * Convert a markdown file directly to a PDF file. + * + * @param markdownPath path to the source .md file + * @param pdfPath desired output .pdf file + */ + public static void convert(String markdownPath, String pdfPath) { + try { + // Step 1: Load markdown + String markdown = loadMarkdown(markdownPath); + + // Step 2: Transform to HTML + String html = markdownToHtml(markdown); + + // Step 3: Render PDF + htmlToPdf(html, pdfPath); + + System.out.println("✅ Successfully created PDF at " + pdfPath); + } catch (IOException e) { + System.err.println("❌ Conversion failed: " + e.getMessage()); + e.printStackTrace(); + } + } + + // ----- Helper methods from previous steps (loadMarkdown, markdownToHtml, htmlToPdf) ----- + // (Copy‑paste the static methods defined earlier here) +} +``` + +### تشغيل المحوّل + +```java +public class Main { + public static void main(String[] args) { + // Step 1: Define the path to the source Markdown file + String markdownPath = "YOUR_DIRECTORY/readme.md"; + + // Step 2: Define the desired output PDF file path + String pdfPath = "YOUR_DIRECTORY/readme.pdf"; + + // Step 3: Convert the Markdown document directly to PDF + MarkdownPdfConverter.convert(markdownPath, pdfPath); + } +} +``` + +**Expected output on the console** + +``` +✅ Successfully created PDF at YOUR_DIRECTORY/readme.pdf +``` + +افتح `readme.pdf` – يجب أن ترى وثيقة منسقة بشكل جميل تعكس بنية markdown الأصلية، مع العناوين، القوائم النقطية، وكتل الشيفرة. + +--- + +## معالجة المشكلات الشائعة + +| المشكلة | لماذا يحدث | الحل | +|-------|----------------|-----| +| **Missing images** | يتم حل مسارات الصور النسبية بالنسبة إلى دليل عمل JVM، وليس موقع ملف markdown. | مرّر مجلد markdown كـ base URI: `builder.withHtmlContent(html, new File(markdownPath).getParentFile().toURI().toString());` | +| **Unicode gibberish** | مُولّد PDF يستخدم مجموعة خطوط محدودة افتراضياً. | أدمج خط يدعم Unicode عبر `builder.useFont(new File("fonts/DejaVuSans.ttf"), "DejaVu Sans", 400, PdfRendererBuilder.FontStyle.NORMAL, true);` | +| **Huge files stall** | تحويل HTML كبير يمكن أن يستهلك الكثير من الذاكرة. | فعّل `builder.useFastMode()` (كما هو موضح) أو قسّم markdown إلى أقسام وولّد ملفات PDF منفصلة. | +| **Table styling looks off** | HTML الافتراضي من Flexmark يفتقر إلى CSS للجداول. | أضف مقطع CSS صغير: `builder.withCssContent("table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ddd; padding: 8px; }");` | + +--- + +## إضافة رأس/تذييل بسيط + +إذا كنت بحاجة إلى أرقام صفحات أو عنوان في كل صفحة، أدخل قليلًا من CSS وكتلة HTML `
`/`