PDF é um formato padrão para compartilhamento de documentos pela Internet. Seu suporte global e layout consistente o tornam a escolha ideal para esses cenários. No entanto, às vezes, o tamanho dos arquivos PDF tende a aumentar devido a conteúdos como imagens, desenhos, etc. Nesses cenários, você pode facilmente otimizar ou compactar arquivos PDF para reduzir seu tamanho sem comprometer sua qualidade. Para isso, este artigo ensinará diferentes técnicas que você pode usar para compactar e otimizar arquivos PDF para reduzir seu tamanho usando C++.

API C++ para compactar e otimizar arquivos PDF

Aspose.PDF for C++ é uma biblioteca C++ que permite criar, ler e atualizar documentos PDF. Você pode usar essa API para compactar e otimizar arquivos PDF grandes para reduzir seu tamanho e ainda manter sua qualidade. Você pode instalar a API por meio do NuGet ou baixá-la diretamente da seção downloads.

PM> Install-Package Aspose.PDF.Cpp

Otimize documentos PDF para a Web usando C++

Se você deseja exibir os documentos PDF na web, otimizá-los melhorará sua velocidade de carregamento e, assim, aprimorará a experiência do usuário. Para otimizar documentos PDF, siga as etapas abaixo.

O código de exemplo a seguir mostra como otimizar documentos PDF para a Web usando C++.

// Abra o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Otimize o documento PDF
pdfDocument->Optimize();

// Salve o documento PDF
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

Comprima e redimensione imagens em arquivos PDF usando C++

Se os arquivos PDF contiverem um grande número de imagens, isso poderá resultar em tamanhos de arquivo substanciais. Nesses arquivos, as imagens desempenham um papel significativo no aumento de seu tamanho. A compactação e o redimensionamento de imagens nesses arquivos resultariam em uma redução perceptível de seus tamanhos. A seguir estão as etapas para compactar e redimensionar imagens em um arquivo PDF.

O código de exemplo a seguir demonstra como compactar e redimensionar imagens para reduzir o tamanho do arquivo PDF usando C++.

// Abra o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Crie uma instância da classe OptimizationOptions
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Comprima e redimensione imagens e defina sua qualidade e resolução
options->get_ImageCompressionOptions()->set_CompressImages(true);
options->get_ImageCompressionOptions()->set_ImageQuality(10);
options->get_ImageCompressionOptions()->set_MaxResolution(150);
options->get_ImageCompressionOptions()->set_ResizeImages(true);

// Otimize recursos no documento
pdfDocument->OptimizeResources(options);

// Salve o documento PDF
pdfDocument->Save(u"OutputDirectory\\Compressed_PDF_With_Images.pdf");

Para reduzir ainda mais o tamanho do arquivo, você também pode remover as fontes incorporadas do arquivo. Existem duas estratégias para remover fontes incorporadas; a primeira é que você remove todas as fontes incorporadas e a segunda é que você remove apenas o subconjunto de fontes não utilizadas. Além disso, você também pode remover fluxos não utilizados e vincular fluxos duplicados para reduzir o tamanho adicional. A seguir estão as etapas para aplicar as alterações discutidas anteriormente em um arquivo PDF.

O código de exemplo a seguir mostra como reduzir o tamanho do arquivo PDF desincorporando fontes e removendo fluxos e objetos não utilizados usando C++.

// Abra o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Crie uma instância da classe OptimizationOptions
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Qualquer
// Desincorpore todas as fontes em PDF
options->set_UnembedFonts(true);

// OU
// Mantenha apenas fontes incorporadas para caracteres usados
options->set_SubsetFonts(true);

// Vincular fluxos duplicados
options->set_LinkDuplcateStreams(false);

// Remover streams não utilizados
options->set_RemoveUnusedStreams(false);

// Remova objetos não utilizados
options->set_RemoveUnusedObjects(false);

// Otimize recursos no documento
pdfDocument->OptimizeResources(options);

// Salve o documento PDF
pdfDocument->Save(u"OutputDirectory\\Remove_Embedded_Fonts_Output.pdf");

Remover ou achatar anotações usando C++

Pode haver várias anotações em arquivos PDF, como texto, formas, etc., que aumentam o tamanho do arquivo. Essas anotações podem ser removidas se não forem mais necessárias ou achatadas se não forem necessárias mais alterações. Isso reduzirá o tamanho do arquivo PDF. A seguir estão as etapas para remover ou nivelar anotações de arquivos PDF.

O código de exemplo a seguir mostra como excluir ou nivelar anotações em arquivos PDF usando C++.

// Crie uma instância da classe PdfAnnotationEditor
System::SharedPtr<Aspose::Pdf::Facades::PdfAnnotationEditor> annotationEditor = System::MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();

// Carregue o arquivo PDF de amostra
annotationEditor->BindPdf(u"SourceDirectory\\PDF\\AnnotationSample.pdf");

// Qualquer
// Achatar anotações
annotationEditor->FlatteningAnnotations();

// Ou
// Excluir anotações
//annotationEditor->DeleteAnnotations();

// Salve o documento PDF
annotationEditor->Save(u"OutputDirectory\\Remove_Annotations_Output.pdf");

Removendo campos de formulário de arquivos PDF usando C++

Os campos de formulários são obrigatórios quando você precisa coletar dados. Se a coleta de dados não for mais necessária, você poderá nivelar os campos do formulário para reduzir o tamanho do arquivo PDF. A seguir estão as etapas para nivelar campos de formulário em arquivos PDF.

O código de exemplo a seguir mostra como nivelar campos de formulário em arquivos PDF usando C++.

// Abra o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Fillable_PDF_Form.pdf");

if (pdfDocument->get_Form()->get_Fields()->get_Length() > 0)
{
	// Iterar pelos campos do formulário
	for (System::SharedPtr<Field> field : pdfDocument->get_Form()->get_Fields())
	{
		// Aplainar campo
		field->Flatten();
	}
}

// Salve o documento PDF
pdfDocument->Save(u"OutputDirectory\\Flatten_Form_Fields.pdf");

Converter espaço de cores RGB em escala de cinza para arquivos PDF usando C++

Arquivos PDF com informações textuais podem ser bem representados no espaço de cores em tons de cinza, portanto, quando a redução do tamanho do arquivo é essencial, esses arquivos PDF podem ser convertidos em tons de cinza. Além disso, suponha que a prioridade seja arquivar arquivos e reduzir o tamanho o máximo possível. Nesse caso, os arquivos PDF com imagens também podem ser convertidos em escala de cinza, pois o objetivo principal é tornar os arquivos tão pequenos quanto possível. Para alterar o espaço de cores dos arquivos PDF de RGB para tons de cinza, siga as etapas abaixo:

O código de exemplo a seguir mostra como converter o espaço de cores de um arquivo PDF de RGB para escala de cinza usando C++.

// Abra o documento 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);

	// Converter o espaço de cores de cada página para escala de cinza
	strategy->Convert(page);
}

// Salve o documento PDF
pdfDocument->Save(u"OutputDirectory\\Grayscale_PDF_Output.pdf");

Obtenha uma licença gratuita

Você pode experimentar a API sem limitações de avaliação solicitando uma licença temporária gratuita.

Conclusão

O objetivo deste artigo foi analisar diferentes maneiras de compactar e otimizar arquivos PDF para reduzir seus tamanhos. Em primeiro lugar, vimos como otimizar arquivos PDF para a web. Em seguida, vimos como compactar e redimensionar imagens em arquivos PDF. Além disso, aprendemos como remover fontes e fluxos incorporados de arquivos PDF. Além disso, aprendemos como nivelar anotações e campos de formulário e converter o espaço de cores de arquivos PDF em escala de cinza. Exploramos todas essas maneiras de reduzir o tamanho dos arquivos PDF sem afetar sua qualidade. O Aspose.PDF para C++ fornece muitos recursos adicionais para trabalhar com arquivos PDF. Você pode explorar a API em detalhes visitando a documentação oficial. Em caso de dúvidas, sinta-se à vontade para nos contatar em nosso fórum de suporte gratuito.

Veja também