Giriş
Aspose.PDF FOSS for C++ açık kaynaklı bir C++20 kütüphanesidir ve PDF belgeleriyle çalışmak için kullanılır. API yüzeyi belge ve sayfa yönetimi, metin çıkarma, raster renderleme, şifreleme, açıklamalar ve etkileşimli AcroForm alanlarını kapsar — bir C++ uygulamasının dış bir PDF motoruna veya ticari bir SDK’ya bağımlı olmadan PDF dosyalarını oluşturması, incelemesi veya dönüştürmesi gerektiğinde en sık ihtiyaç duyulan işlemler.
Kütüphane, yalnızca C++ standart kütüphanesine bağlanır. BMP, JPEG ve TIFF raster kodlayıcıları ve sayfa rasterleştiricisi gibi iç bileşenler projede sıfırdan uygulanmıştır; bu sayede bir sistem PDF rendercisine, ticari bir PDF bileşenine veya üçüncü taraf bir görüntü kodlayıcısına bağımlılık yoktur. Bu, C++20 uyumlu bir derleyici ve standart kütüphane dışında bağımlılık ayak izini sıfırda tutar.
Aspose.PDF FOSS for C++ MIT lisansı altında yayınlanmaktadır. Bu yazı, Document sınıfı ve destekleyici tipleri tarafından sunulan ana özellik alanlarını, ardından bir Hızlı Başlangıç örneğini ve şu anda onaylanmış format desteğini inceler.
Temel Özellikler
Belge ve Sayfa Yönetimi
Document sınıfı PDF dosyalarını açmak, incelemek ve kaydetmek için giriş noktasıdır. Sayfalara Document.Pages() aracılığıyla erişilir; bu, Count(), Add(), Insert(pageNumber) ve Delete(pageNumber) destekleyen bir PageCollection döndürür. Belge düzeyindeki meta veriler Document.Info() (bir DocumentInfo örneği) aracılığıyla okunur ve güncellenir veya doğrudan Document.SetTitle() ile ayarlanabilir.
#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() ve Document.OptimizeResources(), kaydetmeden önce kullanılmayan kaynakları birleştirerek ve budayarak çıktı dosyası boyutunu azaltır.
Metin Çıkarma
Aspose::Pdf::Text::TextAbsorber, bir bütün belge ya da tek bir sayfanın düz metin içeriğini çıkarır. Visit(), hedefi dolaşır ve Text() birikmiş dizeyi döndürür. TextFragmentAbsorber, daha ince bir granülerlikte çalışır, bireysel metin akışlarını bir TextFragmentCollection aracılığıyla ortaya çıkarır.
#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";
}
Raster Görüntülere Renderleme
Sayfalar, PngDevice, JpegDevice, BmpDevice ve TiffDevice gibi format-özel cihaz sınıfları aracılığıyla raster formatlarına renderlanır — her biri Process(page, output) uygular. Çıktı çözünürlüğü Resolution sınıfı ile kontrol edilir.
#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, JPEG çıktısı için aynı Process(page, output) desenini izler. TiffDevice, ayrıca Process(document, fromPage, toPage, output) aracılığıyla tek bir çağrıda çok sayfalı çıktıyı destekler ve form alanlarının raster çıktıya nasıl renderlandığını kontrol etmek için RenderingOptions() sunar.
Şifreleme ve Erişim İzinleri
Document.Encrypt(), bir kullanıcı ve sahibi şifresiyle bir belgeyi korur, şifreyi CryptoAlgorithm enumu aracılığıyla seçer: RC4x40, RC4x128, AESx128 veya AESx256. Verilen izinler Permissions türüyle tanımlanır; bu türün bayrak değerleri PrintDocument, ModifyContent, ExtractContent, ModifyTextAnnotations, FillForm, ExtractContentWithDisabilities, AssembleDocument ve PrintingQuality içerir.
#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");
}
Zaten açık bir şifreli belge, Document.Decrypt() ile yerinde çözümlenir. Document.IsEncrypted(), yüklü bir belgenin şu anda bir şifreleme sözlüğü taşıyıp taşımadığını raporlar.
Açıklamalar
Sayfa düzeyindeki açıklamalar — metin notları, şekiller ve işaretlemeler — Page.Açıklamalar() aracılığıyla erişilir ve bir AnnotationCollection döndürür. Bireysel girişler Contents(), Rect(), Color(), Border() ve AnnotationType() gibi ortak özellikleri ortaya çıkarır ve sayfadan kaldırılabilir veya statik içeriğe düzleştirilebilir.
#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");
}
Herhangi bir tek Annotation, aşağıda açıklanan form-düzleştirme iş akışından bağımsız olarak, kendi Flatten() yöntemiyle doğrudan statik sayfa içeriğine dönüştürülebilir.
Etkileşimli Formlar
AcroForm alanları bir belgede Document.Form() aracılığıyla yönetilir ve bu, Count(), HasField(fieldName), Delete(fieldName) ve Flatten() destekleyen bir Form örneği döndürür. Yeni alanlar Form.Add(field, pageNumber) ile eklenir, burada field TextBoxField, CheckboxField, ChoiceField veya ButtonField gibi bir Field alt tipi olan somut bir field‘tir.
#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");
}
Hızlı Başlangıç
Kütüphaneyi bir CMake alt dizini olarak ekleyin ve aspose_pdf_foss hedefine karşı bağlayın:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Bir belge açın, metnini çıkarın ve ilk sayfayı PNG olarak oluşturun:
#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);
}
Desteklenen Biçimler
| Biçim | Uzantı | Okuma | Yazma |
|---|---|---|---|
| BMP | bmp | — | ✓ |
| JPEG | jpeg | — | ✓ |
| TIFF | tiff | — | ✓ |
| Text | txt | — | ✓ |
| SVG | svg | ✓ | — |
Açık Kaynak & Lisanslama
Aspose.PDF FOSS for C++ MIT lisansı altında yayınlanmıştır, ticari kullanım, değiştirme ve telif ücreti ödemeden yeniden dağıtımına izin verir. Kaynak kodu şu adreste mevcuttur: github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.
MIT lisansı koşulları altında ticari kullanım izindir. Projeniz kurumsal düzeyde destek, genişletilmiş biçim kapsamı veya bulut entegrasyonu gerektiriyorsa, Aspose.PDF — Enterprise Product Family ayrı bir ticari tekliftir.