当前位置:网站首页>Easyexcl export 1million lines of EXECL report font error solution
Easyexcl export 1million lines of EXECL report font error solution
2022-06-29 09:29:00 【MonkeyKing_ sunyuhua】
Use easyexecl do 100 Line ten thousand csv Export of , Two errors will be reported , It's all because of openjdk Compact install to docker Inside , The problem of missing Fonts .
Error details :
/usr/local/openjdk-17/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory
2022-06-24 14:39:00.045 INFO 1 --- [nio-5010-exec-2] c.f.b.b.c.BillingDetailController : export execl1656081540043
2022-06-24 14:39:05.980 ERROR 1 --- [nio-5010-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.excel.exception.ExcelGenerateException: java.lang.UnsatisfiedLinkError: /usr/local/openjdk-17/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory] with root cause
java.lang.UnsatisfiedLinkError: /usr/local/openjdk-17/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) ~[na:na]
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388) ~[na:na]
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) ~[na:na]
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) ~[na:na]
at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:315) ~[na:na]
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:285) ~[na:na]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2398) ~[na:na]
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) ~[na:na]
at java.base/java.lang.System.loadLibrary(System.java:1989) ~[na:na]
at java.desktop/sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:58) ~[na:na]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) ~[na:na]
at java.desktop/sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:33) ~[na:na]
at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:275) ~[na:na]
at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:273) ~[na:na]
at java.base/java.security.AccessControlle
perhaps
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
nerateException: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager] with root cause
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) ~[na:na]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) ~[na:na]
at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:75) ~[na:na]
at java.desktop/java.awt.Font.getFont2D(Font.java:526) ~[na:na]
at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2282) ~[na:na]
at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469) ~[na:na]
at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530) ~[na:na]
at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:273) ~[poi-4.1.2.jar:4.1.2]
at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117) ~[poi-ooxml-4.1.2.jar:4.1.2]
at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82) ~[poi-ooxml-4.1.2.jar:4.1.2]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:684) ~[poi-ooxml-4.1.2.jar:4.1.2]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705) ~[poi-ooxml-4.1.2.jar:4.1.2]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:88) ~[poi-ooxml-4.1.2.jar:4.1.2]
at com.alibaba.excel.util.WorkBookUtil.createSheet(WorkBookUtil.java:84) ~[easyexcel-core-3.1.1.jar:na]
at com.alibaba.excel.context.WriteContextImpl.createSheet(WriteContextImpl.java:223) ~[easyexcel-core-3.1.1.jar:na]
at com.alibaba.excel.context.WriteContextImpl.initSheet(WriteContextImpl.java:182) ~[easyexcel-core-3.1.1.jar:na]
at com.alibaba.excel.context.WriteContextImpl.currentSheet(WriteContextImpl.java:135) ~[easyexcel-core-3.1.1.ja
A new image is needed , With openjdk17 For example
1、 edit dockerfile file
FROM openjdk:17-alpine
# solve easyExcel Export missing Fonts bug
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
2、IDEA To configure docker plug-in unit
The installation steps can be done by yourself google once 

3、 install Docker Desktop
Install the configuration and its registration , Sure google Inquire about 

4、 function dockerfile



5、 Push and view docker-hub Whether there is , Be sure to type in your own user name tag, Otherwise, the push will fail


6 、 Log in to the server that needs this image , Pull down or configure the image gradle Automatically pull the image

Or configure the dependent image 
7、 Re deploy the application , Restart , That is not an error

Note appended :esayExcel Export code for
/**
* export excel
*/
@RequestMapping("/xxxexportcsv100")
fun export(response: HttpServletResponse) {
val startTime = System.currentTimeMillis()
logger.info(" export execl$startTime")
val outputStream: OutputStream = response.outputStream
val time = SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(Date())
response.setHeader("Content-disposition", "attachment; filename=contract$time.xlsx")
response.contentType = "application/octet-stream;charset=UTF-8"
response.setHeader("Pragma", "No-cache")
response.setHeader("Cache-Control", "no-cache")
response.setDateHeader("Expires", 0)
val count: Int = billingDetailService.countByIdIsNotNull()
// If the total amount of data is redundant 10 ten thousand , Paging export
if (count > 100000) {
// How many per page
val max = 100000
// Must be placed outside the loop , Otherwise, it will be new
val excelWriter: ExcelWriter = EasyExcel.write(outputStream).build()
for (i in 0 until count / max + 1) {
val exportList: List<BillingDetailResourceDto> = billingDetailService.findAllBySize(i, max)
val writeSheet: WriteSheet =
EasyExcel.writerSheet(i, " bill " + (i + 1)).head(BillingDetailResourceDto::class.java)
.registerWriteHandler(LongestMatchColumnWidthStyleStrategy()).build()
excelWriter.write(exportList, writeSheet)
logger.info("100000 That's ok ===${System.currentTimeMillis()}")
}
// Refresh stream
excelWriter.finish()
} else {
val exportList: List<BillingDetailResourceDto> = billingDetailService.findAllBySize(0, count)
EasyExcel.write(outputStream, BillingDetailResourceDto::class.java)
.registerWriteHandler(LongestMatchColumnWidthStyleStrategy()).sheet(" bill ").doWrite(exportList)
}
outputStream.flush()
response.outputStream.close()
val endTime = System.currentTimeMillis()
logger.info(" export execl end $endTime== Time consuming =${endTime - startTime}")
}
边栏推荐
猜你喜欢

Debug H5 page -vconsole

1.4 机器学习方法之回归问题

Simplicity Studio无法识别新买的JLink v9解决方法

Wechat applet sharing page, sharing to the circle of friends

Handwritten virtualdom

Laravel 8 enables the order table to be divided by month level

LSM6DSL之SPI驱动

Lffd: a lightweight fast face detector for edge detection

【目标检测】|指标 A probabilistic challenge for object detection

GD32F4xx 以太网芯片(enc28j60)驱动移植
随机推荐
Pytorch summary learning series - data manipulation
YOLACT实时实例分割
keras转tf.keras中VGG19 input_shape
GPU training cloud platform record
How to do unit test well
Detecting and counting tiny faces
easyexecl导出100万行execl报字体错误的解决办法
(transfer) mysql: error 1071 (42000): specified key was too long; max key length is 767 bytes
Macros, functions, and inline functions
LSM6DSL之SPI驱动
Mysql database and table splitting strategy and application scenarios
YOLO Nano:一种高度紧凑的只看一次的卷积神经网络用于目标检测
UE4 动画重定向
微信小程序项目:微信小程序页面布局
cmd进入虚拟机
UE4 VS的Visual Assist插件设置
Pytorch Summary - Automatic gradient
MySQL uses union all to count the total number of combinations of multiple tables and the number of tables respectively
Open3d hidden point removal
Universal target detection based on region attention