تحويل PDF إلى تنسيقات الصور

Aspose.PDF for C++ يستخدم بعض الأساليب لتحويل PDF إلى صورة. بشكل عام، نستخدم نهجين: التحويل باستخدام نهج الجهاز والتحويل باستخدام SaveOption. ستوضح لك هذه القسم كيفية تحويل مستندات PDF إلى تنسيقات الصور مثل BMP وJPEG وPNG وTIFF وSVG باستخدام أحد هذه الأساليب.

هناك العديد من الفئات في المكتبة التي تسمح لك باستخدام جهاز افتراضي لتحويل الصور. DocumentDevice موجه لتحويل المستند بالكامل، ولكن ImageDevice - لصفحة معينة.

تحويل PDF باستخدام فئة DocumentDevice

Aspose.PDF for C++ يجعل من الممكن تحويل صفحات PDF إلى صور TIFF.

The TiffDevice (بناءً على DocumentDevice) تسمح لك بتحويل صفحات PDF إلى صور TIFF. توفر هذه الفئة طريقة تسمى Process والتي تتيح لك تحويل جميع الصفحات في ملف PDF إلى صورة TIFF واحدة.

تحويل صفحات PDF إلى صورة TIFF واحدة

Aspose.PDF لـ C++ يشرح كيفية تحويل جميع الصفحات في ملف PDF إلى صورة TIFF واحدة:

  1. افتح المستند باستخدام MakeObject.
  2. أنشئ كائن Resolution.
  3. أنشئ كائن TIffSettings.
  4. أنشئ جهاز Tiff بخصائص محددة.
  5. حوّل صفحة معينة واحفظ الصورة في تدفق.

يوضح مقتطف الشيفرة التالي كيفية تحويل جميع صفحات PDF إلى صورة TIFF واحدة.

void Convert_PDF_To_Images::ConvertPDFtoTIFF()
{
    std::clog << __func__ << ": Start" << std::endl;
    // سلسلة لأسم المسار
    String _dataDir("C:\\Samples\\Conversion\\");

    // سلسلة لأسم الملف
    String infilename("PageToTiff.pdf");
    String outfilename("PagesToTIFF_out.tif");

    // افتح المستند
    auto document = MakeObject<Document>(_dataDir + infilename);

    auto imageStream = System::IO::File::OpenWrite(_dataDir + outfilename);

    // أنشئ كائن Resolution
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // أنشئ كائن TiffSettings
    auto tiffSettings = MakeObject<Aspose::Pdf::Devices::TiffSettings>();
    tiffSettings->set_Compression(Aspose::Pdf::Devices::CompressionType::None);
    tiffSettings->set_Depth(Aspose::Pdf::Devices::ColorDepth::Default);
    tiffSettings->set_Shape(Aspose::Pdf::Devices::ShapeType::Landscape);
    tiffSettings->set_SkipBlankPages(false);

    // أنشئ جهاز TIFF
    auto tiffDevice = MakeObject<Aspose::Pdf::Devices::TiffDevice>(resolution, tiffSettings);

    // حوّل الصفحات واحفظ الصورة في تدفق
    tiffDevice->Process(document, 1, 2, imageStream);
    std::clog << __func__ << ": Finish" << std::endl;
}

تحويل صفحة واحدة إلى صورة TIFF

يسمح لك Aspose.PDF for C++ بتحويل صفحة معينة في ملف PDF إلى صورة TIFF، استخدم نسخة محملة زائدة من دالة Process(..) التي تأخذ رقم الصفحة كمعامل للتحويل. يوضح مقتطف الشيفرة التالي كيفية تحويل الصفحة الأولى من ملف PDF إلى تنسيق TIFF.

void Convert_PDF_To_Images::ConvertPDFtoTiffSinglePage()
{
    std::clog << __func__ << ": Start" << std::endl;
    // String for path name
    String _dataDir("C:\\Samples\\Conversion\\");

    // String for file name
    String infilename("PageToTiff.pdf");
    String outfilename("PageToTiff_out.tif");

    // Open document
    auto document = MakeObject<Document>(_dataDir + infilename);

    auto imageStream = System::IO::File::OpenWrite(_dataDir + outfilename);

    // Create Resolution object
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // Create TIFF device
    auto tiffDevice = MakeObject<Aspose::Pdf::Devices::TiffDevice>(resolution);

    // Convert a particular page and save the image to stream
    tiffDevice->Process(document, 1, 1, imageStream);
    std::clog << __func__ << ": Finish" << std::endl;
}

استخدم خوارزمية برادلي أثناء التحويل

يدعم Aspose.PDF for C++ ميزة تحويل PDF إلى TIF باستخدام ضغط LZW ثم مع استخدام AForge، يمكن تطبيق التثنيم. ومع ذلك، طلب أحد العملاء أنه لبعض الصور، يحتاجون إلى الحصول على العتبة باستخدام Otsu، لذا يرغبون أيضًا في استخدام Bradley.

void Convert_PDF_To_Images::ConvertPDFtoTiffBradleyBinarization()
{
    // String for path name
    String _dataDir("C:\\Samples\\Conversion\\");

    // Open document
    auto pdfDocument = MakeObject<Document>(_dataDir + u"PageToTIFF.pdf");

    String outputImageFile = _dataDir + u"resultant_out.tif";
    String outputBinImageFile = _dataDir + u"37116-bin_out.tif";

    // Create Resolution object 
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // Create TiffSettings object
    auto tiffSettings = MakeObject<Aspose::Pdf::Devices::TiffSettings>();
    tiffSettings->set_Compression(Aspose::Pdf::Devices::CompressionType::LZW);
    tiffSettings->set_Depth(Aspose::Pdf::Devices::ColorDepth::Format1bpp);

    // Create TIFF device
    auto tiffDevice = MakeObject<Aspose::Pdf::Devices::TiffDevice>(resolution, tiffSettings);
    auto imageStream = System::IO::File::OpenWrite(_dataDir + outputImageFile);

    // Convert a particular page and save the image to stream
    tiffDevice->Process(pdfDocument, 1, 2, imageStream);

    imageStream->Close();

    auto inStream = System::IO::File::OpenRead(outputImageFile);
    auto outStream = System::IO::File::OpenWrite(outputBinImageFile);

    tiffDevice->BinarizeBradley(inStream, outStream, 0.1);
}

تحويل PDF باستخدام فئة ImageDevice

ImageDevice هو السلف لـ BmpDevice و JpegDevice و GifDevice و PngDevice و EmfDevice.

  • تسمح لك فئة BmpDevice بتحويل صفحات PDF إلى صور BMP.

  • تسمح لك فئة EmfDevice بتحويل صفحات PDF إلى صور EMF.

  • تسمح لك فئة JpegDevice بتحويل صفحات PDF إلى صور JPEG.

  • تسمح لك فئة PngDevice بتحويل صفحات PDF إلى صور PNG.

  • تسمح لك فئة GifDevice بتحويل صفحات PDF إلى صور GIF.

دعونا نلقي نظرة على كيفية تحويل صفحة PDF إلى صورة.

توفر فئة BmpDevice طريقة باسم Process والتي تتيح لك تحويل صفحة معينة من ملف PDF إلى تنسيق صورة BMP. تحتوي الفئات الأخرى على نفس الطريقة. لذلك، إذا كنا بحاجة إلى تحويل صفحة PDF إلى صورة، فإننا نقوم فقط بإنشاء الكائن المطلوب.

يعرض مقطع الشيفرة التالي هذه الإمكانية:

void Convert_PDF_To_Images::ConvertPDFusingImageDevice()
{
    std::clog << __func__ << ": Start" << std::endl;

    // سلسلة لاسم المسار
    String _dataDir("C:\\Samples\\Conversion\\");

    // إنشاء كائن الدقة            
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300); //300 dpi

    System::SmartPtr<Aspose::Pdf::Devices::ImageDevice>
    bmpDevice = MakeObject<Aspose::Pdf::Devices::BmpDevice>(resolution);
    System::SmartPtr<Aspose::Pdf::Devices::ImageDevice>
    jpegDevice = MakeObject<Aspose::Pdf::Devices::JpegDevice>(resolution);
    System::SmartPtr<Aspose::Pdf::Devices::ImageDevice>
    gifDevice = MakeObject<Aspose::Pdf::Devices::GifDevice>(resolution);
    System::SmartPtr<Aspose::Pdf::Devices::ImageDevice>
    pngDevice = MakeObject<Aspose::Pdf::Devices::PngDevice>(resolution);
    System::SmartPtr<Aspose::Pdf::Devices::ImageDevice>
    emfDevice = MakeObject<Aspose::Pdf::Devices::EmfDevice>(resolution);

    auto document = MakeObject<Document>(_dataDir + u"ConvertAllPagesToBmp.pdf");

    ConvertPDFtoImage(bmpDevice, u"bmp", document);
    ConvertPDFtoImage(jpegDevice, u"jpeg", document);
    ConvertPDFtoImage(gifDevice, u"gif", document);
    ConvertPDFtoImage(pngDevice, u"png", document);
    ConvertPDFtoImage(emfDevice, u"emf", document);

    std::clog << __func__ << ": Finish" << std::endl;

}

void Convert_PDF_To_Images::ConvertPDFtoImage(
 System::SmartPtr<Aspose::Pdf::Devices::ImageDevice> imageDevice,
 String ext, System::SmartPtr<Document> document)
{
    // سلسلة لاسم المسار
    String _dataDir("C:\\Samples\\Conversion\\");

    for (int pageCount = 1; pageCount <= document->get_Pages()->get_Count(); pageCount++)
    {
    String outfilename = String::Format(u"{0}PageToBmp{1}_out.{2}",
    _dataDir, pageCount, ext);

    auto imageStream = System::IO::File::OpenWrite(outfilename);

    // إنشاء كائن الدقة
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // تحويل صفحة معينة وحفظ الصورة في الدفق
    imageDevice->Process(document->get_Pages()->idx_get(pageCount), imageStream);

    // إغلاق الدفق
    imageStream->Close();
    }
}

تحويل PDF باستخدام فئة SaveOptions

هذا الجزء من المقالة يوضح لك كيفية تحويل PDF إلى SVG باستخدام C++ وفئة SaveOptions.

من أجل تحويل PDF إلى SVG، تقدم Aspose.PDF لـ CPP طريقة Save من فئة Document. تحتاج إلى تمرير مسار الإخراج وenum SaveFormat:: svg إلى طريقة Save لتحويل PDF إلى SVG. يوضح مقطع الشيفرة التالي كيفية تحويل PDF إلى SVG:

تُعلمك هذه المقالة كيفية تحويل PDF إلى SVG باستخدام C++.

Scalable Vector Graphics (SVG) هو مجموعة من المواصفات لصيغة ملف تعتمد على XML للرسومات المتجهية ثنائية الأبعاد، سواء كانت ثابتة أو ديناميكية (تفاعلية أو متحركة). إن مواصفة SVG هي معيار مفتوح تم تطويره بواسطة اتحاد شبكة الويب العالمية (W3C) منذ عام 1999.

يتم تعريف صور SVG وسلوكياتها في ملفات نصية XML. هذا يعني أنه يمكن البحث عنها وفهرستها وبرمجتها وضغطها إذا لزم الأمر. كملفات XML، يمكن إنشاء صور SVG وتحريرها باستخدام أي محرر نصوص، ولكن غالبًا ما يكون من الأسهل إنشاؤها باستخدام برامج الرسم مثل Inkscape.

يدعم Aspose.PDF for C++ ميزة تحويل صورة SVG إلى تنسيق PDF ويقدم أيضًا القدرة على تحويل ملفات PDF إلى تنسيق SVG. لتحقيق هذا المتطلب، تمت إضافة فئة SvgSaveOptions إلى مساحة الأسماء Aspose.PDF. قم بإنشاء كائن من SvgSaveOptions ومرره كوسيط ثاني إلى طريقة Save.

يُظهر مقتطف الشيفرة التالي خطوات تحويل ملف PDF إلى تنسيق SVG باستخدام C++.

void Convert_PDF_To_Images::ConvertPDFtoSvgSinglePage()
{
    std::clog << __func__ << ": Start" << std::endl;
    // String for path name
    String _dataDir("C:\\Samples\\Conversion\\");

    // String for file name
    String infilename("PageToSvg.pdf");
    String outfilename("PageToSvg_out.svg");

    // Open document
    auto document = MakeObject<Document>(_dataDir + infilename);

    // Instantiate an object of SvgSaveOptions
    auto saveOptions = MakeObject<SvgSaveOptions>();
    // Do not compress SVG image to Zip archive
    saveOptions->CompressOutputToZipArchive = false;

    try {
    // Save the output in SVG files
    document->Save(_dataDir + outfilename, saveOptions);
    }
    catch (Exception ex) {
    std::cerr << ex->get_Message();
    }

    std::clog << __func__ << ": Finish" << std::endl;
}