บทนำ

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. ใบอนุญาตอนุญาตให้ใช้ในเชิงพาณิชย์, แก้ไข, และแจกจ่ายต่อได้โดยไม่ต้องมีข้อตกลงแยกต่างหาก.


เริ่มต้นใช้งาน

แหล่งข้อมูลที่เกี่ยวข้อง