Facades API ile Aspose.PDF FOSS for C++'de Nasıl Çalışılır

Facades API ile Aspose.PDF FOSS for C++'de Nasıl Çalışılır

Aspose.PDF FOSS for C++ yüksek seviyeli arabirim ve düzenleyici sınıflarını — PdfExtractor, PdfBookmarkEditor, PdfContentEditor, PdfAnnotationEditor, FormEditor, PdfFileEditor ve PdfConverter dahil — Aspose::Pdf::Facades ad alanında gruplar. Her biri, temel Document API üzerine tek bir belge bakım görevini kapsar, böylece içeriği çıkarabilir, yer imlerini düzenleyebilir veya form alanlarını doldurabilirsiniz; alttaki sayfa ve nesne yürüyüşlerini kendiniz el ile kodlamadan. Bu rehber, mevcut bir PDF’ten gömülü dosya eklerini, sayfa metnini ve gömülü görselleri çıkarmak için kullanılan PdfExtractor arabirimine odaklanır.

Adım Adım Rehber

Adım 1: Paketi Kurun

Aspose.PDF FOSS for C++‘ı bir CMake alt dizini olarak ekleyin ve statik kütüphane hedefini bağlayın:

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp.git
add_subdirectory(Aspose.PDF-FOSS-for-Cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

Herhangi bir arabirim kodu yazmadan önce araç zinciri ve bağlama adımının doğru çözüldüğünden emin olun:

cmake -S . -B build
cmake --build build

C++20 derleyicisi ile yapılan temiz bir derleme, aspose_pdf_foss‘ın your_app‘e bağlandığını doğrular.


Adım 2: Gerekli Sınıfları İçe Aktarın

PdfExtractor, aspose/pdf/facades/ altında bulunur, çekirdek ad alanından Document ile birlikte:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/facades/pdf_extractor.hpp>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Facades;

Adım 3: Bir Belgeyi PdfExtractor ile Bağlayın

Her facade sınıfı, oluşturulduktan sonra bir belgeye eklemek için BindPdf(srcFile) ve BindPdf(srcDoc)‘yi ortaya çıkaran ortak bir Facade temelden türetilir. PdfExtractor ayrıca, bu kılavuz boyunca kullanılan desen olan, yapıcıda doğrudan zaten açık bir Document kabul eder:

Document doc("input.pdf");
PdfExtractor extractor(doc);

Adım 4: Gömülü Dosya Eklerini Çıkarın

Önce Document::EmbeddedFiles()‘ı kontrol edin, ardından ek adlarını GetAttachNames() ile okuyun ve bir ekin baytlarını GetAttachment() ile diske çıkarın:

#include <iostream>

if (doc.EmbeddedFiles().Count() > 0) {
    std::vector<std::string> names = extractor.GetAttachNames();
    for (const auto& name : names) {
        std::cout << "Attachment: " << name << "\n";
    }

    // Writes the bytes of the first attachment to disk
    extractor.GetAttachment("extracted_attachment.bin");
}

Adım 5: Her Sayfadan Metni Çıkarın

ExtractText() ardından GetText(), tüm belgenin metnini tek bir dosyaya yazar:

extractor.ExtractText();
extractor.GetText("extracted_text.txt");

Bunun yerine sayfa başına bir dosya yakalamak için, sayfa aralığını StartPage() / EndPage() ile ayarlayın, ardından HasNextPageText() / GetNextPageText() öğesini bir döngüde çalıştırın ve her çağrıya kendi çıkış yolunu verin:

extractor.StartPage(1);
extractor.EndPage(doc.Pages().Count());

int pageNumber = extractor.StartPage();
while (extractor.HasNextPageText()) {
    std::string outputFile = "page_" + std::to_string(pageNumber) + ".txt";
    extractor.GetNextPageText(outputFile);
    ++pageNumber;
}

Adım 6: Gömülü Görüntüleri Çıkar

ExtractImage() görüntü imlecini hazırlar; HasNextImage() / GetNextImage() ardından görüntüleri tek tek dolaşır ve her birini verdiğiniz yola yazar:

extractor.ExtractImage();

int imageIndex = 1;
while (extractor.HasNextImage()) {
    std::string outputFile = "extracted_image_" + std::to_string(imageIndex);
    if (extractor.GetNextImage(outputFile)) {
        ++imageIndex;
    }
}

Yaygın Sorunlar ve Çözümler

GetAttachNames() boş bir vektör döndürür. Kaynak PDF’de gömülü dosya yok. Kontrol edin doc.EmbeddedFiles().Count() herhangi bir ek yöntemi çağırmadan önce PdfExtractor böylece ekleri hiç olmayan bir belgeden çıkarmaya çalışmazsınız.

Sayfa metni döngüsü hiçbir zaman gövdeye girmez. HasNextPageText() returns false hemen eğer StartPage() / EndPage() hiç ayarlanmamışsa, ya da belge sayfasının gerçek sayısını aşan bir aralığa ayarlanmışsa. Aralığı açıkça şu konumdan ayarlayın doc.Pages().Count() kontrol etmeden önce HasNextPageText().

GetNextImage() returns false ilk çağrıda. ExtractImage() kontrol etmeden önce görsel imlecini hazırlamak için bir kez çağrılmalıdır HasNextImage() veya çağır GetNextImage(). Çağırma GetNextImage() önceden bir ExtractImage() çağrı, çağıranın bakış açısından tanımsızdır — her zaman çağır ExtractImage() ilk.

Her çıkarılan görsel veya sayfa-metni dosyası bir önceki dosyanın üzerine yazar. GetNextImage() and GetNextPageText() her biri gerçek bir çıktı yolu alır; facade sizin için benzersiz dosya adları oluşturmaz. Adım 5 ve 6’da gösterildiği gibi, her yineleme için ayrı bir yol oluşturun (örneğin, artan bir sayaç ekleyerek).

Bağlantı hatası: tanımsız referans aspose_pdf_foss semboller. Confirm add_subdirectory() klonlanmış depo köküne işaret eder ve bu target_link_libraries() adlandırır aspose_pdf_foss hedefi tam olarak, C++20 standardı yapılandırılmış şekilde your_app.

Sıkça Sorulan Sorular

API Facadeları ile temel Document API arasındaki fark nedir?

Temel Document API (Document, PageCollection, Annotation vb.) PDF nesne modelini doğrudan ortaya çıkarır. PdfExtractor gibi facade sınıfları bunun üzerine oturur ve belirli çok-adımlı bir görevi — içeriği çıkarma, yer imlerini düzenleme, form alanlarını doldurma — daha dar, amaca yönelik bir arayüzün arkasına paketler.

PdfExtractor ile içerik çıkarttığım aynı şekilde yer imlerini düzenleyebilir veya form alanlarını doldurabilir miyim?

Evet. PdfBookmarkEditor (CreateBookmarks(), ModifyBookmarks(), ExtractBookmarks() ve DeleteBookmarks() ile) ve FormEditor (AddField(), RemoveField() ve SetFieldAttribute() ile) aynı Aspose::Pdf::Facades ad alanında bulunur ve Adım 2 ve 3’te gösterilen aynı include/construct desenini izler — her biri yalnızca belgenin farklı bir bölümü üzerinde çalışır.

PdfExtractor şifre korumalı bir PDF’i okuyabilir mi?

Herhangi bir çıkarma yöntemini çağırmadan önce şifreyi ayarlayın:

extractor.Password("owner-or-user-password");

PdfExtractor::Password() basit bir okuma/yazma özelliğidir, bu yüzden ExtractText(), ExtractImage() veya ekleme yöntemlerinden önce ayarlanmalıdır.

PDF’de çıkarılacak metin, resim veya ek yoksa ne olur?

Hiçbir şey hata atmaz. GetAttachNames() boş bir vektör döndürür ve HasNextPageText() / HasNextImage() ilk kontrolde false döndürür, bu yüzden ilgili döngü gövdesi hiç çalışmaz.

Belirli bir facade sınıfı için hangi başlık dosyasını dahil etmeliyim?

Her facade sınıfı, aspose/pdf/facades/ altında, sınıf adıyla eşleşen kendi başlık dosyasını getirir: pdf_extractor.hpp PdfExtractor için, pdf_bookmark_editor.hpp PdfBookmarkEditor için, form_editor.hpp FormEditor için, ve bookmark.hpp Bookmark / Bookmarks değer tipleri için.

Ayrıca Bakınız

 Türkçe