[]
        
(Showing Draft Content)

配置字体和设置样式

GcExcel Java允许用户配置自定义字体和设置样式,同时以PDF格式保存工作表。

在执行导出操作之前,用户需要制定导出PDF时所使用字体的文件夹路径。当使用Windows系统时,如果未指定字体的文件夹路径,则默认将使用 "C:\Windows\Fonts"。当使用其他操作系统时,则用户必须指定字体文件夹路径,并确保所使用字体正确的存在于字体文件夹路径下。

IWorkbook 接口的  getUsedFonts() 方法可用于获取工作簿中使用的所有字体的集合。

导出为PDF文件时,GcExcel Java使用工作簿。 Workbook.FontsFolderPath 以呈现 PDF。但是,如果使用的字体不存在,它将使用一些备选字体。如果文件中不存在备选字体, GcExcel Java将抛出异常:“没有可用字体。请为工作簿的FontsFolderPath方法设置有效路径!“

关于备选字体,请参考备选字体查找策略

要在保存为PDF时配置字体和设置样式,请参阅以下示例代码。

// Create a new workbook and add worksheets
Workbook workbook = new Workbook();
IWorksheet sheet1 = workbook.getWorksheets().get(0);
IWorksheet sheet2 = workbook.getWorksheets().add();

// Set style.
sheet1.getRange("A1").setValue("Sheet1");
sheet1.getRange("A1").getFont().setName("Wide Latin");
sheet1.getRange("A1").getFont().setColor(Color.GetRed());
sheet1.getRange("A1").getInterior().setColor(Color.GetGreen());

// Add Table
ITable table = sheet1.getTables().add(sheet1.getRange("C1:E5"), true);
sheet2.getRange("A1").setValue("Sheet2");

// Specify font path
Workbook.FontsFolderPath = "C:\\Users\\GPCTAdmin\\Documents\\Fonts";

// Get the used fonts list in workbook, the list are:"Wide Latin", "Calibri"
List fonts = workbook.getUsedFonts();

// Save to a pdf file
workbook.save("configureFontsAndSetStyle.pdf", SaveFileFormat.Pdf);

// Just export sheet1 to pdf file.
sheet1.save("configureFontsAndSetStyle_sheet.pdf",SaveFileFormat.Pdf);

GcExcel Java还可以使用字体流进行PDF导出,如果用户无法直接将字体存储在磁盘上。 GcExcel提供Workbook类中的FontProvider字段,使用户可以为PDF导出提供字体流。 字体流是使用IFontProvider接口及其方法getFontFilePathsgetFont实现的。

getFontFilePaths方法返回用于自适应、PDF导出和图像导出的所有字体文件路径,而getFont根据字体文件路径返回字体流。 如果用户实现了FontProvider,GcExcel将仅在字体流中搜索字体路径;否则,GcExcel将在FontsFolderPath中搜索。

请参考以下示例代码,了解把字体打入 jar 包时,如何通过流的方式注册字体:

// Create a new workbook.
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);

// Set style of the font.
sheet.getRange("A1").setValue("Sheet1");
sheet.getRange("A1").getFont().setName("Arial");
sheet.getRange("A1").getFont().setColor(Color.GetRed());
sheet.getRange("A1").getInterior().setColor(Color.GetGreen());

// Implement FontProvider.
Workbook.FontProvider = new IFontProvider() {
    @Override
    public List<String> getFontFilePaths() {
        return new ArrayList<>(Arrays.asList(
                "fonts\\arial.ttf",
                "fonts\\arialbd.ttf",
                "fonts\\ariali.ttf"
        ));
    }

    @Override
    public InputStream getFont(String fontFilePath) {
        return getClass().getClassLoader().getResourceAsStream(fontFilePath);
    }
};

// Save the workbook.
workbook.save("FontStreaming.pdf", SaveFileFormat.Pdf);

请参考以下示例代码,了解如何以流的方式,注册在线字体:

Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);

//set style.
sheet.getRange("A1").setValue("Sheet1");
sheet.getRange("A1").getFont().setName("GcTestFont");
sheet.getRange("A1").getFont().setColor(Color.GetRed());

//specify font provider.
Workbook.FontProvider = new IFontProvider() {
    @Override
    public List<String> getFontFilePaths() {
        return new ArrayList<>(Arrays.asList(
                "Gctestfont-Regular.ttf"
        ));
    }

    @Override
    public InputStream getFont(String fontFilePath) {
        try {
            return new URL("https://cdn.grapecity.com.cn/SpreadJS/online/resources/"+fontFilePath).openStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
};

//change the path to real export path when save.
workbook.save("dest.pdf", SaveFileFormat.Pdf);

type=info

注意: GcExcel 也支持通过字体流进行自定义字体的图像导出,代码与上述示例代码相似。

注意: GcExcel Java中的导出为PDF功能不支持将以下工作表样式保存为PDF格式:

a) 使用双下划线、单会计下划线、双会计下划线、上标字体效果、下标字体效果。

b) 对齐首选项,如跨选择居中、填充对齐、对齐对正、分布式对齐、方向和文本读取顺序等。