您好,我试用了Aspose-cad.jar,实现将DWG模型空间的图纸转成独立的PDF页面,思路是先在DWG中定位需要转换的图框/图块的坐标和长宽,然后循环调用CadImage的save方法,将指定区域转成pdf格式,目前发现两种可用的方法: 1)在cadImage中设置minPoint和maxPoint; 2)按照官网示例实现指定坐标导出。然后外部采用循环实现逐页导出然后合并。
在试用时发现每次调用save方法,处理一个A3纸大小的图框,都需要10--30秒的时间,有的甚至更慢,不太满足现场对格式转换的时间要求!备注:DWG中大约有70个左右的图框。
请问有没有什么办法,在加速这个过程!
非常感谢!
感谢您的指导!运行慢的代码主要是这个片段:
public static void exportPDFPaperByViewPort(CadImageBlock block,CadImage cadImage,String fileName) {
//创建输出属性类
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
//默认Model空间
rasterizationOptions.setLayouts(new String[]{DEFAULT_LAYOUT_NAME});
//增加shx字体的路径
String[] shxFontPath = CadResourceUtil.getSystemSHXFontsPath();
rasterizationOptions.setShxFonts(shxFontPath);
rasterizationOptions.setVisibilityMode(VisibilityMode.AsPrint);
//rasterizationOptions.setDrawType(CadDrawTypeMode.UseDrawColor);
//可以设置设置转换精度,精度越高,速度变慢
// RasterizationQuality quality = new RasterizationQuality();
// quality.setText(RasterizationQualityValue.High);
// rasterizationOptions.setQuality(quality);
//设置最小和最大视窗,最小对应左下脚坐标,最大对应右上角坐标
cadImage.getMinPoint().setX(block.getLeftTopX());
cadImage.getMinPoint().setY(block.getLeftTopY() - block.getHeight());
cadImage.getMaxPoint().setX(block.getLeftTopX() + block.getWidth());
cadImage.getMaxPoint().setY(block.getLeftTopY());
rasterizationOptions.setPageWidth((float)block.getWidth());
rasterizationOptions.setPageHeight((float)block.getHeight());
rasterizationOptions.setBorderX(0);
rasterizationOptions.setBorderY(0);
//转成PDF配置类
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.setResolutionSettings(new ResolutionSetting(50, 50));
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
try {
cadImage.save(fileName, pdfOptions);
}catch (Exception ex) {
ex.printStackTrace();
}
}
就是使用了cadImage.save方法转出pdf,为了指定范围,使用了minPoint和maxPoint,函数参数中的block,只起到指定图框范围的作用
测试转出的DWG文件经测试,大约有9万多cadEntityBase,这个方法是循环调用的,通过传入不同的block,将模型空间的不同图框单独导出
控制循环调用的代码:
String[] tempPDFFileNames = new String[exportBlockList.size()];
for (CadImageBlock block : exportBlockList) {
String fileName = fileNamePre + “第”+(++x)+“张图纸.pdf”;
tempPDFFileNames[x-1] = fileName;
long time1 = System.currentTimeMillis();
exportPDFPaperByViewPort(block,cadImage,fileName);
// exportPDFPaperByCoordinates(block,cadImage,fileName);
System.out.println(“已经生成”+fileName+“,耗时:”+(System.currentTimeMillis() - time1));
}
部分运行输出情况为:
总共 70 张图纸需要导出!
已经生成G:\pdfpaper\第1张图纸.pdf,耗时:27471
已经生成G:\pdfpaper\第2张图纸.pdf,耗时:11966
已经生成G:\pdfpaper\第3张图纸.pdf,耗时:10084
已经生成G:\pdfpaper\第4张图纸.pdf,耗时:10175
已经生成G:\pdfpaper\第5张图纸.pdf,耗时:9849
已经生成G:\pdfpaper\第6张图纸.pdf,耗时:9728
已经生成G:\pdfpaper\第7张图纸.pdf,耗时:10358
已经生成G:\pdfpaper\第8张图纸.pdf,耗时:12196
已经生成G:\pdfpaper\第9张图纸.pdf,耗时:12063
已经生成G:\pdfpaper\第10张图纸.pdf,耗时:9347
已经生成G:\pdfpaper\第11张图纸.pdf,耗时:11021
已经生成G:\pdfpaper\第12张图纸.pdf,耗时:12898
已经生成G:\pdfpaper\第13张图纸.pdf,耗时:10258
已经生成G:\pdfpaper\第14张图纸.pdf,耗时:10717