Modifier la police uniquement des caractères Unicode spécifiques lors de l enregistrement en PDF
Certains caractères Unicode ne sont pas affichables par la police spécifiée par l’utilisateur. Un de ces caractères Unicode est Non-breaking Hyphen (U+2011) et son numéro Unicode est 8209. Ce caractère ne peut pas être affiché avec Times New Roman, mais il peut être affiché avec d’autres polices comme Arial Unicode MS.
Lorsqu’un tel caractère apparaît à l’intérieur d’un mot ou d’une phrase qui est dans une police spécifique comme Times New Roman, alors Aspose.Cells change la police de tout le mot ou de la phrase à une police qui pourrait afficher ce caractère comme Arial Unicode MS.
Cependant, ce comportement est indésirable pour certains utilisateurs et ils veulent seulement que la police du caractère spécifique soit modifiée au lieu de changer la police de tout le mot ou de la phrase.
Pour résoudre ce problème, Aspose.Cells fournit la propriété PdfSaveOptions.setFontSubstitutionCharGranularity() qui doit être définie sur true afin que seule la police du caractère spécifique qui n’est pas affichable soit modifiée et que la police pour le reste du mot ou de la phrase reste la même.
Exemple
La capture d’écran suivante compare les deux PDF générés par le code d’exemple ci-dessous. L’un a été généré sans définir la propriété PdfSaveOptions.setFontSubstitutionCharGranularity() et l’autre a été généré après avoir défini la propriété PdfSaveOptions.setFontSubstitutionCharGranularity() sur true. Comme vous pouvez le voir dans le premier PDF, la police de toute la phrase a changé de Times New Roman à Arial Unicode MS à cause du Non-Breaking Hyphen. Alors que dans le deuxième PDF, seule la police du Non-Breaking Hyphen a changé.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(ChangeFontonspecificUnicodecharacters.class); | |
// Create workbook object | |
Workbook workbook = new Workbook(); | |
// Access the first worksheet | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
// Access cells | |
Cell cell1 = worksheet.getCells().get("A1"); | |
Cell cell2 = worksheet.getCells().get("B1"); | |
// Set the styles of both cells to Times New Roman | |
Style style = cell1.getStyle(); | |
style.getFont().setName("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" + (char) (8209) + " with Non-Breaking Hyphen"); | |
// Autofit the columns | |
worksheet.autoFitColumns(); | |
// Save to Pdf without setting PdfSaveOptions.IsFontSubstitutionCharGranularity | |
workbook.save(dataDir + "output.pdf"); | |
// Save to Pdf after setting PdfSaveOptions.IsFontSubstitutionCharGranularity to true | |
PdfSaveOptions opts = new PdfSaveOptions(); | |
opts.setFontSubstitutionCharGranularity(true); | |
workbook.save(dataDir + "output2.pdf", opts); | |