您遇到的错误 java.lang.IllegalArgumentException: U+6492 ('.notdef') is not available in this font Helvetica encoding: WinAnsiEncoding 通常是因为尝试在不支持的字体中显示字符。这个问题可能发生在以下情况:
- 使用了不兼容的字符:Excel中的某些单元格可能包含特殊字符或语言符号,而Helvetica字体不支持这些字符。 
- PDFBox默认字体限制:PDType1Font.HELVETICA 默认只包含ASCII和一些常用字符。如果您要插入的文本中包含Unicode字符,应该考虑使用支持更广泛Unicode字符集的字体,例如PDType0Font。 
解决方法
方法一:检查和替换字体
如果可以接受其他字体,请尝试使用 PDType0Font,它能支持更多Unicode字符。示例如下:
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
// 替换此行
contentStream.setFont(PDType1Font.HELVETICA, 12);
// 为此行(确保将路径指向有效TTF文件)
PDTrueTypeFont font = PDTrueTypeFont.load(pdfDocument, new File("path/to/your/font.ttf"));
contentStream.setFont(font, 12);
方法二:过滤掉特殊字符
您也可以在写入文本之前,先过滤掉那些可能导致问题的特殊字符:
private static String getCellValue(Cell cell) {
    switch (cell.getCellType()) {
        case STRING:
            return cell.getStringCellValue().replaceAll("[^\\x00-\\x7F]", ""); // 去掉非ASCII字符
        case NUMERIC:
            return String.valueOf(cell.getNumericCellValue());
        case BOOLEAN:
            return String.valueOf(cell.getBooleanCellValue());
        default:
            return "";
    }
}
这种方式会去掉所有非ASCII字符,但请注意,这可能会导致数据丢失。
最佳实践
如果您需要处理各种复杂内容和多种语言,建议:
- 使用可支持多语言和不同字形格式的专业库或工具。
- 检查并确认您的 Excel 文件内容,包括是否存在任何特别的Unicode符号。
希望这些建议能够帮助您解决问题!
内容由零声教学AI助手提供,问题来源于学员提问


 
                             
         
        
 
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                 
                