Получите объекты DrawObject и Bound при рендеринге в PDF с помощью класса DrawObjectEventHandler с JavaScript через C++

Возможные сценарии использования

Aspose.Cells предоставляет абстрактный класс DrawObjectEventHandler, который имеет метод DrawObjectEventHandler.draw(DrawObject, number, number, number, number). Пользователь может реализовать DrawObjectEventHandler и использовать метод DrawObjectEventHandler.draw(DrawObject, number, number, number, number), чтобы получить DrawObject и Bound при рендеринге Excel в PDF или изображение. Вот краткое описание параметров метода DrawObjectEventHandler.draw(DrawObject, number, number, number, number).

  • drawObject: DrawObject будет инициализирован и возвращен при рендеринге.

  • x: Левая граница DrawObject.

  • y: Верхняя граница DrawObject.

  • ширина: Ширина DrawObject.

  • высота: Высота DrawObject.

Если вы рендерите файл Excel в PDF, вы можете использовать класс DrawObjectEventHandler с свойством PdfSaveOptions.drawObjectEventHandler. Аналогично, если вы рендерите файл Excel в изображение, вы можете использовать класс DrawObjectEventHandler с свойством ImageOrPrintOptions.drawObjectEventHandler.

Получить DrawObject и Bound при преобразовании в формат PDF с использованием класса DrawObjectEventHandler

Пожалуйста, просмотрите следующий пример кода. Он загружает образец файла Excel и сохраняет его как выводной PDF. При рендеринге в PDF он использует свойство PdfSaveOptions.drawObjectEventHandler и захватывает DrawObject и Bound существующих ячеек и объектов, например, изображений и т.д. Если тип DrawObject — Cell, он выводит его Bound и StringValue. А если тип DrawObject — Image, он выводит его Bound и название формы. Пожалуйста, посмотрите вывод консоли приведенного ниже примера кода для получения дополнительной информации.

Образец кода

<!DOCTYPE html>
<html>
    <head>
        <title>Get Draw Object and Bound Using DrawObjectEventHandler</title>
    </head>
    <body>
        <h1>Get Draw Object and Bound Using DrawObjectEventHandler</h1>
        <input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
        <button id="runExample">Run Example</button>
        <a id="downloadLink" style="display: none;">Download Result</a>
        <div id="result"></div>
    </body>

    <script src="aspose.cells.js.min.js"></script>
    <script type="text/javascript">
        const { Workbook, SaveFormat, PdfSaveOptions, DrawObjectEventHandler, DrawObjectEnum } = AsposeCells;

        AsposeCells.onReady({
            license: "/lic/aspose.cells.enc",
            fontPath: "/fonts/",
            fontList: [
                "arial.ttf",
                "NotoSansSC-Regular.ttf"
            ]
        }).then(() => {
            console.log("Aspose.Cells initialized");
        });

        class ClsDrawObjectEventHandler extends DrawObjectEventHandler {
            draw(drawObject, x, y, width, height) {
                console.log("");

                // Print the coordinates and the value of Cell object
                if (drawObject.type === DrawObjectEnum.Cell) {
                    console.log(`[X]: ${x} [Y]: ${y} [Width]: ${width} [Height]: ${height} [Cell Value]: ${drawObject.cell.stringValue}`);
                }

                // Print the coordinates and the shape name of Image object
                if (drawObject.type === DrawObjectEnum.Image) {
                    console.log(`[X]: ${x} [Y]: ${y} [Width]: ${width} [Height]: ${height} [Shape Name]: ${drawObject.shape.name}`);
                }

                console.log("----------------------");
            }
        }

        document.getElementById('runExample').addEventListener('click', async () => {
            const fileInput = document.getElementById('fileInput');
            const resultDiv = document.getElementById('result');

            if (!fileInput.files.length) {
                resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
                return;
            }

            const file = fileInput.files[0];
            const arrayBuffer = await file.arrayBuffer();

            // Load sample Excel file
            const workbook = new Workbook(new Uint8Array(arrayBuffer));

            // Specify Pdf save options
            const opts = new PdfSaveOptions();

            // Assign the instance of DrawObjectEventHandler class
            opts.drawObjectEventHandler = new ClsDrawObjectEventHandler();

            // Save to Pdf format with Pdf save options
            const outputData = workbook.save(SaveFormat.Pdf, opts);
            const blob = new Blob([outputData], { type: 'application/pdf' });
            const downloadLink = document.getElementById('downloadLink');
            downloadLink.href = URL.createObjectURL(blob);
            downloadLink.download = 'outputGetDrawObjectAndBoundUsingDrawObjectEventHandler.pdf';
            downloadLink.style.display = 'block';
            downloadLink.textContent = 'Download PDF File';

            resultDiv.innerHTML = '<p style="color: green;">Operation completed successfully! Click the download link to get the PDF file.</p>';
        });
    </script>
</html>

Вывод в консоль

 [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

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