Получить DrawObject и Bound при рендеринге в PDF с использованием класса DrawObjectEventHandler
Возможные сценарии использования
Aspose.Cells предоставляет абстрактный класс DrawObjectEventHandler, который содержит метод Draw(). Пользователь может реализовать DrawObjectEventHandler и использовать метод Draw() для получения DrawObject и границ при рендеринге Excel в PDF или изображение. Вот краткое описание параметров метода Draw().
-
drawObject: объект DrawObject будет инициализирован и возвращен при рендеринге
-
x: слева от DrawObject
-
y: сверху DrawObject
-
ширина: ширина DrawObject
-
высота: высота DrawObject
Если вы рендерите файл Excel в PDF, то вы можете использовать класс DrawObjectEventHandler с PdfSaveOptions.PaginatedSaveOptions(PaginatedSaveOptions_Impl impl)*. Аналогично, если вы рендерите файл Excel в изображение, вы можете использовать класс DrawObjectEventHandler с ImageOrPrintOptions.DrawObjectEventHandler.
Получите объект DrawObject и Bound при рендеринге в Pdf с использованием класса DrawObjectEventHandler
Пожалуйста, посмотрите следующий пример кода. Он загружает пример файла Excel и сохраняет его как выходной 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
----------------------