מבוא
Aspose.PDF FOSS עבור C++ היא ספריית קוד פתוח ב-C++20 לעבודה עם מסמכי PDF. משטח ה-API כולל ניהול מסמכים ודפים, חילוץ טקסט, רינדור רסטר, הצפנה, הערות, ושדות אינטראקטיביים של AcroForm — הפעולות הנפוצות ביותר כאשר אפליקציית C++ חייבת ליצור, לבדוק או לשנות קבצי PDF מבלי להסתמך על מנוע PDF חיצוני או SDK מסחרי.
הספרייה מקושרת רק לספרייה הסטנדרטית של C++. רכיבים פנימיים כגון מקודדי הרסטר BMP, JPEG ו-TIFF ומרשתת הדפים מיושמים מאפס בתוך הפרויקט, ולכן אין תלות במרנדר PDF של מערכת, ברכיב PDF מסחרי, או בקודק תמונה של צד שלישי. כך משאבת התלות נשארת אפסית מעבר למהדר תואם C++20 ולספרייה הסטנדרטית.
Aspose.PDF FOSS עבור C++ מפורסמת תחת רישיון MIT. פוסט זה מוביל דרך תחומי התכונות המרכזיים שהחשפו על-ידי המחלקה Document והסוגים התומכים שלה, ולאחר מכן מציג דוגמת התחלה מהירה ואת התמיכה בפורמטים המאושרת כעת.
תכונות מפתח
ניהול מסמכים ודפים
המחלקה Document היא נקודת הכניסה לפתיחה, בדיקה ושמירת קובצי PDF. דפים נגישים דרך Document.Pages(), שמחזירה PageCollection התומכת ב-Count(), Add(), Insert(pageNumber) ו-Delete(pageNumber). מטא-נתונים ברמת המסמך נקראים ומתעדכנים דרך Document.Info() (מופע של DocumentInfo) או מוגדרים ישירות עם Document.SetTitle().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_collection.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
std::cout << "Page count: " << doc.Pages().Count() << "\n";
// Insert a blank page after page 1, then drop the last page
doc.Pages().Insert(2);
doc.Pages().Delete(doc.Pages().Count());
doc.SetTitle("Generated Report");
doc.Save("output.pdf");
}
Document.Optimize() ו-Document.OptimizeResources() מצמצמים את גודל קובץ הפלט על-ידי איחוד והסרת משאבים שלא בשימוש לפני השמירה.
חילוץ טקסט
Aspose::Pdf::Text::TextAbsorber מחלץ את תוכן הטקסט הפשוט של מסמך שלם או דף בודד. Visit() עובר על היעד ו-Text() מחזיר את המחרוזת המצטברת. TextFragmentAbsorber פועל ברזולוציה מדויקת יותר, חושף רצפי טקסט בודדים דרך TextFragmentCollection.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/text_fragment_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
// Extract all text from the document
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
// Extract text fragments from page 1
Aspose::Pdf::Text::TextFragmentAbsorber fragmentAbsorber;
fragmentAbsorber.Visit(doc.Pages()[1]);
auto fragments = fragmentAbsorber.TextFragments();
std::cout << "Fragments on page 1: " << fragments.Count() << "\n";
}
עיבוד לתמונות רסטר
הדפים מומרצים לפורמטים רסטריים דרך מחלקות מכשיר לכל פורמט — PngDevice, JpegDevice, BmpDevice ו-TiffDevice — שכל אחת מיישמת את Process(page, output). הרזולוציה של הפלט נשלטת באמצעות מחלקת Resolution.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Devices::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
std::ofstream pngOut("page1.png", std::ios::binary);
png.Process(page, pngOut);
Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
std::ofstream bmpOut("page1.bmp", std::ios::binary);
bmp.Process(page, bmpOut);
}
JpegDevice פועל בהתאם לאותו דפוס Process(page, output) עבור פלט JPEG. TiffDevice תומך בנוסף בפלט מרובה-דפים בקריאה אחת דרך Process(document, fromPage, toPage, output), ומחשוף RenderingOptions() לשליטה באופן שבו שדות טופס מוּעברים לפלט הרסטר.
הצפנה והרשאות גישה
Document.Encrypt() מגן על מסמך באמצעות סיסמת משתמש ובעלים, ובוחר את הצופן דרך המניין CryptoAlgorithm: RC4x40, RC4x128, AESx128 או AESx256. ההרשאות שהוענקו מתוארות באמצעות הסוג Permissions, שערכי הדגלים שלו כוללים את PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument ו-PrintingQuality.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions(),
Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");
}
מסמך מוצפן שכבר פתוח מפוענח במקום עם Document.Decrypt(). Document.IsEncrypted() מדווח האם למסמך הטעון כרגע יש מילון הצפנה.
ההסברים
ההסברים ברמת העמוד — פתקי טקסט, צורות, ותיוג — נגישים דרך Page.Annotations(), שמחזיר AnnotationCollection. ערכים בודדים חושפים תכונות משותפות כגון Contents(), Rect(), Color(), Border(), ו-AnnotationType(), וניתן להסירם מהעמוד או לשטוח אותם לתוכן סטטי.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& annotations = doc.Pages()[1].Annotations();
std::cout << "Annotation count: " << annotations.Count() << "\n";
for (int i = 0; i < static_cast<int>(annotations.Count()); ++i) {
std::cout << "Contents: " << annotations[i].Contents() << "\n";
}
// Remove the first annotation on the page
if (annotations.Count() > 0) {
annotations.Delete(annotations[0]);
}
doc.Save("output.pdf");
}
כל Annotation יחיד יכול גם להיות מומר לתוכן עמוד סטטי ישירות באמצעות שיטת Flatten() שלו, באופן עצמאי מתהליך השטחת הטפסים המתואר למטה.
טפסים אינטראקטיביים
שדות AcroForm במסמך מנוהלים דרך Document.Form(), שמחזיר מופע של Form התומך ב-Count(), HasField(fieldName), Delete(fieldName), וב-Flatten(). שדות חדשים מצורפים באמצעות Form.Add(field, pageNumber), כאשר field הוא תת-סוג קונקרטי של Field כגון TextBoxField, CheckboxField, ChoiceField, או ButtonField.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& form = doc.Form();
std::cout << "Form fields: " << form.Count() << "\n";
if (form.HasField("Signature1")) {
form.Delete("Signature1");
}
// Convert every remaining field into static page content
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)
פתח מסמך, חילץ את הטקסט שלו, ותרגם את העמוד הראשון ל-PNG:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/png_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::PngDevice png(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.png", std::ios::binary);
png.Process(doc.Pages()[1], out);
}
פורמטים נתמכים
| פורמט | הרחבה | קריאה | כתיבה |
|---|---|---|---|
| BMP | bmp | — | ✓ |
| JPEG | jpeg | — | ✓ |
| TIFF | tiff | — | ✓ |
| Text | txt | — | ✓ |
| SVG | svg | ✓ | — |
קוד פתוח ורישוי
Aspose.PDF FOSS עבור C++ משוחרר תחת רישיון MIT, המאפשר שימוש מסחרי, שינוי והפצה מחדש ללא תמלוגים. המקור זמין ב github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.
שימוש מסחרי מותר בהתאם לתנאי רישיון MIT. אם הפרויקט שלך דורש תמיכה ברמת ארגונית, כיסוי פורמטים מורחב, או אינטגרציה עם ענן, הAspose.PDF — Enterprise Product Family הוא הצעה מסחרית נפרדת.