!180 优化 CAD转换功能 新增CAD线程控制和CAD超时限制

Merge pull request !180 from 陈精华/cad
pull/175/MERGE
陈精华 1 year ago committed by Gitee
commit 4f86a56f59
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

@ -142,6 +142,10 @@ pdf2jpg.dpi = ${KK_PDF2JPG_DPI:144}
office.type.web = ${KK_OFFICE_TYPE_WEB:web}
#Cadtifjssvgsvgpdfpdf便
cad.preview.type = ${KK_CAD_PREVIEW_TYPE:pdf}
#Cad
cad.timeout =${KK_CAD_TIMEOUT:90}
#Cad线
cad.thread =${KK_CAD_THREAD:5}
#OFFICE
# 使 (1-5)

@ -58,6 +58,8 @@ public class ConfigConstants {
private static Boolean officeExportBookmarks;
private static Boolean officeExportNotes;
private static Boolean officeDocumentOpenPasswords;
private static String cadTimeout;
private static int cadThread;
public static final String DEFAULT_CACHE_ENABLED = "true";
public static final String DEFAULT_TXT_TYPE = "txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd";
@ -89,6 +91,9 @@ public class ConfigConstants {
public static final String DEFAULT_DELETE_CAPTCHA = "false";
public static final String DEFAULT_CAD_TIMEOUT = "90";
public static final String DEFAULT_CAD_THREAD = "5";
public static final String DEFAULT_OFFICE_PAQERANQE = "false";
public static final String DEFAULT_OFFICE_WATERMARK = "false";
public static final String DEFAULT_OFFICE_QUALITY = "80";
@ -469,6 +474,23 @@ public class ConfigConstants {
ConfigConstants.deleteSourceFile = deleteSourceFile;
}
public static Boolean getDeleteCaptcha() {
return deleteCaptcha;
}
@Value("${delete.captcha:false}")
public void setDeleteCaptcha(Boolean deleteCaptcha) {
setDeleteCaptchaValue(deleteCaptcha);
}
public static void setDeleteCaptchaValue(Boolean deleteCaptcha) {
ConfigConstants.deleteCaptcha = deleteCaptcha;
}
/**
* cad
*/
public static String getCadPreviewType() {
return cadPreviewType;
}
@ -482,17 +504,32 @@ public class ConfigConstants {
ConfigConstants.cadPreviewType = cadPreviewType;
}
public static Boolean getDeleteCaptcha() {
return deleteCaptcha;
public static String getCadTimeout() {
return cadTimeout;
}
@Value("${delete.captcha:false}")
public void setDeleteCaptcha(Boolean deleteCaptcha) {
setDeleteCaptchaValue(deleteCaptcha);
@Value("${cad.timeout:90}")
public void setCadTimeout(String cadTimeout) {
setCadTimeoutValue(cadTimeout);
}
public static void setDeleteCaptchaValue(Boolean deleteCaptcha) {
ConfigConstants.deleteCaptcha = deleteCaptcha;
public static void setCadTimeoutValue(String cadTimeout) {
ConfigConstants.cadTimeout = cadTimeout;
}
public static int getCadThread() {
return cadThread;
}
@Value("${cad.thread:5}")
public void setCadThread(int cadthread) {
setCadThreadValue(cadthread);
}
public static void setCadThreadValue(int cadthread) {
ConfigConstants.cadThread = cadthread;
}
/**

@ -70,6 +70,8 @@ public class ConfigRefreshComponent {
boolean officExportBookmarks;
boolean officeExportNotes;
boolean officeDocumentOpenPasswords;
String cadTimeout;
int cadThread;
while (true) {
FileReader fileReader = new FileReader(configFilePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
@ -110,6 +112,8 @@ public class ConfigRefreshComponent {
officExportBookmarks = Boolean.parseBoolean(properties.getProperty("office.exportbookmarks", ConfigConstants.DEFAULT_OFFICE_EXPORTBOOKMARKS));
officeExportNotes = Boolean.parseBoolean(properties.getProperty("office.exportnotes", ConfigConstants.DEFAULT_OFFICE_EXPORTNOTES));
officeDocumentOpenPasswords = Boolean.parseBoolean(properties.getProperty("office.documentopenpasswords", ConfigConstants.DEFAULT_OFFICE_EOCUMENTOPENPASSWORDS));
cadTimeout = properties.getProperty("cad.timeout", ConfigConstants.DEFAULT_CAD_TIMEOUT);
cadThread = Integer.parseInt(properties.getProperty("cad.thread", ConfigConstants.DEFAULT_CAD_THREAD));
prohibitArray = prohibit.split(",");
ConfigConstants.setCacheEnabledValueValue(cacheEnabled);
@ -145,6 +149,8 @@ public class ConfigRefreshComponent {
ConfigConstants.setOfficeDocumentOpenPasswordsValue(officeDocumentOpenPasswords);
ConfigConstants.setDeleteSourceFileValue(deleteSourceFile);
ConfigConstants.setDeleteCaptchaValue(deleteCaptcha);
ConfigConstants.setCadTimeoutValue(cadTimeout);
ConfigConstants.setCadThreadValue(cadThread);
setWatermarkConfig(properties);
bufferedReader.close();
fileReader.close();

@ -54,7 +54,6 @@ public class FileHandlerService {
private final Logger logger = LoggerFactory.getLogger(FileHandlerService.class);
private final String fileDir = ConfigConstants.getFileDir();
private final CacheService cacheService;
private final InterruptionTokenSource source = new com.aspose.cad.InterruptionTokenSource(); //CAD延时
@Value("${server.tomcat.uri-encoding:UTF-8}")
private String uriEncoding;
@ -148,7 +147,7 @@ public class FileHandlerService {
/**
cad线
*/
private static final ExecutorService pool = Executors.newFixedThreadPool(1);
private static final ExecutorService pool = Executors.newFixedThreadPool(ConfigConstants.getCadThread());
/**
* ()
*
@ -304,82 +303,77 @@ public class FileHandlerService {
* @return
*/
public String cadToPdf(String inputFilePath, String outputFilePath ,String cadPreviewType) throws Exception {
final InterruptionTokenSource source = new InterruptionTokenSource();//CAD延时
Callable<String> call = () -> {
File outputFile = new File(outputFilePath);
LoadOptions opts = new LoadOptions();
opts.setSpecifiedEncoding(CodePages.SimpChinese);
Image cadImage = Image.load(inputFilePath, opts);
CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
cadRasterizationOptions.setBackgroundColor(Color.getWhite());
cadRasterizationOptions.setPageWidth(1400);
cadRasterizationOptions.setPageHeight(650);
cadRasterizationOptions.setAutomaticLayoutsScaling(true);
cadRasterizationOptions.setNoScaling(false);
cadRasterizationOptions.setDrawType(1);
SvgOptions SvgOptions = null;
PdfOptions pdfOptions = null;
TiffOptions TiffOptions = null;
switch (cadPreviewType) { //新增格式方法
case "svg":
SvgOptions = new SvgOptions();
SvgOptions.setVectorRasterizationOptions(cadRasterizationOptions);
SvgOptions.setInterruptionToken(source.getToken());
break;
case "pdf":
pdfOptions = new PdfOptions();
pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
pdfOptions.setInterruptionToken(source.getToken());
break;
case "tif":
TiffOptions = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
TiffOptions.setVectorRasterizationOptions(cadRasterizationOptions);
TiffOptions.setInterruptionToken(source.getToken());
break;
}
OutputStream stream = null;
try {
stream = new FileOutputStream(outputFile);
switch (cadPreviewType) {
File outputFile = new File(outputFilePath);
LoadOptions opts = new LoadOptions();
opts.setSpecifiedEncoding(CodePages.SimpChinese);
Image cadImage = Image.load(inputFilePath, opts);
CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
cadRasterizationOptions.setBackgroundColor(Color.getWhite());
cadRasterizationOptions.setPageWidth(1400);
cadRasterizationOptions.setPageHeight(650);
cadRasterizationOptions.setAutomaticLayoutsScaling(true);
cadRasterizationOptions.setNoScaling(false);
cadRasterizationOptions.setDrawType(1);
SvgOptions SvgOptions = null;
PdfOptions pdfOptions = null;
TiffOptions TiffOptions = null;
switch (cadPreviewType) { //新增格式方法
case "svg":
cadImage.save(stream, SvgOptions);
SvgOptions = new SvgOptions();
SvgOptions.setVectorRasterizationOptions(cadRasterizationOptions);
SvgOptions.setInterruptionToken(source.getToken());
break;
case "pdf":
cadImage.save(stream, pdfOptions);
pdfOptions = new PdfOptions();
pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
pdfOptions.setInterruptionToken(source.getToken());
break;
case "tif":
cadImage.save(stream, TiffOptions);
TiffOptions = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
TiffOptions.setVectorRasterizationOptions(cadRasterizationOptions);
TiffOptions.setInterruptionToken(source.getToken());
break;
}
} catch (IOException e) {
logger.error("PDFFileNotFoundExceptioninputFilePath{}", inputFilePath, e);
return "null";
} finally {
if (stream != null) { //关闭
stream.close();
}
if (cadImage != null) { //关闭
cadImage.close();
try (OutputStream stream = new FileOutputStream(outputFile)) {
switch (cadPreviewType) {
case "svg":
cadImage.save(stream, SvgOptions);
break;
case "pdf":
cadImage.save(stream, pdfOptions);
break;
case "tif":
cadImage.save(stream, TiffOptions);
break;
}
} catch (IOException e) {
logger.error("PDFFileNotFoundExceptioninputFilePath{}", inputFilePath, e);
return null;
} finally {
//关闭
if (cadImage != null) { //关闭
cadImage.dispose();
}
source.interrupt(); //结束任务
}
source.interrupt(); //结束任务
source.dispose();
}
return "true";
return "true";
};
Future<String> result = pool.submit(call);
try {
// 如果在超时时间内没有数据返回则抛出TimeoutException异常
result.get(60, TimeUnit.SECONDS);
result.get(Long.parseLong(ConfigConstants.getCadTimeout()), TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.out.println("InterruptedException发生");
return "null";
return null;
} catch (ExecutionException e) {
System.out.println("ExecutionException发生");
return "null";
return null;
} catch (TimeoutException e) {
System.out.println("TimeoutException发生意味着线程超时报错");
return "null";
return null;
} finally {
source.interrupt(); //结束任务
source.dispose();
}
return "true";

Loading…
Cancel
Save