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 | เรนเดอร์หน้าเป็นรูปแบบภาพเรสเตอร์ |
Resolution | DPI ของเอาต์พุตที่ส่งต่อให้กับอุปกรณ์เรนเดอร์ |
CryptoAlgorithm | การเลือกอัลกอริทึมการเข้ารหัส: RC4 หรือ AES, 40–256 บิต |
Permissions | แฟล็กการควบคุมการเข้าถึงที่ส่งต่อให้ Encrypt() |
Annotation / AnnotationCollection | ประเภทฐานและคอนเทนเนอร์สำหรับคำอธิบายบนหน้า |
TextAnnotation | คำอธิบายบันทึกข้อความ |
Form | คอนเทนเนอร์ของฟิลด์ AcroForm ที่เข้าถึงได้ผ่าน Document.Form() |
TextBoxField | ฟิลด์ฟอร์มข้อความแบบบรรทัดเดียว/หลายบรรทัด |