تحويل HTML إلى ملف PDF في Java

نظرة عامة

تشرح هذه المقالة كيفية تحويل HTML إلى PDF باستخدام Java. الكود بسيط جدًا، فقط قم بتحميل HTML إلى فئة Document واحفظه كملف PDF ناتج. تحويل MHTML إلى PDF في Java مشابه أيضًا. وهي تغطي المواضيع التالية

مكتبة تحويل Java HTML إلى PDF

Aspose.PDF for Java هو API للتعامل مع ملفات PDF يتيح لك تحويل أي مستندات HTML موجودة إلى PDF بسلاسة. يمكن تخصيص عملية تحويل HTML إلى PDF بمرونة.

تحويل HTML إلى PDF

يُظهر مثال كود Java التالي كيفية تحويل مستند HTML إلى PDF.

  1. إنشاء مثيل لفئة HtmlLoadOptions.
  2. تهيئة كائن Document.
  3. حفظ مستند PDF الناتج عن طريق استدعاء طريقة Document.save(String).
// افتح مستند PDF المصدر
Document document = new Document(DATA_DIR + "PDFToHTML.pdf")

// إنشاء كائن HTML SaveOptions
HtmlSaveOptions htmlsaveOptions = new HtmlSaveOptions();

// احفظ المستند
document.save(DATA_DIR + "MultiPageHTML_out.html", htmlsaveOptions);

التحويل المتقدم من HTML إلى PDF

محرك تحويل HTML يحتوي على عدة خيارات تتيح لنا التحكم في عملية التحويل.

دعم استعلامات الوسائط

  1. قم بإنشاء خيارات تحميل HTML.
  2. قم بتعيين وضع الطباعة أو الشاشة.
  3. قم بتثبيت كائن المستند.
  4. احفظ مستند PDF الناتج.

تعتبر استعلامات الوسائط تقنية شائعة لتقديم ورقة أنماط مخصصة لأجهزة مختلفة. يمكننا تعيين نوع الجهاز باستخدام خاصية HtmlMediaType.

// قم بإنشاء خيارات تحميل HTML
HtmlLoadOptions options = new HtmlLoadOptions();

// قم بتعيين وضع الطباعة أو الشاشة
options.setHtmlMediaType(HtmlMediaType.Print);

// تثبيت كائن المستند
String htmlFileName = Paths.get(DATA_DIR.toString(), "test.html").toString();
Document document = new Document(htmlFileName, options);

// احفظ مستند PDF الناتج
document.save(Paths.get(DATA_DIR.toString(), "HTMLtoPDF.pdf").toString());
document.close();

تمكين (تعطيل) تضمين الخطوط

  1. إضافة خيارات تحميل HTML جديدة LoadOptions.
  2. تمكين/تعطيل تضمين الخطوط.
  3. حفظ مستند جديد.

غالبًا ما تستخدم صفحات HTML الخطوط (على سبيل المثال، الخطوط من المجلد المحلي، خطوط جوجل، إلخ). يمكننا أيضًا التحكم في تضمين الخطوط في مستند باستخدام خاصية IsEmbedFonts.

HtmlLoadOptions options = new HtmlLoadOptions();
// تمكين/تعطيل تضمين الخطوط
options.setEmbedFonts(true);

Document document = new Document(DATA_DIR + "test_fonts.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();

إدارة تحميل الموارد الخارجية

يوفر محرك التحويل آلية تتيح لك التحكم في تحميل بعض الموارد المرتبطة بمستند HTML.

تحتوي فئة HtmlLoadOptions على خاصية CustomLoaderOfExternalResources التي يمكننا من خلالها تحديد سلوك محمل المورد.

HtmlLoadOptions options = new HtmlLoadOptions();

options.setCustomLoaderOfExternalResources(
        new LoadOptions.ResourceLoadingStrategy() {
            public LoadOptions.ResourceLoadingResult invoke(String resourceURI) {
                // إنشاء قالب مورد نظيف للاستبدال:
                LoadOptions.ResourceLoadingResult res = new LoadOptions.ResourceLoadingResult(new byte[] {});
                // إرجاع مصفوفة بايت فارغة في حالة خادم i.imgur.com
                if (resourceURI.contains("i.imgur.com")) {
                    return res;
                } else {
                    // معالجة الموارد باستخدام محمل الموارد الافتراضي
                    res.setLoadingCancelled(true);
                    return res;
                }
            }   
});

Document document = new Document(DATA_DIR + "test.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();    

تحويل MHTML إلى PDF

MHTML، اختصار لـ MIME HTML، هو صيغة أرشيف لصفحات الويب تُستخدم لدمج الموارد التي تمثل عادةً بواسطة روابط خارجية (مثل الصور، الرسوم المتحركة الفلاش، تطبيقات Java الصغيرة، وملفات الصوت) مع كود HTML في ملف واحد. يتم ترميز محتوى ملف MHTML كما لو كان رسالة بريد إلكتروني HTML، باستخدام نوع MIME multipart/related.

يظهر رمز المثال التالي كيفية تحويل ملفات MHTML إلى صيغة PDF باستخدام Java:

// قم بإنشاء مثيل لـ MhtLoadOptions لتحديد خيارات التحميل لـ
// ملف MHTML.
MhtLoadOptions options = new MhtLoadOptions();

// تعيين مسار ملف MHTML.
String mhtmlFileName = Paths.get(DATA_DIR.toString(), "samplefile.mhtml").toString();

// تحميل ملف MHTML في كائن Document.
Document document = new Document(mhtmlFileName, options);

// احفظ المستند كملف PDF.
document.save(Paths.get(DATA_DIR.toString(), "MarkdowntoPDF.pdf").toString());

// اغلق المستند.
document.close();