如何自定义拆分PDF文件

Aspose.PDF.Cpp.22.8
c++

void SplittingDocuments() {
    // String for path name
    String _dataDir("C:\\Samples\\");

    // String for input file name
    String documentFileName("sample.pdf");
    
    // Open document
    auto document = MakeObject<Document>(_dataDir + documentFileName);

    int pageCount = 1;

    // Loop through all the pages
    for(auto page : document->get_Pages())
    {
        auto newDocument = MakeObject<Document>(_dataDir + documentFileName);
        newDocument->get_Pages()->**Add(page);**
        newDocument->Save(_dataDir + u"page_" + pageCount + u"_out.pdf");
        pageCount++;
    }
}

你们的官方文档 可以 add 单页文件 我看代码这个add却是 private的:
error C2248: “Aspose::Pdf::PageCollection::Add”: 无法访问 private 成员(在“Aspose::Pdf::PageCollection”类中声明)

我现在有一个需求一个pdf文件 一共9页 123,456,789分别存三个文件 请问如何操作?

@ywapple

为了将一个 PDF 文档拆分为多个文件,您可以简单地使用 API 的 Aspose::Pdf::PageCollection::Add 方法,您可以在其中传递要添加的页面列表新文档并保存。您可以使用共享方法创建一个新文档并将页面列表添加到其 PageCollection 中以满足您的要求。如果您遇到任何问题,请随时告诉我们。

image.png (37.8 KB)
这个方法是private的

private:
void Add(const System::SharedPtr& entity) override;


@ywapple

我们正在检查它,并会尽快回复您。

@ywapple

您能否分享您的 main.cpp 程序文件的完整代码片段?我们需要检查它以便进一步进行。

image.png (26.4 KB)

@ywapple

这看起来很奇怪,因为我们在我们的环境中使用了代码片段并且我们没有注意到任何错误。 Add() 方法是公开的,代码可以访问和执行它。您能否确保您使用的是最新版本的 API?您能否提供一些更多信息,我们可以用来在我们的最后复制问题,例如您如何设置项目以及它使用了哪些类?一个示例应用程序也将是一个很大的帮助,我们可以使用它来重现错误。

image.png (125.3 KB)

Aspose.PDF.Cpp.22.8.zip
这个版本 我刚刚重新解压出来的 private的

https://releases.admin.aspose.com/pdf/cpp/new-releases/aspose.pdf-for-c++-22.8/a4e54d21e59388558cf7f1b4448dc068-80-7765
这个下载地址下载的

PageCollection.zip (3.8 KB)
PageCollection.h文件发你

@ywapple

我们对造成的误解表示歉意。

Add(Page page) 方法适用于.Net。
在 C++ 中,您应该改用 CopyPage(Page page)。

您的代码(图像上的第 362 行)应如下所示:
docNew->get_Pages()->CopyPage(pPage);

void SplittingDocuments() {
    // String for path name
    String _dataDir("C:\\Samples\\");

    // String for input file name
    String documentFileName("sample.pdf");
    
    // Open document
    auto document = MakeObject<Document>(_dataDir + documentFileName);

    int pageCount = 1;

    // Loop through all the pages
    for(auto page : document->get_Pages())
    {
        auto newDocument = MakeObject<Document>(_dataDir + documentFileName);
        newDocument->get_Pages()->Add(page);
        newDocument->Save(_dataDir + u"page_" + pageCount + u"_out.pdf");
        pageCount++;
    }
}

你们c++的官方文档就是这么做的 你们得改下把 不然都搞不明白了!!!

@ywapple

对于给您带来的不便,我们深表歉意。我们已经记录了您的疑虑,并且一定会在我们的文档中修复该示例。