Modifiez la police uniquement sur les caractères Unicode spécifiques lors de l'enregistrement au format PDF
Certains caractères Unicode ne peuvent pas être affichés par la police spécifiée par l’utilisateur. Un tel caractère Unicode estTrait d’union insécable (U+2011) et son numéro Unicode est 8209. Ce caractère ne peut pas être affiché avecTimes New Roman , mais il peut être affiché avec d’autres polices commeArial Unicode MS.
Lorsqu’un tel caractère apparaît à l’intérieur d’un mot ou d’une phrase qui se trouve dans une police spécifique comme Times New Roman, alors Aspose.Cells change la police du mot ou de la phrase entière en police qui pourrait afficher ce caractère comme Arial Unicode en MS.
Cependant, il s’agit d’un comportement indésirable pour certains utilisateurs et ils souhaitent que seule la police de ce caractère spécifique soit modifiée au lieu de modifier la police d’un mot ou d’une phrase entière.
Pour résoudre ce problème, Aspose.Cells fournit la propriété PdfSaveOptions.IsFontSubstitutionCharGranularity qui doit être définie sur true afin que seule la police d’un caractère spécifique non affichable soit remplacée par une police affichable et que le reste du mot ou de la phrase reste dans la police d’origine.
Exemple
La capture d’écran suivante compare les deux PDF de sortie générés par l’exemple de code ci-dessous.
L’un est généré sans définir la propriété PdfSaveOptions.IsFontSubstitutionCharGranularity et l’autre a été généré après avoir défini la propriété PdfSaveOptions.IsFontSubstitutionCharGranularity sur true.
Comme vous pouvez le voir dans le premier PDF, la police de la phrase entière est passée de Times New Roman à Arial Unicode MS en raison du trait d’union insécable. Alors que dans le deuxième Pdf, seule la police du trait d’union insécable a changé.
Premier fichier pdf |
---|
![]() |
Deuxième fichier pdf |
---|
![]() |
Exemple de code
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create workbook object | |
Workbook workbook = new Workbook(); | |
// Access the first worksheet | |
Worksheet worksheet = workbook.Worksheets[0]; | |
// Access cells | |
Cell cell1 = worksheet.Cells["A1"]; | |
Cell cell2 = worksheet.Cells["B1"]; | |
// Set the styles of both cells to Times New Roman | |
Style style = cell1.GetStyle(); | |
style.Font.Name = "Times New Roman"; | |
cell1.SetStyle(style); | |
cell2.SetStyle(style); | |
// Put the values inside the cell | |
cell1.PutValue("Hello without Non-Breaking Hyphen"); | |
cell2.PutValue("Hello" + Convert.ToChar(8209) + " with Non-Breaking Hyphen"); | |
// Autofit the columns | |
worksheet.AutoFitColumns(); | |
// Save to Pdf without setting PdfSaveOptions.IsFontSubstitutionCharGranularity | |
workbook.Save(dataDir + "SampleOutput_out.pdf"); | |
// Save to Pdf after setting PdfSaveOptions.IsFontSubstitutionCharGranularity to true | |
PdfSaveOptions opts = new PdfSaveOptions(); | |
opts.IsFontSubstitutionCharGranularity = true; | |
workbook.Save(dataDir + "SampleOutput2_out.pdf", opts); |