Cambiar la fuente solo de los caracteres Unicode específicos al guardar en PDF
Algunos caracteres Unicode no se pueden mostrar con la fuente especificada por el usuario. Uno de estos caracteres Unicode es Guión no separable (U+2011) y su número Unicode es 8209. Este carácter no se puede mostrar con Times New Roman, pero se puede mostrar con otras fuentes como Arial Unicode MS.
Cuando dicho carácter ocurre dentro de alguna palabra u oración que está en una fuente específica como Times New Roman, entonces Aspose.Cells cambia la fuente de toda la palabra o oración a la fuente que podría mostrar este carácter como Arial Unicode MS.
Sin embargo, este comportamiento es indeseable para algunos usuarios y quieren que solo se cambie la fuente del carácter específico en lugar de cambiar la fuente de toda la palabra u oración.
Para resolver este problema, Aspose.Cells proporciona la propiedad PdfSaveOptions.setFontSubstitutionCharGranularity() que debe establecerse como true para que solo se cambie la fuente del carácter específico que no se puede mostrar y la fuente para el resto de la palabra u oración permanezca igual.
Ejemplo
La siguiente captura de pantalla compara los dos PDF de salida generados por el código de ejemplo a continuación. Uno se generó sin establecer la propiedad PdfSaveOptions.setFontSubstitutionCharGranularity() y el otro se generó después de establecer la propiedad PdfSaveOptions.setFontSubstitutionCharGranularity() en true. Como puede ver en el primer PDF, la fuente de toda la oración ha cambiado de Times New Roman a Arial Unicode MS debido al Guión no separable. Mientras que en el segundo PDF, solo la fuente del Guión no separable ha cambiado.
// 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); | |