java 将cad文件转化成pdf或图片,实现在线预览

903 阅读3分钟

小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动

本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金

pom文件引入依赖

<!-- https://mvnrepository.com/artifact/com.aspose/aspose-cad -->
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cad</artifactId>
    <version>20.4</version>
</dependency>

 这个jar包只有国外的maven中央仓库有,如果下载不下来,请到官网上下载jar,在本地导入依赖

下载地址:mvnrepository.com/artifact/co…

java核心代码如下:

import com.aspose.cad.Color;
import com.aspose.cad.Image;
import com.aspose.cad.imageoptions.CadRasterizationOptions;
import com.aspose.cad.imageoptions.JpegOptions;
import com.aspose.cad.imageoptions.PdfOptions;
import com.sun.collierycommon.utils.SmartStringUtil;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
 
/**
 * @Description:CAD文件工具类
 * @Author: Tarzan Liu
 * @Date: 2020/1/8 14:23
 */
public class CADFileUtil{
 
    /**
     * 当前cad预览运行状态(保证cad预览线程,同步只有一个人操作)
     */
    public static volatile  boolean RUNNING = false;
 
    /**
     *方法描述  CAD文件转换为PDF流
     * @param srcFile 选择CAD文件路径
     * @param dataDir 保存pdf文件路径
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static void CADFileToPDF(String srcFile,String dataDir){
        Image objImage = Image.load(srcFile);
        CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
        cadRasterizationOptions.setBackgroundColor(Color.getWhite());
        cadRasterizationOptions.setPageWidth(1600);
        cadRasterizationOptions.setPageHeight(1600);
        PdfOptions pdfOptions = new PdfOptions();
        pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
       objImage.save(dataDir + System.currentTimeMillis()+".pdf", pdfOptions);
    }
 
 
    /**
     *方法描述  CAD文件转换为PDF流
     * @param srcFile 选择CAD文件路径
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static void CADFileToPDF(String srcFile){
        CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
        cadRasterizationOptions.setBackgroundColor(Color.getWhite());
        cadRasterizationOptions.setPageWidth(1600);
        cadRasterizationOptions.setPageHeight(1600);
        PdfOptions pdfOptions = new PdfOptions();
        pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
        String[] str = SmartStringUtil.split(srcFile,".");
        Image objImage = Image.load(srcFile);
        objImage.save(str[0]+".pdf", pdfOptions);
    }
 
    /**
     *方法描述  CAD文件转换为PDF流
     * @param srcFile 选择CAD文件路径
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static void CADFileToImage(String srcFile){
        CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
        cadRasterizationOptions.setBackgroundColor(Color.getWhite());
        cadRasterizationOptions.setPageWidth(1600);
        cadRasterizationOptions.setPageHeight(1600);
        JpegOptions jpegOptions = new JpegOptions();
        jpegOptions.setVectorRasterizationOptions(cadRasterizationOptions);
        String[] str = SmartStringUtil.split(srcFile,".");
        Image objImage = Image.load(srcFile);
        objImage.save(str[0]+".jpeg", jpegOptions);
    }
    /**
     * 方法描述  CAD文件转换为PDF流
     * @param inputStream 选择CAD文件流
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static  InputStream CADFileToPDF(InputStream inputStream) throws Exception {
        RUNNING = true;
        Image image = Image.load(inputStream);
        CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
        cadRasterizationOptions.setBackgroundColor(Color.getWhite());
        cadRasterizationOptions.setPageWidth(1600);
        cadRasterizationOptions.setPageHeight(1600);
        PdfOptions pdfOptions = new PdfOptions();
        pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        image.save(out,pdfOptions);
        return  outputStreamConvertInputStream(out);
    }
 
 
    /**
     * 方法描述  CAD文件转换为PDF(处理网络文件)
     *
     * @param netFileUrl 网络文件路径
     * @return InputStream 转换后文件输入流
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static InputStream convertNetFile(String netFileUrl) throws Exception {
        // 创建URL
        URL url = new URL(netFileUrl);
        // 试图连接并取得返回状态码
        URLConnection urlConnection = url.openConnection();
        urlConnection.connect();
        HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
        int httpResult = httpURLConnection.getResponseCode();
        if (httpResult == HttpURLConnection.HTTP_OK) {
            return httpURLConnection.getInputStream();
        }
        return null;
    }
 
 
    /**
     * 方法描述 outputStream转inputStream
     * @param out
     * @author Tarzan Liu
     * @date 2020年01月08日 15:08:50
     */
    public static ByteArrayInputStream outputStreamConvertInputStream(final OutputStream out) throws Exception {
        ByteArrayOutputStream byteOut=(ByteArrayOutputStream) out;
        return new ByteArrayInputStream(byteOut.toByteArray());
    }
 
 
/*    public static void main(String[] args) {
        String srcFile="F:/file/工业广场平面图201809.dwg";
        String dataDir="F:/file/";
        long a= System.currentTimeMillis();
        CADFileToPDF(srcFile);
       // CADFileToImage(srcFile);
        long b=System.currentTimeMillis();
        System.out.println(b-a);
    }*/
 
}

运行主方法可以测试。

「欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章」。

  • 抽奖礼物:100份,掘金官方提供,包括掘金徽章、拖鞋、马克杯、帆布袋等,随机发放
  • 抽奖时间:「掘力星计划」活动结束后,预计3个工作日内,官方将在所有符合规则的活动文章评论区抽出
  • 抽奖方式:掘金官方随机抽奖+人工核实
  • 评论内容:与文章内容相关的评论、建议、讨论等,「踩踩」「学习了」等泛泛类的评论无法获奖