Aspose.PDF FOSS for C++ คุณลักษณะ

Aspose.PDF FOSS for C++ คุณลักษณะ

Aspose.PDF FOSS สำหรับคุณลักษณะของ C++

Aspose.PDF FOSS for C++ เป็นไลบรารี C++20 สำหรับสร้าง, เปิด, แก้ไข, และบันทึกเอกสาร PDF หน้าเว็บนี้สำรวจพื้นที่ความสามารถหลักและคลาสที่ทำหน้าที่เป็นจุดเข้าแต่ละพื้นที่จะได้รับการอธิบายอย่างละเอียดในหน้า developer-guide ของตนเอง.


การจัดการเอกสาร

Aspose::Pdf::Document คืออ็อบเจ็กต์รากสำหรับทุกการดำเนินการ มันเปิดไฟล์ที่มีอยู่จากเส้นทาง, เปิดเผยคอลเลกชันของหน้าโดยผ่าน Pages(), และบันทึกการเปลี่ยนแปลงด้วย Save(). Optimize() และ OptimizeResources() ลดขนาดไฟล์โดยการลบทรัพยากรที่ไม่ได้ใช้หรือซ้ำซ้อน.

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

การสกัดข้อความ

Aspose::Pdf::Text::TextAbsorber เดินผ่านเอกสารหรือหน้าเดียวและรวบรวมข้อความธรรมดา ซึ่งสามารถดึงได้ด้วย Text() หลังจากเรียก Visit(). TextFragmentAbsorber ทำการเดินเดียวกันแต่ส่งคืนอ็อบเจ็กต์ TextFragment แยกแต่ละอันผ่าน TextFragments(), ให้เข้าถึงตำแหน่งและสถานะข้อความของแต่ละส่วน.

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

การเรนเดอร์เป็นภาพเรสเตอร์

อุปกรณ์แสดงผลหน้าแปลง Page เป็นภาพแรสเตอร์ BmpDevice, PngDevice, JpegDevice และ TiffDevice มีลายเซ็น Process(page, output) เดียวกันและถูกสร้างด้วย Resolution ที่ตั้งค่า 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);
}

การเข้ารหัส

Document::Encrypt() ปกป้องเอกสารด้วยรหัสผ่านผู้ใช้ (ต้องใช้เพื่อเปิด) และรหัสผ่านเจ้าของ (ต้องใช้เพื่อเปลี่ยนสิทธิ์) โดยใช้อัลกอริทึมที่เลือกจาก enum CryptoAlgorithm: RC4x40, RC4x128, AESx128 หรือ AESx256. IsEncrypted() รายงานสถานะปัจจุบันและ Decrypt() ลบการป้องกันจากเอกสารที่เปิดอยู่แล้ว.

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

คำอธิบายประกอบ

คำอธิบายประกอบจะผูกโน้ตที่มองเห็นได้ รูปร่าง และการทำเครื่องหมายเข้ากับหน้าแต่ละหน้า. ประเภทคำอธิบายแต่ละประเภทสืบทอดจาก Annotation และถูกสร้างด้วย Page เป้าหมายและ Rectangle การวางตำแหน่ง, จากนั้นเพิ่มลงในหน้าโดยผ่าน คำอธิบายประกอบ() (ซึ่งเป็น 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 ถูกจัดการผ่าน Aspose::Pdf::Forms::Form, สามารถเข้าถึงได้ผ่าน Document::Form(). ชนิดฟิลด์เช่น TextBoxField ถูกสร้างเช่นเดียวกับคำอธิบายประกอบ — ด้วย Page และ Rectangle — และลงทะเบียนกับ 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");
}

เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • เปิดไฟล์อินพุตด้วยเส้นทางโดยใช้ตัวสร้าง Document; เรียก Save() พร้อมเส้นทางเอาต์พุตที่ระบุอย่างชัดเจนแทนการเขียนทับแหล่งที่มาขณะที่มีตัวจัดการอื่น ๆ ยังเปิดอยู่.
  • เรียก Optimize() ก่อน Save() เมื่อเอกสารถูกแก้ไขอย่างหนัก — มันจะลบทรัพยากรที่ไม่มีหน้าใดอ้างอิงอีกต่อไป.
  • สร้างอุปกรณ์ raster (BmpDevice, PngDevice, JpegDevice, TiffDevice) ครั้งเดียวต่อความละเอียดและใช้ซ้ำหลายหน้าแทนการสร้างอุปกรณ์ใหม่ต่อหน้า.
  • ตั้งรหัสผ่านผู้ใช้และรหัสผ่านเจ้าของพร้อมกันเมื่อเรียก Encrypt() — รหัสผ่านผู้ใช้ที่ว่างเปล่าจะทำให้ผู้ดูใดก็เปิดไฟล์ได้, ส่วนรหัสผ่านเจ้าของจะควบคุมการเปลี่ยนแปลงสิทธิ์.
  • ให้วัตถุ annotation และ field (TextAnnotation, TextBoxField และอื่น ๆ ที่คล้ายกัน) อยู่ในหน่วยความจำจนกว่าฟังก์ชัน Save() จะคืนค่าแล้ว, เนื่องจากเอกสารอ้างอิงถึงเนื้อหาหน้าที่พวกมันถูกเพิ่มเข้าไป.

ปัญหาที่พบบ่อย

ปัญหาสาเหตุวิธีแก้ไข
Save() สร้างไฟล์ที่มีเนื้อหาไม่เปลี่ยนแปลงมีการแก้ไขที่ทำบนสำเนาหน้าหรือคำอธิบายแทนวัตถุที่ได้จาก doc.Pages()แก้ไขวัตถุที่ส่งคืนโดยตรงจาก Pages(), Annotations() หรือ Form()
ภาพที่เรนเดอร์ว่างเปล่าดัชนีหน้าที่ส่งให้ Process() ผิดPageCollection มีการจัดทำดัชนีเริ่มที่ 1 — หน้า 1 คือ doc.Pages()[1], ไม่ใช่ [0]
Encrypt() สร้างไฟล์ที่ยังสามารถเปิดได้โดยไม่ต้องใช้รหัสผ่านรหัสผ่านผู้ใช้เว้นว่างไว้ส่งสตริงที่ไม่ว่างเปล่าเป็นอาร์กิวเมนต์ userPassword
ข้อความที่สกัดออกเป็นค่าว่างสำหรับ PDF ที่สแกนหน้ามีเนื้อหาเป็นภาพเรสเตอร์เท่านั้น ไม่ใช่ตัวดำเนินการข้อความTextAbsorber อ่านตัวดำเนินการข้อความ; หน้าที่มีเฉพาะภาพไม่มีอะไรให้สกัด
ฟิลด์ที่เพิ่มด้วย Form::Add() ไม่ปรากฏบนหน้าค่า Rectangle ของฟิลด์อยู่นอกขอบเขต MediaBox ของหน้ายืนยันว่าพิกัดสี่เหลี่ยมอยู่ภายในขอบเขตของ Page::MediaBox()

FAQ

Aspose.PDF FOSS สำหรับ C++ มีการพึ่งพาไลบรารี PDF เชิงพาณิชย์ใดหรือไม่?

ไม่. นี่เป็นการทำงานจากศูนย์ด้วย C++20 ที่ไม่มีการพึ่งพา stack PDF เชิงพาณิชย์ใด ๆ และเผยแพร่ภายใต้สัญญาอนุญาต MIT.

ฉันสามารถสร้าง PDF ใหม่จากศูนย์แทนการเปิดไฟล์ที่มีอยู่ได้หรือไม่?

ใช่. Document มีคอนสตรัคเตอร์เริ่มต้นที่สร้างเอกสารเปล่า; เรียก Pages().Add() เพื่อเพิ่มหน้า ก่อนบันทึก.

ฉันสามารถเรนเดอร์เป็นรูปแบบเรสเตอร์ใดได้บ้าง?

BmpDevice, PngDevice, JpegDevice และ TiffDevice เรนเดอร์หน้าแต่ละหน้าเป็น BMP, PNG, JPEG, และ TIFF ตามลำดับ.

อัลกอริทึมการเข้ารหัสใดที่รองรับ?

CryptoAlgorithm มี RC4x40, RC4x128, AESx128 และ AESx256, ส่งต่อไปยัง Document::Encrypt().

ต่อไปฉันควรไปที่ไหน?

คู่มือผู้พัฒนารวมถึงหน้าที่ทุ่มเทสำหรับการจัดการเอกสารและหน้า, กราฟิกและรูปทรงแบบ PDF-native, คำอธิบายและแบบฟอร์มโต้ตอบ, และคลาส facade ระดับสูงที่ห่อหุ้มการดำเนินการไฟล์ทั่วไป.


API Reference สรุป

คลาส/เมธอดคำอธิบาย
Documentอ็อบเจกต์ราก — เปิด, สร้าง, บันทึก, และเพิ่มประสิทธิภาพ PDF
Document.Pages()คืนค่า PageCollection ของเอกสาร
Document.Encrypt() / Decrypt()ตั้งรหัสผ่านหรือถอดการป้องกันจากเอกสาร
Document.Form()ส่งคืน container ของ AcroForm ของเอกสาร
TextAbsorberสกัดข้อความธรรมดาจากเอกสารหรือหน้า
TextFragmentAbsorberสกัดส่วนข้อความที่กำหนดตำแหน่ง
BmpDevice / PngDevice / JpegDevice / TiffDeviceเรนเดอร์หน้าเป็นรูปแบบภาพเรสเตอร์
ResolutionDPI ของเอาต์พุตที่ส่งต่อให้กับอุปกรณ์เรนเดอร์
CryptoAlgorithmการเลือกอัลกอริทึมการเข้ารหัส: RC4 หรือ AES, 40–256 บิต
Permissionsแฟล็กการควบคุมการเข้าถึงที่ส่งต่อให้ Encrypt()
Annotation / AnnotationCollectionประเภทฐานและคอนเทนเนอร์สำหรับคำอธิบายบนหน้า
TextAnnotationคำอธิบายบันทึกข้อความ
Formคอนเทนเนอร์ของฟิลด์ AcroForm ที่เข้าถึงได้ผ่าน Document.Form()
TextBoxFieldฟิลด์ฟอร์มข้อความแบบบรรทัดเดียว/หลายบรรทัด

ดูเพิ่มเติม

 ภาษาไทย