PDF를 이미지 형식으로 변환

**Aspose.PDF for C++**는 PDF를 이미지로 변환하기 위해 몇 가지 접근 방식을 사용합니다. 일반적으로 우리는 Device 접근 방식과 SaveOption을 사용하는 변환의 두 가지 접근 방식을 사용합니다. 이 섹션에서는 이러한 접근 방식 중 하나를 사용하여 PDF 문서를 BMP, JPEG, PNG, TIFF 및 SVG 형식과 같은 이미지 형식으로 변환하는 방법을 보여줍니다.

라이브러리에는 이미지를 변환하기 위해 가상 장치를 사용할 수 있는 여러 클래스가 있습니다. DocumentDevice는 전체 문서 변환을 지향하지만, ImageDevice는 특정 페이지를 위한 것입니다.

DocumentDevice 클래스를 사용하여 PDF 변환

**Aspose.PDF for C++**는 PDF 페이지를 TIFF 이미지로 변환할 수 있습니다.

The TiffDevice (기반 DocumentDevice) 클래스는 PDF 페이지를 TIFF 이미지로 변환할 수 있게 해줍니다. 이 클래스는 PDF 파일의 모든 페이지를 단일 TIFF 이미지로 변환할 수 있는 Process라는 메서드를 제공합니다.

PDF 페이지를 하나의 TIFF 이미지로 변환

Aspose.PDF for C++는 PDF 파일의 모든 페이지를 단일 TIFF 이미지로 변환하는 방법을 설명합니다:

  1. Open Document with MakeObject.
  2. Resolution 객체를 만듭니다.
  3. TIffSettings 객체를 만듭니다.
  4. 지정된 속성으로 Tiff device를 만듭니다.
  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 _dataDir("C:\\Samples\\Conversion\\");

    // 파일 이름을 위한 문자열
    String infilename("PageToTiff.pdf");
    String outfilename("PageToTiff_out.tif");

    // 문서 열기
    auto document = MakeObject<Document>(_dataDir + infilename);

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

    // 해상도 객체 생성
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // TIFF 장치 생성
    auto tiffDevice = MakeObject<Aspose::Pdf::Devices::TiffDevice>(resolution);

    // 특정 페이지를 변환하고 이미지를 스트림에 저장
    tiffDevice->Process(document, 1, 1, imageStream);
    std::clog << __func__ << ": Finish" << std::endl;
}

변환 중 Bradley 알고리즘 사용

Aspose.PDF for C++는 LZW 압축을 사용하여 PDF를 TIF로 변환하는 기능을 지원하고 있으며, AForge를 사용하여 이진화(Binarization)를 적용할 수 있습니다. 그러나 일부 고객은 특정 이미지에 대해 Otsu를 사용하여 임계값을 얻어야 하기 때문에 Bradley도 사용하고 싶어합니다.

void Convert_PDF_To_Images::ConvertPDFtoTiffBradleyBinarization()
{
    // 경로 이름을 위한 문자열
    String _dataDir("C:\\Samples\\Conversion\\");

    // 문서 열기
    auto pdfDocument = MakeObject<Document>(_dataDir + u"PageToTIFF.pdf");

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

    // 해상도 객체 생성
    auto resolution = MakeObject<Aspose::Pdf::Devices::Resolution>(300);

    // TiffSettings 객체 생성
    auto tiffSettings = MakeObject<Aspose::Pdf::Devices::TiffSettings>();
    tiffSettings->set_Compression(Aspose::Pdf::Devices::CompressionType::LZW);
    tiffSettings->set_Depth(Aspose::Pdf::Devices::ColorDepth::Format1bpp);

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

    // 특정 페이지를 변환하고 이미지를 스트림에 저장
    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);
}

ImageDevice 클래스를 사용하여 PDF 변환

ImageDeviceBmpDevice, JpegDevice, GifDevice, PngDeviceEmfDevice의 조상입니다.

  • BmpDevice 클래스는 PDF 페이지를 BMP 이미지로 변환할 수 있게 해줍니다.

  • EmfDevice 클래스는 PDF 페이지를 EMF 이미지로 변환할 수 있게 해줍니다.

  • JpegDevice 클래스는 PDF 페이지를 JPEG 이미지로 변환할 수 있게 해줍니다.

  • PngDevice 클래스는 PDF 페이지를 PNG 이미지로 변환할 수 있게 해줍니다.

  • GifDevice 클래스는 PDF 페이지를 GIF 이미지로 변환할 수 있게 해줍니다.

PDF 페이지를 이미지로 변환하는 방법을 살펴보겠습니다.

BmpDevice 클래스는 PDF 파일의 특정 페이지를 BMP 이미지 형식으로 변환할 수 있는 Process라는 메소드를 제공합니다. 다른 클래스도 같은 메소드를 가지고 있습니다. 따라서 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();
    }
}

SaveOptions 클래스를 사용하여 PDF 변환

이 기사 부분에서는 C++ 및 SaveOptions 클래스를 사용하여 PDF를 SVG로 변환하는 방법을 보여줍니다.

PDF를 SVG로 변환하기 위해 Aspose.PDF for CPP는 Document 클래스의 Save 메서드를 제공합니다. PDF를 SVG로 변환하려면 출력 경로와 enum SaveFormat:: svg를 Save 메서드에 전달해야 합니다. 다음 코드 스니펫은 PDF를 SVG로 변환하는 방법을 보여줍니다:

이 문서는 C++를 사용하여 PDF를 SVG로 변환하는 방법을 가르칩니다.

**스케일러블 벡터 그래픽스(SVG)**는 2차원 벡터 그래픽, 정적 및 동적(대화형 또는 애니메이션)의 XML 기반 파일 형식의 사양 집합입니다. SVG 사양은 1999년부터 월드 와이드 웹 컨소시엄(W3C)에 의해 개발된 오픈 표준입니다.

SVG 이미지와 그 동작은 XML 텍스트 파일로 정의됩니다. 이것은 검색, 인덱싱, 스크립팅이 가능하며 필요 시 압축할 수 있음을 의미합니다. XML 파일로서 SVG 이미지는 모든 텍스트 편집기로 생성 및 편집할 수 있지만, Inkscape와 같은 드로잉 프로그램을 사용하는 것이 더 편리한 경우가 많습니다.

Aspose.PDF for C++는 SVG 이미지를 PDF 형식으로 변환하는 기능을 지원하며, PDF 파일을 SVG 형식으로 변환하는 기능도 제공합니다. 이 요구 사항을 충족하기 위해 SvgSaveOptions 클래스가 Aspose.PDF 네임스페이스에 도입되었습니다. SvgSaveOptions의 객체를 인스턴스화하고 이를 Save 메서드의 두 번째 인수로 전달하십시오.

다음 코드 조각은 C++로 PDF 파일을 SVG 형식으로 변환하는 단계를 보여줍니다.

void Convert_PDF_To_Images::ConvertPDFtoSvgSinglePage()
{
    std::clog << __func__ << ": Start" << std::endl;
    // 경로 이름에 대한 문자열
    String _dataDir("C:\\Samples\\Conversion\\");

    // 파일 이름에 대한 문자열
    String infilename("PageToSvg.pdf");
    String outfilename("PageToSvg_out.svg");

    // 문서 열기
    auto document = MakeObject<Document>(_dataDir + infilename);

    // SvgSaveOptions의 객체 인스턴스화
    auto saveOptions = MakeObject<SvgSaveOptions>();
    // SVG 이미지를 Zip 아카이브로 압축하지 않음
    saveOptions->CompressOutputToZipArchive = false;

    try {
    // SVG 파일로 출력 저장
    document->Save(_dataDir + outfilename, saveOptions);
    }
    catch (Exception ex) {
    std::cerr << ex->get_Message();
    }

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