PDF är ett standardformat för att dela dokument över internet. Dess globala stöd och konsekventa layout gör den till ett idealiskt val för sådana scenarier. Men ibland tenderar storleken på PDF-filer att växa på grund av innehåll som bilder, ritningar etc. I sådana scenarier kan du enkelt optimera eller komprimera PDF-filer för att minska storleken utan att kompromissa med kvaliteten. För detta ändamål kommer den här artikeln att lära dig olika tekniker som du kan använda för att komprimera och optimera PDF-filer för att minska deras storlek med C++.

C++ API för komprimering och optimering av PDF-filer

Aspose.PDF for C++ är ett C++-bibliotek som låter dig skapa, läsa och uppdatera PDF-dokument. Du kan använda detta API för att komprimera och optimera stora PDF-filer för att minska deras storlek samtidigt som kvaliteten behålls. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet downloads.

PM> Install-Package Aspose.PDF.Cpp

Optimera PDF-dokument för webben med C++

Om du vill visa PDF-dokumenten på webben, kommer optimering av dem att förbättra deras laddningshastighet och därmed förbättra användarupplevelsen. För att optimera PDF-dokument, följ stegen nedan.

Följande exempelkod visar hur man optimerar PDF-dokument för webben med C++.

// Öppna PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Optimera PDF-dokumentet
pdfDocument->Optimize();

// Spara PDF-dokumentet
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

Komprimera och ändra storlek på bilder i PDF-filer med C++

Om PDF-filer innehåller ett stort antal bilder kan det resultera i betydande filstorlekar. I sådana filer spelar bilder en viktig roll för att öka deras storlek. Att komprimera och ändra storlek på bilder i dessa filer skulle resultera i en märkbar minskning av deras storlekar. Följande är stegen för att komprimera och ändra storlek på bilder i en PDF-fil.

Följande exempelkod visar hur man komprimerar och ändrar storlek på bilder för att minska PDF-filstorleken med C++.

// Öppna PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Skapa en instans av klassen OptimizationOptions
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Komprimera och ändra storlek på bilder och ställ in deras kvalitet och upplösning
options->get_ImageCompressionOptions()->set_CompressImages(true);
options->get_ImageCompressionOptions()->set_ImageQuality(10);
options->get_ImageCompressionOptions()->set_MaxResolution(150);
options->get_ImageCompressionOptions()->set_ResizeImages(true);

// Optimera resurser i dokumentet
pdfDocument->OptimizeResources(options);

// Spara PDF-dokumentet
pdfDocument->Save(u"OutputDirectory\\Compressed_PDF_With_Images.pdf");

För att ytterligare minska filstorleken kan du också ta bort inbäddade teckensnitt från filen. Det finns två strategier för att ta bort inbäddade teckensnitt; det första är att du tar bort alla inbäddade typsnitt, och det andra är att du bara tar bort delmängden av oanvända typsnitt. Dessutom kan du också ta bort oanvända strömmar och länka dubbletter av strömmar för att minska ytterligare storlek. Följande är stegen för att tillämpa tidigare diskuterade ändringar på en PDF-fil.

Följande exempelkod visar hur du minskar PDF-filstorleken genom att ta bort typsnitt och ta bort oanvända strömmar och objekt med C++.

// Öppna PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Skapa en instans av klassen OptimizationOptions
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Antingen
// Ta bort alla teckensnitt i PDF
options->set_UnembedFonts(true);

// ELLER
// Behåll bara inbäddade teckensnitt för använda tecken
options->set_SubsetFonts(true);

// Länka dubbletter av strömmar
options->set_LinkDuplcateStreams(false);

// Ta bort oanvända strömmar
options->set_RemoveUnusedStreams(false);

// Ta bort oanvända föremål
options->set_RemoveUnusedObjects(false);

// Optimera resurser i dokumentet
pdfDocument->OptimizeResources(options);

// Spara PDF-dokumentet
pdfDocument->Save(u"OutputDirectory\\Remove_Embedded_Fonts_Output.pdf");

Ta bort eller förenkla kommentarer med C++

Det kan finnas flera kommentarer i PDF-filer som text, former etc. som ökar filstorleken. Dessa kommentarer kan tas bort om de inte längre behövs eller förenklas om inga ytterligare ändringar behövs. Om du gör detta minskar storleken på PDF-filen. Följande är stegen för att ta bort eller förenkla kommentarer från PDF-filer.

Följande exempelkod visar hur man tar bort eller förenklade kommentarer i PDF-filer med C++.

// Skapa en instans av klassen PdfAnnotationEditor
System::SharedPtr<Aspose::Pdf::Facades::PdfAnnotationEditor> annotationEditor = System::MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();

// Ladda PDF-exemplet
annotationEditor->BindPdf(u"SourceDirectory\\PDF\\AnnotationSample.pdf");

// Antingen
// Platta ut kommentarer
annotationEditor->FlatteningAnnotations();

// Eller
// Ta bort anteckningar
//annotationEditor->DeleteAnnotations();

// Spara PDF-dokumentet
annotationEditor->Save(u"OutputDirectory\\Remove_Annotations_Output.pdf");

Ta bort formulärfält från PDF-filer med C++

Formulärfält är obligatoriska när du behöver samla in data. Om datainsamling inte längre krävs kan du platta till formulärfälten för att minska PDF-filens storlek. Följande är stegen för att platta till formulärfält i PDF-filer.

Följande exempelkod visar hur man plattar ut formulärfält i PDF-filer med C++.

// Öppna PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Fillable_PDF_Form.pdf");

if (pdfDocument->get_Form()->get_Fields()->get_Length() > 0)
{
	// Iterera genom formulärfälten
	for (System::SharedPtr<Field> field : pdfDocument->get_Form()->get_Fields())
	{
		// Platta fält
		field->Flatten();
	}
}

// Spara PDF-dokumentet
pdfDocument->Save(u"OutputDirectory\\Flatten_Form_Fields.pdf");

Konvertera RGB-färgrymd till gråskala för PDF-filer med C++

PDF-filer med textinformation kan representeras bra i gråskalefärgrymden, så när det är viktigt att minska filstorleken kan sådana PDF-filer konverteras till gråskala. Anta vidare att prioriteringen är att arkivera filer och att minska storleken så mycket som möjligt. I så fall kan PDF-filer med bilder också konverteras till gråskala eftersom det primära målet är att göra filer så små som möjligt. För att ändra färgrymden för PDF-filer från RGB till gråskala, följ stegen nedan:

Följande exempelkod visar hur man konverterar färgrymden för en PDF-fil från RGB till gråskala med C++.

// Öppna PDF-dokumentet
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);

	// Konvertera färgrymden för varje sida till gråskala
	strategy->Convert(page);
}

// Spara PDF-dokumentet
pdfDocument->Save(u"OutputDirectory\\Grayscale_PDF_Output.pdf");

Skaffa en gratis licens

Du kan prova API:et utan utvärderingsbegränsningar genom att begära en gratis tillfällig licens.

Slutsats

Målet med den här artikeln var att titta på olika sätt att komprimera och optimera PDF-filer för att minska deras storlekar. Först tittade vi på hur man optimerar PDF-filer för webben. Sedan såg vi hur man komprimerar och ändrar storlek på bilder i PDF-filer. Dessutom har vi lärt oss hur man tar bort inbäddade typsnitt och strömmar från PDF-filer. Utöver detta lärde vi oss att platta till anteckningar och formulärfält och konvertera färgrymden för PDF-filer till gråskala. Vi undersökte alla dessa sätt att minska storleken på PDF-filerna utan att påverka deras kvalitet. Aspose.PDF för C++ tillhandahåller många ytterligare funktioner för att arbeta med PDF-filer. Du kan utforska API:et i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.

Se även