מבוא

Aspose.PDF FOSS for C++ היא ספרייה קוד פתוח חדשה לעבודה עם מסמכי PDF מקוד C++20. היא משוחררת תחת רישיון MIT ואינה דורשת תלות בזמן ריצה מעבר לספריית ה‑standard של C++ — מקודדי BMP, JPEG, ו‑TIFF, מרסטר העמודים, ומפענח ה‑PDF מיושמים פנימית, ולכן אין קישור למנוע PDF מסחרי, לקודק תמונות חיצוני, או לספריית קריפטוגרפיה של צד שלישי.

הספרייה מאורגנת סביב המחלקה Aspose::Pdf::Document, אשר טוענת קובץ PDF ממסלול קובץ ומחשפת את תוכנו דרך Document.Pages(), שהיא PageCollection של אובייקטים Page בודדים. משם, API כוללת חילוץ טקסט, רסטריזציה של דפים, הצפנת מסמכים, annotations, ושדות AcroForm — הפעולות הדרושות לקריאה, בדיקה ושינוי של קבצי PDF קיימים, או הרכבת חדשים מאפס.

הגרסה הזו מיועדת למפתחים הזקוקים לעיבוד PDF בתוך קוד בסיס C++ ללא הוספת רישיון מסחרי או שרשרת תלות של צד שלישי: צינורות מסמכים, שירותי חילוץ תוכן, כלי המרה מ‑PDF לתמונה, ויישומים שצריכים להצפין או לקרוא חזרה נתוני טופס כחלק מבנייה רחבה יותר.


מה כלול

טעינת מסמכים וגישה לעמודים

פתיחת PDF קיים היא קריאה בונה יחידה אחת. Document מנתח את הקובץ ומחשוף את הדפים שלו דרך Pages(), שמחזירה PageCollection התומכת באינדקס שמתחיל מ‑1, Count(), ו‑Add()/Insert()/Delete() לשינוי סדר הדפים.

#include <aspose/pdf/document.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Page count: " << doc.Pages().Count() << "\n";

    auto page = doc.Pages()[1];
    std::cout << "First page number: " << page.Number() << "\n";
}

חילוץ טקסט

Aspose::Pdf::Text::TextAbsorber משוטט על Document או על Page יחיד ואוסף את תוכן הטקסט שהוא מוצא. קראו Visit() עם מסמך או דף, לאחר מכן קראו את התוצאה בעזרת Text(). HasErrors() מדווח האם הסופג נתקל בתוכן שלא הצליח לעבד.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

    if (absorber.HasErrors()) {
        std::cerr << "Some content could not be extracted\n";
    }
}

המרה לתמונות רסטר

דפים מומרצים ל‑BMP, JPEG, או TIFF דרך המחלקות BmpDevice, JpegDevice ו‑TiffDevice. כל מכשיר נבנה עם Resolution ומחשוף את המתודה Process(page, output) אשר כותבת את התמונה המומרצת ל‑זרם פלט.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.bmp", std::ios::binary);
    bmp.Process(doc.Pages()[1], out);
}

הצפנה

Document.Encrypt() מגן על מסמך עם סיסמת משתמש, סיסמת בעלים, ערך הרשאה, ובחירת CryptoAlgorithm. המונה כולל RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128), ו‑AES-256 (AESx256). Document.Decrypt() מבצע את הפעולה בכיוון ההפוך, ו‑IsEncrypted() מדווח האם המסמך מוצפן כעת.

#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");
}

הערות

כל Page חושף AnnotationCollection דרך Annotations(). TextAnnotation נבנה בהתייחס למסמך הבעלים, ממוקם עם Rectangle, ונוסף לאוסף של הדף באמצעות Add().

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    Aspose::Pdf::Annotations::TextAnnotation note(doc);
    note.Rect(Aspose::Pdf::Rectangle(100.0, 700.0, 200.0, 720.0, false));
    note.Contents("Reviewed - see section 2");

    doc.Pages()[1].Annotations().Add(note);
    doc.Save("annotated.pdf");
}

שדות AcroForm

Document.Form() מחזיר את ה‑Form של המסמך, אשר חושף שדות קיימים דרך Fields() כ‑std::vector<Field*>. כל Field מדווח את שמו ואת הערך הנוכחי שלו דרך PartialName() ו‑Value(), ו‑Form.Flatten() משלב את המראה של כל שדה לתוכן הדף, ומסיר אינטראקטיביות.

#include <aspose/pdf/document.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("form.pdf");
    auto& form = doc.Form();

    std::cout << "Field count: " << form.Count() << "\n";
    for (auto* field : form.Fields()) {
        std::cout << field->PartialName() << " = " << field->Value() << "\n";
    }

    form.Flatten();
    doc.Save("flattened.pdf");
}

התחלה מהירה

הוסיפו את הספרייה כתת‑ספרייה של CMake וקשרו אל היעד aspose_pdf_foss:

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

פתח מסמך, הדפס את מספר הדפים שלו, שלוף את הטקסט שלו, והצג את העמוד הראשון לקובץ BMP:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Pages: " << doc.Pages().Count() << "\n";

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

    Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.bmp", std::ios::binary);
    bmp.Process(doc.Pages()[1], out);
}

פורמטים נתמכים

פורמטסיומתקריאהכתיבה
BMP.bmp—✓
JPEG.jpg—✓
TIFF.tiff—✓
Text.txt—✓
SVG.svg✓—

BMP, JPEG, ו‑TIFF הם פלטי רינדור עמוד שנוצרים על‑ידי מחלקות המכשיר המתאימות. טקסט נשלף מ‑PDF באמצעות TextAbsorber. SVG מיובא כתוכן וקטורי דרך נתיב הטעינה של SVG של הספרייה.


קוד פתוח והרישוי

Aspose.PDF FOSS עבור C++ מופץ תחת רישיון MIT, עם הקוד המלא זמין ב- github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. הרישיון מאפשר שימוש מסחרי, שינוי והפצה מחדש ללא הסכם נפרד.


התחלה

משאבים קשורים