DrawObjectEventHandlerクラスを使用して、PDFへのレンダリング中にDrawObjectとBoundを取得する方法

可能な使用シナリオ

Aspose.Cellsは、DrawObjectEventHandler抽象クラスを提供しており、Draw()メソッドがあります。ユーザーはDrawObjectEventHandlerを実装し、ExcelをPDFや画像にレンダリングする際にDraw()メソッドを利用してDrawObjectとバウンドを取得できます。以下に、Draw()メソッドのパラメータの簡単な説明を示します。

ExcelファイルをPDFにレンダリングする場合は、DrawObjectEventHandlerクラスとPdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)*を利用できます。同様に、Excelファイルを画像にレンダリングする場合は、DrawObjectEventHandlerクラスとImageOrPrintOptions.DrawObjectEventHandlerを利用できます。

DrawObjectEventHandler クラスを使用して PDF にレンダリングする際の DrawObject と Bound を取得

以下のサンプルコードを参照してください。これにより、サンプルExcelファイル(64716821.xlsx)を読み込み、出力PDFとして保存します。PDFにレンダリングする際、PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)* プロパティを使用し、既存のセルや画像などのオブジェクトのDrawObjectとBoundをキャプチャします。DrawObjectタイプがセルの場合、そのBoundとStringValueを表示します。DrawObjectタイプが画像の場合、そのBoundとShape名を表示します。詳しくは以下のコンソール出力例をご確認ください。

サンプルコード

#include <iostream>
#include <memory>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Rendering;

class ClsDrawObjectEventHandler : public DrawObjectEventHandler
{
public:
    void Draw(DrawObject& drawObject, float x, float y, float width, float height) override
    {
        std::cout << std::endl;

        if (drawObject.GetType() == DrawObjectEnum::Cell)
        {
            std::cout << "[X]: " << x << " [Y]: " << y << " [Width]: " << width << " [Height]: " << height 
                      << " [Cell Value]: " << drawObject.GetCell().GetStringValue().ToUtf8() << std::endl;
        }

        if (drawObject.GetType() == DrawObjectEnum::Image)
        {
            std::cout << "[X]: " << x << " [Y]: " << y << " [Width]: " << width << " [Height]: " << height 
                      << " [Shape Name]: " << drawObject.GetShape().GetName().ToUtf8() << std::endl;
        }

        std::cout << "----------------------" << std::endl;
    }
};

void Run()
{
    Workbook wb(u"sampleGetDrawObjectAndBoundUsingDrawObjectEventHandler.xlsx");
    PdfSaveOptions opts;
    auto drawObjectEventHandler = std::make_shared<ClsDrawObjectEventHandler>();
    opts.SetDrawObjectEventHandler(drawObjectEventHandler.get());
    wb.Save(u"outputGetDrawObjectAndBoundUsingDrawObjectEventHandler.pdf", opts);
}

int main()
{
    Aspose::Cells::Startup();
    Run();
    Aspose::Cells::Cleanup();
    return 0;
}

コンソール出力

[X]: 153.6035 [Y]: 82.94118 [Width]: 103.2035 [Height]: 14.47059 [Cell Value]: This is sample text.

----------------------

[X]: 267.6917 [Y]: 153.4853 [Width]: 160.4491 [Height]: 128.0647 [Shape Name]: Sun

----------------------