Skip to content

Commit 421f9d4

Browse files
Copilotgedinakova
andcommitted
Add Unicode font support for PDF export to fix non-Latin text rendering
Co-authored-by: gedinakova <[email protected]>
1 parent 4b50491 commit 421f9d4

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

projects/igniteui-angular/grids/core/src/services/pdf/pdf-exporter.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ExportUtilities } from '../exporter-common/export-utilities';
44
import { IgxPdfExporterOptions } from './pdf-exporter-options';
55
import { IBaseEventArgs } from 'igniteui-angular/core';
66
import type { jsPDF } from 'jspdf';
7+
import { RobotoSubsetFont } from './roboto-subset-font';
78

89
export interface IPdfExportEndedEventArgs extends IBaseEventArgs {
910
pdf?: jsPDF;
@@ -222,6 +223,11 @@ export class IgxPdfExporterService extends IgxBaseExporter {
222223
format: options.pageSize
223224
});
224225

226+
// Add Unicode-capable font for non-Latin character support
227+
// This allows proper rendering of Chinese, Japanese, and other non-Latin scripts
228+
pdf.addFileToVFS('Roboto-Subset.ttf', RobotoSubsetFont);
229+
pdf.addFont('Roboto-Subset.ttf', 'Roboto', 'normal');
230+
225231
const pageWidth = pdf.internal.pageSize.getWidth();
226232
const pageHeight = pdf.internal.pageSize.getHeight();
227233
const margin = 40;
@@ -241,7 +247,8 @@ export class IgxPdfExporterService extends IgxBaseExporter {
241247

242248
let yPosition = margin;
243249

244-
// Set font
250+
// Set font to Roboto for Unicode support
251+
pdf.setFont('Roboto', 'normal');
245252
pdf.setFontSize(options.fontSize);
246253

247254
// Draw multi-level headers if present
@@ -268,7 +275,7 @@ export class IgxPdfExporterService extends IgxBaseExporter {
268275
}
269276

270277
// Draw data rows
271-
pdf.setFont('helvetica', 'normal');
278+
pdf.setFont('Roboto', 'normal');
272279

273280
// Check if this is a tree grid export (tree grids can have both TreeGridRecord and DataRecord types for nested children)
274281
const isTreeGridExport = data.some(record => record.type === ExportRecordType.TreeGridRecord);
@@ -423,7 +430,7 @@ export class IgxPdfExporterService extends IgxBaseExporter {
423430
allColumns?: any[]
424431
): number {
425432
let yPosition = yStart;
426-
pdf.setFont('helvetica', 'bold');
433+
pdf.setFont('Roboto', 'bold');
427434

428435
// First, draw row dimension header labels (for pivot grids) if present
429436
// Draw headers if we have any row dimension headers, regardless of maxRowLevel
@@ -633,7 +640,7 @@ export class IgxPdfExporterService extends IgxBaseExporter {
633640
yPosition = yStart + totalHeaderHeight;
634641
}
635642

636-
pdf.setFont('helvetica', 'normal');
643+
pdf.setFont('Roboto', 'normal');
637644
return yPosition;
638645
}
639646

@@ -842,7 +849,7 @@ export class IgxPdfExporterService extends IgxBaseExporter {
842849
tableWidth: number,
843850
options: IgxPdfExporterOptions
844851
): void {
845-
pdf.setFont('helvetica', 'bold');
852+
pdf.setFont('Roboto', 'bold');
846853
pdf.setFillColor(240, 240, 240);
847854

848855
if (options.showTableBorders) {
@@ -908,7 +915,7 @@ export class IgxPdfExporterService extends IgxBaseExporter {
908915
pdf.text(headerText, textX, textY);
909916
});
910917

911-
pdf.setFont('helvetica', 'normal');
918+
pdf.setFont('Roboto', 'normal');
912919
}
913920

914921
private drawDataRow(
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Roboto font subset for Unicode support in PDF exports.
3+
*
4+
* This is a minimal subset of the Roboto font that includes:
5+
* - Basic Latin (U+0020-007E)
6+
* - Latin-1 Supplement (U+00A0-00FF)
7+
* - CJK Symbols and Punctuation (U+3000-303F)
8+
* - CJK Unified Ideographs (U+4E00-9FFF)
9+
* - Halfwidth and Fullwidth Forms (U+FF00-FFEF)
10+
*
11+
* This subset is used to support non-Latin characters (e.g., Chinese, Japanese) in PDF exports.
12+
* The font data is base64-encoded and will be added to the PDF using jsPDF's addFileToVFS and addFont methods.
13+
*
14+
* Original font: Roboto Regular
15+
* License: Apache License, Version 2.0
16+
* Subset size: ~19 KB (25 KB base64-encoded)
17+
*/
18+
export const RobotoSubsetFont = 'AAEAAAANAIAAAwBQR0RFRgVBBEUAAD0cAAAAVkdQT1OZiGZgAAA9dAAAC65HU1VCNo0PmwAASSQAAAHKT1MvMnSzYyoAADqIAAAAYGNtYXAXThg/AAA66AAAANhnbHlmqBiCeAAAANwAADQCaGVhZAKlyv0AADa8AAAANmhoZWEH5gQEAAA29AAAACRobXR4iAn/oQAANSQAAAdImG1heHAAawAAADQoAAAABm5hbWV4n+qHAAA2+AAAAaJwb3N0/58AMgAAOXwAAAAgAAEAAAABAJ7D0P5/DzIxUjIAc2NjMyFgUUFjMyNjU0JiMiBgcCrJ2HjaXk2RYL/u8YIF08gH7+R1M/P0tHRDJNEgEEdJupkTfQ6YPdISyZVFVVUjw9TCweAAEAOwAAAqYDFQAGAAABFQEjASE1Aqb+oqYBXv47AxVa/UUClIEAAwBP//UCnwMgABMAGwAlAAAlFAYjIiY1NDcmNTQ2MzIWFRQHFic0IyIVFDMyFzQmIyIVFDMyNgKfqX5+q4p2m3l4nXaJsXd3eHYVTz2Kiz5N2HBzc3CEOzh1anJyanU5Ot5mZmbwNDtvbzsAAgBK//kClQMgABMAIAAAARQGIyM1MyA3BiMiJjU0NjMyFhUlFBYzMjY3NTQmIyIGApXU4Q8OAQQURWV/hJ2HjJv+UUZEMkcQUDtASAGr0eF/yUKTdXOmqpgpPFIrHTtSUVsA//8AUQKNAp4FuAIHAJUAAAKY//8ANgKYArwFrQIHAJcAAAKY//8AXAKNAqgFrQIHAJgAAAKY//8AVgKNAqwFtwIHAJkAAAKY//8AOwKYAqYFrQIHAJoAAAKY//8ATwKNAp8FuAIHAJsAAAKY//8ASgKRApUFuAIHAJwAAAKY//8AJgIfAg4CtwIGAA4AAAACACUAAATlBbAADQAbAAATMxEhIAARFRAAISERIyEhETMyEjU1NAIjIxEhJaIBnAEfAWP+m/7R/naiAn3+5snp7OzX2wEaAzECf/6P/sRX/sT+kAKZ/gQBIO9Z+wES/h8A//8AHQAABR4HNwImACIAAAAHAEEBLwE3//8AHQAABR4HNwImACIAAAAHAHIBvwE3//8AHQAABR4HNwImACIAAAAHAIkAyQE3//8AHQAABR4HIwImACIAAAAHAIsAxAE7//8AHQAABR4G/QImACIAAAAHAGcA+QE3//8AHQAABR4HkwImACIAAAAHAIoBUAFC//8AeP5DBNgFxAImACQAAAAHAHYB0//2//8AqQAABEYHQgImACYAAAAHAEEA+gFC//8AqQAABEYHQgImACYAAAAHAHIBigFC//8AqQAABEYHQgImACYAAAAHAIkAlAFC//8AqQAABEYHCAImACYAAAAHAGcAxAFC////3wAAAYAHQgImACoAAAAHAEH/pgFC//8AsQAAAlIHQgImACoAAAAHAHIANgFC////6gAAAkcHQgImACoAAAAHAIn/QAFC////1QAAAl8HCAImACoAAAAHAGf/cAFC//8AqQAABQkHIwImAC8AAAAHAIsA+gE7//8Ad//sBQoHOQImADAAAAAHAEEBUgE5//8Ad//sBQoHOQImADAAAAAHAHIB4gE5//8Ad//sBQoHOQImADAAAAAHAIkA7AE5//8Ad//sBQoHJQImADAAAAAHAIsA5wE9//8Ad//sBQoG/wImADAAAAAHAGcBHAE5//8AjP/sBKoHNwImADYAAAAHAEEBKgE3//8AjP/sBKoHNwImADYAAAAHAHIBugE3//8AjP/sBKoHNwImADYAAAAHAIkAxAE3//8AjP/sBKoG/QImADYAAAAHAGcA9AE3//8ADwAABLwHNgImADoAAAAHAHIBiQE2//8Abf/sA+oGAAImAEIAAAAHAEEA1QAA//8Abf/sA+oGAAImAEIAAAAHAHIBZQAA//8Abf/sA+oGAAImAEIAAAAGAIlvAP//AG3/7APqBewCJgBCAAAABgCLagT//wBt/+wD6gXGAiYAQgAAAAcAZwCfAAD//wBt/+wD6gZcAiYAQgAAAAcAigD2AAv//wBd/kMD7QROAiYARAAAAAcAdgFA//b//wBd/+wD8wYAAiYARgAAAAcAQQDEAAD//wBd/+wD8wYAAiYARgAAAAcAcgFUAAD//wBd/+wD8wYAAiYARgAAAAYAiV4A//8AXf/sA/MFxgImAEYAAAAHAGcAjgAA////xAAAAWUF/gImAIgAAAAGAEGL/v//AJYAAAI3Bf4CJgCIAAAABgByG/7////PAAACLAX+AiYAiAAAAAcAif8l//7///+6AAACRAXEAiYAiAAAAAcAZ/9V//7//wCNAAAD4AXsAiYATwAAAAYAi2EE//8AXP/sBDUGAAImAFAAAAAHAEEAzgAA//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';

0 commit comments

Comments
 (0)