aspose.cad 如何将dwg 转换为pdf,版面大小能自适应图纸大小,并且图纸中的中文保证不乱码,最好是内嵌,请源码示例
时间: 2024-09-18 08:16:22 浏览: 72
Aspose.CAD是一个强大的.NET库,用于处理AutoCAD文件,包括DWG和DXF格式。要使用Aspose.CAD将DWG转换为PDF,同时保持版面大小、中文字符不变并内嵌字体,你可以按照以下步骤进行:
首先,你需要安装Aspose.CAD组件,然后通过以下代码示例展示如何转换:
```csharp
using Aspose.Cad;
using System.IO;
// 设置源DWG文件路径和目标PDF文件路径
string sourceDwgPath = "source.dwg";
string targetPdfPath = "output.pdf";
// 创建CadDocument实例,加载DWG文件
var document = new CadDocument(sourceDwgPath);
// 获取页面信息,自适应图纸大小
CadPage page = document.Pages[0];
Size pageSize = page.GetPrintableArea();
// 使用Aspose.Pdf进行转换,设置版面大小
using (var pdfDoc = new PdfDocument())
{
pdfDoc.PageSetup.PageSize = PageSize.FromMillimeters(pageSize.Width, pageSize.Height);
// 将CadPage转换为PdfPage
var pdfPage = ConvertToPdfPage(page, pdfDoc);
// 添加PdfPage到文档
pdfDoc.Pages.Add(pdfPage);
// 写入PDF文件
pdfDoc.Save(targetPdfPath);
// 处理中文乱码,确保内嵌字体
EnsureChineseFontsAreEmbedded(pdfDoc);
}
private static PdfPage ConvertToPdfPage(CadPage cadPage, PdfDocument pdfDoc)
{
using (var pdfForm = new PdfForm())
{
foreach (var graphic in cadPage.Graphics)
{
if (graphic is CadRasterGraphics rasterGraphic)
{
// 如果图形是位图,直接添加到PDF
pdfDoc.Pages.Add(rasterGraphic.ToImage());
}
else if (graphic is CadVectorGraphics vectorGraphic)
{
// 处理矢量图形,可能需要先转化为Path对象
var path = vectorGraphic.ToPath();
pdfForm.Pages.Add(path);
}
}
return pdfForm.CreatePdfPage(pdfDoc);
}
}
private static void EnsureChineseFontsAreEmbedded(PdfDocument pdfDoc)
{
foreach (PdfFont font in pdfDoc.Fonts)
{
if (font.IsSubsetted && !font.Embedded)
{
pdfDoc.EmbedFont(font);
}
}
}
```
这个代码示例基本流程包括读取DWG文件、创建CadDocument、获取页面积、然后将CadPage转换为PdfPage,最后保存到PDF。为了支持中文字符,我们检查字体是否已内嵌,如果未内嵌则嵌入。
注意:这只是一个基础的示例,实际应用中可能还需要处理更多细节,例如处理CAD的特性如块、注释等。此外,Aspose.CAD的最新版本可能有不同的API,所以确保引用了正确的NuGet包和API。
阅读全文