spire.pdf for java在Linux上将html转为pdf时,qt插件占用内存过大,如何解决?
执行html转为pdf的操作后,服务器几乎卡死,监控显示内存占用满了
jdk:17
系统:alibaba cloud linux 3
插件版本:qt-5.14.2-plugins-linux-x64
服务器:8核 16G 阿里云轻量云服务器
public static void htmlStringToPdf(String htmlString, String outputFile, Size size, boolean removeBlank) {
if (removeBlank) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//将HTML字符串转换为PDF
HtmlConverter.convert(htmlString,
byteArrayOutputStream,
true,
5 * 60 * 1000,
size,
new PdfMargins(0),
LoadHtmlType.Source_Code);
PdfDocument pdfDocument = new PdfDocument(byteArrayOutputStream.toByteArray());
PdfPageCollection pages = pdfDocument.getPages();
BufferedImage image;
for (int i = 0; i < pages.getCount(); i++) {
PdfPageBase pdfPageBase = pages.get(i);
if (pdfPageBase.isBlank()) {
//删除完全空白的页面
pdfDocument.getPages().remove(pdfPageBase);
} else {
//将页面转换为图片
image = pdfDocument.saveAsImage(i, PdfImageType.Bitmap);
//检测转换出的图片是否为空白图片
if (isBlankImage(image)) {
//删除空白图片所对应的页面
pdfDocument.getPages().remove(pdfPageBase);
}
image.flush();
}
}
pdfDocument.saveToFile(outputFile);
pdfDocument.dispose();
} else {
htmlStringToPdf(htmlString, outputFile, size);
}
}
//检测图片是否为空白图片
public static boolean isBlankImage(BufferedImage image) {
Color pixel;
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
pixel = new Color(image.getRGB(i, j));
if (pixel.getRed() < 240 || pixel.getGreen() < 240 || pixel.getBlue() < 240) {
return false;
}
}
}
return true;
}