cad(dwg,dxf)转pdf实践
最近项目中需要用到cad文件(dxf,dwg)转成pdf,然后前段实时预览
这里面主要使用到aspose-cad
,可以从https://repository.aspose.com/webapp/#/artifacts/browse/tree/General/repo
下载并且导入,可能maven仓库下载不下来,话不多说直接看代码
踩坑记录
这里主要是中文乱码的问题。这里处理了一天,总算解决,下面记录一下我的处理过程
1.首先百度,我看有个大佬说,我们在load成image那一步可以多穿一个参数,设置一个编码格式
LoadOptions loadOptions = new LoadOptions();
loadOptions.setSpecifiedEncoding(CodePages.SimpChineseOtherGb2312);
尝试之后还是不行
2.我跟大佬朋友商量了一下,是不是前端传过来的MultipartFile转成流的时候编码格式消失的问题,接着我就把传过来的文件转成字符流并且设置了一个编码格式,然后输入到临时文件并把这个临时文件的字节流穿load里面生成image,写了一大通,最后直接load那边就报错了。后来我把这两次转换结果都生成dwg文件,结果我发现,字节流那个可以用,但是字符流输出的文件就不行。跟大佬朋友商量可能图片转成字符的损耗
3.然后下午我自己分析了一下,说明前段传过来的问题是没问题的,因为传过来的文件我转出后是可以用的。同时我在第一步踩坑我设置了load的编码格式也不是,那会不会load出来的image我们也需要设置一个编码格式。不然就会丢失显示问题,进而转成pdf就不行,分析分析我就看到了CadImage里面有设置字体的方法,所以就把image直接强转成CadImage设置了字体格式,完美解决
修改后的代码
/**
* Description:
* <dwg文件转为pdf>
*
* @param fileInputStream
* @return void
* @author suK
* @date 2021/5/24
**/
public static File dwgToPdf(InputStream fileInputStream){
//LoadOptions loadOptions = new LoadOptions();
//loadOptions.setSpecifiedEncoding(CodePages.SimpChineseOtherGb2312);
//将dwg文件转换成输入流
Image objImage = Image.load(fileInputStream, loadOptions);
CadImage cadImage = (CadImage) objImage;
//******************************
//下面这个代码必须得有,否则就会出现中文的乱码问题,这个setDefaultFont只是在CadImage这个类里面有
//所以我们需要把Image转成CadImage
cadImage.setDefaultFont("楷体");
cadImage.setFileEncoding(CodePages.SimpChineseOtherGb2312);
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
//设置颜色
rasterizationOptions.setBackgroundColor(Color.getBlack());
rasterizationOptions.setPageWidth(1400);
rasterizationOptions.setPageHeight(1400);
rasterizationOptions.setAutomaticLayoutsScaling(true);
rasterizationOptions.setNoScaling(false);
rasterizationOptions.setDrawType(1);
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
//输出文件
File outputFile = new File(System.currentTimeMillis() + ".pdf");
//存放地址
try {
cadImage.save(outputFile.getPath(), pdfOptions);
} catch (Exception e) {
e.printStackTrace();
log.error("dwg转pdf失败{}", outputFile.getName());
} finally {
IOUtils.closeQuietly(fileInputStream);
}
log.debug("文件转换成功{}", outputFile.getName());
return outputFile;
}
本文来自博客园,作者:Diamond-fz,转载请注明原文链接:https://www.cnblogs.com/fzstudy/p/16199362.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)