aspose.cad使用工具类,及遇到的问题

aspose.cad使用工具类,及遇到的问题

CAD转换工具类


import com.aspose.cad.*;
import com.aspose.cad.fileformats.cad.CadDrawTypeMode;
import com.aspose.cad.fileformats.cad.CadImage;
import com.aspose.cad.imageoptions.CadRasterizationOptions;
import com.aspose.cad.imageoptions.JpegOptions;
import com.aspose.cad.imageoptions.PdfOptions;
import com.aspose.cad.imageoptions.SvgOptions;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

public class CADFileUtil {

    /**
     * 当前cad预览运行状态(保证cad预览线程,同步只有一个人操作)
     */
    public static volatile  boolean RUNNING = false;


    /**
     *方法描述  CAD文件转换为PDF流
     * @param srcFile 选择CAD文件路径
     * @param dataDir 保存pdf文件路径
     */
    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文件路径
     */
    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 fileName = srcFile.substring(0,srcFile.lastIndexOf("."));
        Image objImage = Image.load(srcFile);
        objImage.save(fileName+".pdf", pdfOptions);
    }

    /**
     *方法描述  CAD文件转换为PDF流
     * @param srcFile 选择CAD文件路径
     */
    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 fileName = srcFile.substring(0,srcFile.lastIndexOf("."));
        Image objImage = Image.load(srcFile);
        objImage.save(fileName+".jpeg", jpegOptions);
    }

    /**
     * dwg转换成Svg
     * @param srcFile
     */
    public void CADFileToSvg(String srcFile){
        try{
            SvgOptions options = new SvgOptions();
            Image image = (CadImage )Image.load(srcFile);

            int width = image.getWidth();
            int height = image.getHeight();
            //100万像素等比倍数
            int zoom = 1008000 / width / height;
            CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
            cadRasterizationOptions.setPageHeight(height * zoom);
            cadRasterizationOptions.setPageWidth(width * zoom);
            cadRasterizationOptions.setDrawType(CadDrawTypeMode.UseObjectColor);// 设置使用CAD画笔颜色
            cadRasterizationOptions.setBackgroundColor(Color.getBlack());// 设置背景颜色

            cadRasterizationOptions.getGraphicsOptions().setSmoothingMode(SmoothingMode.HighQuality);
            cadRasterizationOptions.getGraphicsOptions().setTextRenderingHint(TextRenderingHint.AntiAliasGridFit);
            cadRasterizationOptions.getGraphicsOptions().setInterpolationMode(InterpolationMode.HighQualityBicubic);

            options.setVectorRasterizationOptions(cadRasterizationOptions);
//options.setColorType(SvgColorMode.Grayscale);
//options.setTextAsShapes(false);
            String fileName = srcFile.substring(0,srcFile.lastIndexOf("."));
            image.save(fileName+".svg",options);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 方法描述  CAD文件转换为PDF流
     * @param inputStream 选择CAD文件流
     */
    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 转换后文件输入流
     */
    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
     */
    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="D:/ugi/profile/cad/test/";
        CADFileUtil.CADFileToSvg(srcFile+"2015.02.10修订.DWG");
    }


}

使用过程中的问题

一、需要将CAD文件转换成其他文件,用于浏览器预览,最终选定转为svg。

  1. 问题现象:使用aspose.cad 对swg文件进行转换svg,windows转换的图正常显示,linux转换的图文字出现重叠问题,如下:
    在这里插入图片描述

  2. 问题定位:初步判定为:服务器字体问题。

  3. 解决办法:将windows的宋体安装到linux上,并在程序中指定字体样式:
    aspose.cad-java-API
    对于更换字体,官方api提供了一种方法,

			CadImage image = (CadImage )Image.load(srcFile);
            //image.setDefaultFont("simsun"); // 自己偶然发现设置字体方法:设置字体-宋体
            for(Object style : image.getStyles())// 官方指定设置字体方法,两种任选其一,我是两种都放开了,未测哪个生效
            {
                // Set the font name Arial
                String font = ((com.aspose.cad.fileformats.cad.cadtables.CadStyleTableObject)style).getPrimaryFontName();
                if("txt".equalsIgnoreCase(font)){
                    continue;
                }
                System.out.println(font);
                ((com.aspose.cad.fileformats.cad.cadtables.CadStyleTableObject)style).setPrimaryFontName("simsun");
            }
  1. Linux操作-安装宋体:
    1 fc-list :lang=zh查看linux服务器中文字体,并linux服务器/usr/share/fonts目录下创建chinese文件夹;
    在这里插入图片描述
    2.将windows的宋体复制到linux的/usr/share/fonts/chinese下;
    3.然后建立字体索引信息,更新字体缓存,使用如下命令:
cd /usr/share/fonts/
mkfontscale
mkfontdir
fc-cache

在这里插入图片描述

至此,字体已经安装完毕。
6. 回到aspose.cad,调试dwg文件转svg,文件已经使用宋体
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值