Establecer la propiedad DefaultFont de PdfSaveOptions y ImageOrPrintOptions para tener prioridad con JavaScript vía C++

Escenarios de uso posibles

Al establecer la propiedad DefaultFont de PdfSaveOptions y ImageOrPrintOptions, podrías esperar que al guardar en PDF o imagen se establezca ese DefaultFont para todo el texto en un libro de trabajo que tiene fuente faltante (no instalada).

Generalmente, al guardar en PDF o imagen, Aspose.Cells for JavaScript a través de C++ intentará primero establecer la fuente predeterminada del Libro de trabajo (es decir, Workbook.DefaultStyle.Font). Si la fuente predeterminada del libro aún no puede mostrar/renderizar el texto correctamente, entonces Aspose.Cells intentará renderizar con la fuente mencionada contra el atributo DefaultFont en PdfSaveOptions/ImageOrPrintOptions.

Para cumplir con tu expectativa, tenemos una propiedad booleana llamada “CheckWorkbookDefaultFont” en PdfSaveOptions/ImageOrPrintOptions. Puedes establecerla en false para desactivar la fuente predeterminada del libro de trabajo o permitir que la configuración DefaultFont en PdfSaveOptions/ImageOrPrintOptions tenga prioridad.

Establecer la propiedad DefaultFont de PdfSaveOptions/ImageOrPrintOptions

El siguiente código de ejemplo abre un archivo Excel. La celda A1 (en la primera hoja) tiene un texto establecido como “Texto de fuente Navidad”. El nombre de la fuente es “Personal Use Navidad” que no está instalada en la máquina. Establecemos el atributo DefaultFont de PdfSaveOptions/ImageOrPrintOptions en “Times New Roman”. También configuramos la propiedad booleana CheckWorkbookDefaultFont en “false” lo que garantiza que el texto de la celda A1 se renderice con la fuente “Times New Roman” y no use la fuente predeterminada del libro (“Calibri” en este caso). El código renderiza la primera hoja a formatos de imagen PNG y TIFF. Finalmente, renderiza a un archivo PDF.

Esta es la captura de pantalla del archivo de plantilla utilizado en el código de ejemplo.

todo:image_alt_text

Esta es la imagen PNG de salida después de establecer la propiedad ImageOrPrintOptions.defaultFont en “Times New Roman”.

todo:image_alt_text

Ver la imagen TIFF de salida después de establecer la propiedad ImageOrPrintOptions.defaultFont en “Times New Roman”.

Ver el archivo PDF de salida después de configurar la propiedad PdfSaveOptions.defaultFont a “Times New Roman”.

Código de muestra

<!DOCTYPE html>
<html>
    <head>
        <title>Aspose.Cells Example</title>
    </head>
    <body>
        <h1>Set Default Font for Export (PNG, TIFF, PDF)</h1>
        <input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
        <button id="runExample">Run Example</button>
        <div>
            <a id="downloadPng" style="display: none;">Download PNG</a><br/>
            <a id="downloadTiff" style="display: none;">Download TIFF</a><br/>
            <a id="downloadPdf" style="display: none;">Download PDF</a>
        </div>
        <div id="result"></div>
    </body>

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

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

        document.getElementById('runExample').addEventListener('click', async () => {
            const resultEl = document.getElementById('result');
            const fileInput = document.getElementById('fileInput');
            if (!fileInput.files.length) {
                resultEl.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
                return;
            }

            await readyPromise;

            const file = fileInput.files[0];
            const arrayBuffer = await file.arrayBuffer();
            const workbook = new Workbook(new Uint8Array(arrayBuffer));

            // Rendering to PNG while setting checkWorkbookDefaultFont = false and defaultFont to Times New Roman
            const imgOpt = new ImageOrPrintOptions();
            imgOpt.imageType = ImageType.Png;
            imgOpt.checkWorkbookDefaultFont = false;
            imgOpt.defaultFont = "Times New Roman";

            const sr = new SheetRender(workbook.worksheets.get(0), imgOpt);
            const pngData = sr.toImage(0);
            const pngBlob = new Blob([pngData], { type: 'image/png' });
            const downloadPng = document.getElementById('downloadPng');
            downloadPng.href = URL.createObjectURL(pngBlob);
            downloadPng.download = 'out1_imagePNG.png';
            downloadPng.style.display = 'inline-block';
            downloadPng.textContent = 'Download PNG';

            // Rendering to TIFF while setting checkWorkbookDefaultFont = false and defaultFont to Times New Roman
            imgOpt.imageType = ImageType.Tiff;
            const wr = new WorkbookRender(workbook, imgOpt);
            const tiffData = wr.toImage();
            const tiffBlob = new Blob([tiffData], { type: 'image/tiff' });
            const downloadTiff = document.getElementById('downloadTiff');
            downloadTiff.href = URL.createObjectURL(tiffBlob);
            downloadTiff.download = 'out1_imageTIFF.tiff';
            downloadTiff.style.display = 'inline-block';
            downloadTiff.textContent = 'Download TIFF';

            // Rendering to PDF while setting the default font and checkWorkbookDefaultFont
            const saveOptions = new PdfSaveOptions();
            saveOptions.defaultFont = "Times New Roman";
            saveOptions.checkWorkbookDefaultFont = false;
            const pdfData = workbook.save(SaveFormat.Pdf, saveOptions);
            const pdfBlob = new Blob([pdfData], { type: 'application/pdf' });
            const downloadPdf = document.getElementById('downloadPdf');
            downloadPdf.href = URL.createObjectURL(pdfBlob);
            downloadPdf.download = 'out1_pdf.pdf';
            downloadPdf.style.display = 'inline-block';
            downloadPdf.textContent = 'Download PDF';

            resultEl.innerHTML = '<p style="color: green;">Export completed. Click the links above to download the generated files.</p>';
        });
    </script>
</html>