Byt typsnitt på specifika Unicode tecken vid sparande till PDF
Vissa Unicode-tecken visas inte med det användarvalda typsnittet. Ett sådant Unicode-tecken är Icke-linjär bindestreck (U+2011) och dess Unicode-nummer är 8209. Detta tecken kan inte visas med Times New Roman, men det kan visas med andra typsnitt som Arial Unicode MS.
När ett sådant tecken förekommer inne i ett ord eller en mening som är skriven med ett specifikt typsnitt som Times New Roman, då ändrar Aspose.Cells typsnitt för hela ordet eller meningen till ett typsnitt som kan visa detta tecken, som Arial Unicode MS.
Detta är emellertid ett oönskat beteende för vissa användare och de vill endast att det specifika tecknets typsnitt ska ändras istället för att ändra typsnittet för hela ordet eller meningen.
För att hantera detta problem tillhandahåller Aspose.Cells egenskapen PdfSaveOptions.setFontSubstitutionCharGranularity() som ska sättas till sant så att endast typsnittet för det specifika tecknet som inte kan visas ändras och typsnittet för resten av ordet eller meningen förblir detsamma.
Exempel
Följande skärmdump jämför de två utdatan PDF-filerna som genererats av exempelkoden nedan. En genererades utan att sätta PdfSaveOptions.setFontSubstitutionCharGranularity()-egenskapen och den andra genererades efter att PdfSaveOptions.setFontSubstitutionCharGranularity()-egenskapen sattes till sant. Som du kan se i den första PDF-filen har typsnittet för hela meningen ändrats från Times New Roman till Arial Unicode MS på grund av Non-breaking Hyphen. Medan i den andra PDF-filen har endast typsnittet för Non-breaking Hyphen ändrats.
// 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); | |