PDF는 인터넷을 통해 문서를 공유하기 위한 표준 형식입니다. 글로벌 지원과 일관된 레이아웃으로 이러한 시나리오에 이상적인 선택입니다. 그러나 때로는 이미지, 그림 등과 같은 내용으로 인해 PDF 파일의 크기가 커지는 경향이 있습니다. 이러한 시나리오에서 PDF 파일을 쉽게 최적화하거나 압축하여 품질을 손상시키지 않고 크기를 줄일 수 있습니다. 이를 위해 이 기사에서는 PDF 파일을 압축하고 최적화하여 C++를 사용하여 크기를 줄이는 데 사용할 수 있는 다양한 기술을 알려줍니다.

PDF 파일 압축 및 최적화를 위한 C++ API

Aspose.PDF for C++는 PDF 문서를 만들고 읽고 업데이트할 수 있는 C++ 라이브러리입니다. 이 API를 사용하여 큰 PDF 파일을 압축하고 최적화하여 품질을 유지하면서 크기를 줄일 수 있습니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.

PM> Install-Package Aspose.PDF.Cpp

C++를 사용하여 웹용 PDF 문서 최적화

웹에 PDF 문서를 표시하려는 경우 문서를 최적화하면 로딩 속도가 향상되어 사용자 경험이 향상됩니다. PDF 문서를 최적화하려면 다음 단계를 따르십시오.

다음 샘플 코드는 C++를 사용하여 웹용 PDF 문서를 최적화하는 방법을 보여줍니다.

// PDF 문서 열기
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// PDF 문서 최적화
pdfDocument->Optimize();

// PDF 문서 저장
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

C++를 사용하여 PDF 파일의 이미지 압축 및 크기 조정

PDF 파일에 이미지가 많으면 파일 크기가 커질 수 있습니다. 이러한 파일에서 이미지는 크기를 늘리는 데 중요한 역할을 합니다. 이러한 파일의 이미지를 압축하고 크기를 조정하면 크기가 눈에 띄게 줄어듭니다. 다음은 PDF 파일의 이미지를 압축하고 크기를 조정하는 단계입니다.

다음 샘플 코드는 C++를 사용하여 PDF 파일 크기를 줄이기 위해 이미지를 압축하고 크기를 조정하는 방법을 보여줍니다.

// PDF 문서 열기
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// OptimizationOptions 클래스의 인스턴스 만들기
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// 이미지 압축 및 크기 조정 및 품질 및 해상도 설정
options->get_ImageCompressionOptions()->set_CompressImages(true);
options->get_ImageCompressionOptions()->set_ImageQuality(10);
options->get_ImageCompressionOptions()->set_MaxResolution(150);
options->get_ImageCompressionOptions()->set_ResizeImages(true);

// 문서의 리소스 최적화
pdfDocument->OptimizeResources(options);

// PDF 문서 저장
pdfDocument->Save(u"OutputDirectory\\Compressed_PDF_With_Images.pdf");

파일 크기를 더 줄이기 위해 파일에서 포함된 글꼴을 제거할 수도 있습니다. 포함된 글꼴을 제거하기 위한 두 가지 전략이 있습니다. 첫 번째는 포함된 모든 글꼴을 제거하는 것이고 두 번째는 사용하지 않는 글꼴의 하위 집합만 제거하는 것입니다. 또한 사용하지 않는 스트림을 제거하고 중복 스트림을 연결하여 추가 크기를 줄일 수도 있습니다. 다음은 이전에 논의한 변경 사항을 PDF 파일에 적용하는 단계입니다.

다음 샘플 코드는 글꼴을 포함 해제하고 C++를 사용하여 사용하지 않는 스트림과 개체를 제거하여 PDF 파일 크기를 줄이는 방법을 보여줍니다.

// PDF 문서 열기
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// OptimizationOptions 클래스의 인스턴스 만들기
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// 어느 하나
// PDF의 모든 글꼴 포함 해제
options->set_UnembedFonts(true);

// 또는
// 사용한 문자에 대해 포함된 글꼴만 유지
options->set_SubsetFonts(true);

// 중복 스트림 연결
options->set_LinkDuplcateStreams(false);

// 사용하지 않는 스트림 제거
options->set_RemoveUnusedStreams(false);

// 사용하지 않는 개체 제거
options->set_RemoveUnusedObjects(false);

// 문서의 리소스 최적화
pdfDocument->OptimizeResources(options);

// PDF 문서 저장
pdfDocument->Save(u"OutputDirectory\\Remove_Embedded_Fonts_Output.pdf");

C++를 사용하여 주석 제거 또는 병합

파일 크기를 증가시키는 텍스트, 모양 등과 같은 PDF 파일에 여러 주석이 있을 수 있습니다. 이러한 주석은 더 이상 필요하지 않은 경우 제거하거나 추가 변경이 필요하지 않은 경우 병합할 수 있습니다. 이렇게 하면 PDF 파일의 크기가 줄어듭니다. 다음은 PDF 파일에서 주석을 제거하거나 병합하는 단계입니다.

다음 샘플 코드는 C++를 사용하여 PDF 파일의 주석을 삭제하거나 병합하는 방법을 보여줍니다.

// PdfAnnotationEditor 클래스의 인스턴스 만들기
System::SharedPtr<Aspose::Pdf::Facades::PdfAnnotationEditor> annotationEditor = System::MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();

// 샘플 PDF 파일 로드
annotationEditor->BindPdf(u"SourceDirectory\\PDF\\AnnotationSample.pdf");

// 어느 하나
// 주석 병합
annotationEditor->FlatteningAnnotations();

// 또는
// 주석 삭제
//주석 편집기->DeleteAnnotations();

// PDF 문서 저장
annotationEditor->Save(u"OutputDirectory\\Remove_Annotations_Output.pdf");

C++를 사용하여 PDF 파일에서 양식 필드 제거

데이터를 수집해야 하는 경우 양식 필드가 필요합니다. 데이터 수집이 더 이상 필요하지 않은 경우 양식 필드를 병합하여 PDF 파일 크기를 줄일 수 있습니다. 다음은 PDF 파일에서 양식 필드를 병합하는 단계입니다.

  • Document 클래스를 사용하여 PDF 파일을 로드합니다.
  • 양식 필드가 있는지 확인하십시오.
  • 양식 필드를 반복하고 각 필드를 병합합니다.
  • Document->Save(System::String outputFileName) 메서드를 사용하여 PDF 파일을 저장합니다.

다음 샘플 코드는 C++를 사용하여 PDF 파일의 양식 필드를 병합하는 방법을 보여줍니다.

// PDF 문서 열기
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Fillable_PDF_Form.pdf");

if (pdfDocument->get_Form()->get_Fields()->get_Length() > 0)
{
	// 양식 필드를 통해 반복
	for (System::SharedPtr<Field> field : pdfDocument->get_Form()->get_Fields())
	{
		// 평평한 필드
		field->Flatten();
	}
}

// PDF 문서 저장
pdfDocument->Save(u"OutputDirectory\\Flatten_Form_Fields.pdf");

C++를 사용하여 PDF 파일의 RGB 색 공간을 회색조로 변환

텍스트 정보가 포함된 PDF 파일은 회색조 색상 공간에서 잘 표현될 수 있으므로 파일 크기를 줄여야 하는 경우 이러한 PDF 파일을 회색조로 변환할 수 있습니다. 또한 파일을 아카이브하고 가능한 한 크기를 줄이는 것이 우선이라고 가정합니다. 이 경우 파일을 최대한 작게 만드는 것이 주요 목표이므로 이미지가 있는 PDF 파일도 회색조로 변환할 수 있습니다. PDF 파일의 색 공간을 RGB에서 회색조로 변경하려면 다음 단계를 따르십시오.

다음 샘플 코드는 C++를 사용하여 PDF 파일의 색 공간을 RGB에서 회색조로 변환하는 방법을 보여줍니다.

// PDF 문서 열기
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 1.pdf");

System::SharedPtr<RgbToDeviceGrayConversionStrategy> strategy = MakeObject<RgbToDeviceGrayConversionStrategy>();

for (int idxPage = 1; idxPage <= pdfDocument->get_Pages()->get_Count(); idxPage++) {
	System::SharedPtr<Page> page = pdfDocument->get_Pages()->idx_get(idxPage);

	// 각 페이지의 색 공간을 회색조로 변환
	strategy->Convert(page);
}

// PDF 문서 저장
pdfDocument->Save(u"OutputDirectory\\Grayscale_PDF_Output.pdf");

무료 라이선스 받기

무료 임시 라이선스를 요청하면 평가 제한 없이 API를 사용해 볼 수 있습니다.

결론

이 기사의 목표는 PDF 파일을 압축하고 최적화하여 크기를 줄이는 다양한 방법을 살펴보는 것이었습니다. 먼저 웹용 PDF 파일을 최적화하는 방법을 살펴보았습니다. 그런 다음 PDF 파일의 이미지를 압축하고 크기를 조정하는 방법을 살펴보았습니다. 또한 PDF 파일에서 포함된 글꼴 및 스트림을 제거하는 방법을 배웠습니다. 이 외에도 주석 및 양식 필드를 병합하고 PDF 파일의 색상 공간을 회색조로 변환하는 방법을 배웠습니다. 우리는 품질에 영향을 주지 않으면서 PDF 파일의 크기를 줄이는 이 모든 방법을 탐구했습니다. Aspose.PDF for C++는 PDF 파일 작업을 위한 많은 추가 기능을 제공합니다. API에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다. 질문이 있는 경우 무료 지원 포럼에 문의해 주십시오.

또한보십시오