Aspose.PDF FOSS for C++ Funktioner
Aspose.PDF FOSS för C++ funktioner
Aspose.PDF FOSS för C++ är ett C++20-bibliotek för att skapa, öppna, ändra och spara PDF-dokument. Denna sida ger en översikt över de viktigaste funktionsområdena och de klasser som fungerar som deras ingångspunkter. Varje område behandlas utförligt på sin egen utvecklarhandledningssida.
Dokumenthantering
Aspose::Pdf::Document är rotobjektet för varje operation. Det öppnar en befintlig fil från en sökväg, exponerar sidkollektionen via Pages(), och sparar ändringar med Save(). Optimize() och OptimizeResources() minskar filstorleken genom att ta bort oanvända eller dubblerade resurser.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}Textutvinning
Aspose::Pdf::Text::TextAbsorber traverserar ett dokument eller en enskild sida och samlar in vanlig text, som hämtas med Text() efter att ha anropat Visit(). TextFragmentAbsorber utför samma traversal men returnerar individuella TextFragment-objekt via TextFragments(), vilket ger åtkomst till varje fragmentets position och texttillstånd.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}Rendering till rasterbilder
Sidrenderingsenheter konverterar en Page till en rasterbild. BmpDevice, PngDevice, JpegDevice och TiffDevice delar samma Process(page, output)-signatur och konstrueras med en Resolution som ställer in utdata-DPI.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}Kryptering
Document::Encrypt() skyddar ett dokument med ett användarlösenord (som krävs för att öppna det) och ett ägarlösenord (som krävs för att ändra behörigheter), med en algoritm som väljs från CryptoAlgorithm-enum: RC4x40, RC4x128, AESx128 eller AESx256. IsEncrypted() rapporterar det aktuella tillståndet och Decrypt() tar bort skyddet från ett redan öppnat dokument.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions::PrintDocument,
Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");
}Anmärkningar
Anmärkningar fäster synliga anteckningar, former och markup på en sida. Varje anmärkningstyp ärver från Annotation och konstrueras med mål Page och en placerings Rectangle, för att sedan läggas till sidan via Anmärkningar() (en AnnotationCollection).
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
AcroForm fält hanteras via Aspose::Pdf::Forms::Form, nåbara via Document::Form(). Fälttyper som TextBoxField konstrueras som anmärkningar — med en Page och en Rectangle — och registreras med Form::Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}Tips och bästa praxis
- Öppna inmatningsfiler via sökväg med
Document-konstruktorn; anropaSave()med en explicit utdataväg istället för att skriva över källan medan andra handtag till den fortfarande kan vara öppna. - Anropa
Optimize()föreSave()när ett dokument har redigerats kraftigt — det tar bort resurser som inte längre refereras av någon sida. - Konstruera rasterenheter (
BmpDevice,PngDevice,JpegDevice,TiffDevice) en gång per upplösning och återanvänd dem över sidor istället för att återskapa en enhet per sida. - Ange både ett användarlösenord och ett ägarlösenord när du anropar
Encrypt()— ett tomt användarlösenord låter vilken betraktare som helst öppna filen, medan ägarlösenordet styr åtkomst till ändringar av behörigheter. - Behåll annoterings- och fältobjekt (
TextAnnotation,TextBoxFieldoch liknande) levande tills efter attSave()har återvänt, eftersom dokumentet håller referenser till sidans innehåll som de lades till.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
Save() skapar en fil med oförändrat innehåll | Redigeringar gjordes på en sida eller annoteringskopia snarare än på objektet som erhölls från doc.Pages() | Modifiera objektet som returneras direkt av Pages(), Annotations() eller Form() |
| Renderad bild är tom eller blank | Fel sidindex skickades till Process() | PageCollection är 1-indexerad — sida 1 är doc.Pages()[1], inte [0] |
Encrypt() skapar en fil som fortfarande öppnas utan lösenord | Användarlösenord lämnades tomt | Skicka en icke-tom sträng som userPassword-argumentet |
| Extraherad text är tom för en skannad PDF | Sidan innehåller endast rasterbildsinnehåll, inte textoperatorer | TextAbsorber läser textoperatorer; bild-endast sidor har inga att extrahera |
Fält som lagts till med Form::Add() visas inte på sidan | Fältets Rectangle ligger utanför sidans MediaBox | Bekräfta att rektangelns koordinater ligger inom Page::MediaBox()s gränser |
FAQ
Beror Aspose.PDF FOSS för C++ på något kommersiellt PDF-bibliotek?
Nej. Det är en från grunden C++20-implementation utan beroende av någon kommersiell PDF stack, släppt under MIT-licensen.
Kan jag skapa en ny PDF från grunden istället för att öppna en befintlig?
Ja. Document har en standardkonstruktor som skapar ett tomt dokument; anropa Pages().Add() för att lägga till sidor innan du sparar.
Vilka rasterformat kan jag rendera till?
BmpDevice, PngDevice, JpegDevice och TiffDevice renderar enskilda sidor till BMP, PNG, JPEG respektive TIFF.
Vilka krypteringsalgoritmer stöds?
CryptoAlgorithm erbjuder RC4x40, RC4x128, AESx128 och AESx256, som skickas till Document::Encrypt().
Vart går jag härnäst?
Utvecklarguiden innehåller dedikerade sidor för dokument- och sidhantering, PDF-native grafik och former, annotationer och interaktiva formulär, samt de högre nivåns fasadklasser som omsluter vanliga filoperationer.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Document | Rotobjekt — öppna, skapa, spara och optimera en PDF |
Document.Pages() | Returnerar dokumentets PageCollection |
Document.Encrypt() / Decrypt() | Lösenordsskydda eller ta bort skydd från ett dokument |
Document.Form() | Returnerar dokumentets AcroForm behållare |
TextAbsorber | Extraherar ren text från ett dokument eller en sida |
TextFragmentAbsorber | Extraherar positionerade textfragment |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Rendera en sida till ett rasterbildformat |
Resolution | Utdata DPI som skickas till en renderingsenhet |
CryptoAlgorithm | Val av krypteringsalgoritm: RC4 eller AES, 40–256 bit |
Permissions | Åtkomstkontrollflaggor som skickas till Encrypt() |
Annotation / AnnotationCollection | Bastyp och behållare för sidanteckningar |
TextAnnotation | Textanteckning |
Form | AcroForm fältbehållare nådd via Document.Form() |
TextBoxField | Enradig/flerradig textformulärfält |