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。
-
问题现象:使用aspose.cad 对swg文件进行转换svg,windows转换的图正常显示,linux转换的图文字出现重叠问题,如下:
-
问题定位:初步判定为:服务器字体问题。
-
解决办法:将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");
}
- 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,文件已经使用宋体