使用Aspose-cad.jar,转PDF速度问题

您好,我试用了Aspose-cad.jar,实现将DWG模型空间的图纸转成独立的PDF页面,思路是先在DWG中定位需要转换的图框/图块的坐标和长宽,然后循环调用CadImage的save方法,将指定区域转成pdf格式,目前发现两种可用的方法: 1)在cadImage中设置minPoint和maxPoint; 2)按照官网示例实现指定坐标导出。然后外部采用循环实现逐页导出然后合并。
   在试用时发现每次调用save方法,处理一个A3纸大小的图框,都需要10--30秒的时间,有的甚至更慢,不太满足现场对格式转换的时间要求!备注:DWG中大约有70个左右的图框。
   请问有没有什么办法,在加速这个过程! 
   非常感谢!

@xuyu,
您好,
这个问题很难回答。导出的性能主要取决于图纸的复杂程度、实体数量、实体类型、导出选项以及精度。如果您能附上您正在使用的示例代码和测试文件,我们可以调查原因,看看哪些环节最耗时。

感谢您的指导!运行慢的代码主要是这个片段:
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

@xuyu,
请分享初始文件以便我们进行调查。