บทนำ
Aspose.PDF FOSS for C++ เป็นไลบรารีโอเพ่นซอร์สใหม่สำหรับทำงานกับเอกสาร PDF จากโค้ด C++20 มันถูกปล่อยภายใต้สัญญาอนุญาต MIT และไม่มีการพึ่งพาไลบรารีรันไทม์นอกจากมาตรฐานไลบรารี C++ — ตัวเข้ารหัส BMP, JPEG, และ TIFF, ตัวเรสเตอร์หน้า, และตัวพาร์ส PDF ถูกทำงานภายใน จึงไม่มีการเชื่อมต่อกับเอนจิน PDF เชิงพาณิชย์, ตัวเข้ารหัสภาพภายนอก, หรือไลบรารีการเข้ารหัสของบุคคลที่สาม.
ไลบรารีนี้จัดโครงสร้างโดยอิงคลาส Aspose::Pdf::Document ซึ่งโหลดไฟล์ PDF จากเส้นทางไฟล์และเปิดเผยเนื้อหาผ่าน Document.Pages() ซึ่งเป็น PageCollection ของอ็อบเจกต์ Page รายบุคคล จากนั้น API ครอบคลุมการสกัดข้อความ, การเรสเตอร์หน้า, การเข้ารหัสเอกสาร, คำอธิบาย, และฟิลด์ AcroForm — การดำเนินการที่จำเป็นสำหรับการอ่าน, ตรวจสอบ, และแก้ไขไฟล์ PDF ที่มีอยู่, หรือประกอบไฟล์ใหม่ตั้งแต่ต้น.
การปล่อยนี้มุ่งหมายไปยังนักพัฒนาที่ต้องการการประมวลผล PDF ภายในโค้ดฐาน C++ โดยไม่ต้องเพิ่มใบอนุญาตเชิงพาณิชย์หรือห่วงโซ่การพึ่งพาของบุคคลที่สาม: สายงานเอกสาร, บริการสกัดเนื้อหา, เครื่องมือแปลง PDF เป็นภาพ, และแอปพลิเคชันที่ต้องการเข้ารหัสหรืออ่านข้อมูลแบบฟอร์มกลับเป็นส่วนหนึ่งของการสร้างที่ใหญ่ขึ้น.
สิ่งที่รวมอยู่
การโหลดเอกสารและการเข้าถึงหน้า
การเปิด PDF ที่มีอยู่เป็นการเรียกคอนสตรัคเตอร์เพียงครั้งเดียว Document จะทำการพาร์เซไฟล์และเปิดเผยหน้าต่างๆ ผ่าน Pages() ซึ่งจะคืนค่า PageCollection ที่รองรับการจัดทำดัชนีแบบ 1‑based, 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";
}
}
การเรนเดอร์เป็นภาพแรสเตอร์
หน้า (Pages) เรนเดอร์เป็น 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 ค่าตัวเลข enum ครอบคลุม 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");
}
เริ่มต้นอย่างรวดเร็ว
เพิ่มไลบรารีเป็น subdirectory ของ CMake และลิงก์กับ target 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. ใบอนุญาตอนุญาตให้ใช้ในเชิงพาณิชย์, แก้ไข, และแจกจ่ายต่อได้โดยไม่ต้องมีข้อตกลงแยกต่างหาก.