MES系统使用C#实现SolidWorks图纸批量转换PDF在线查看

通过 eDrawings API 批量将 SOLIDWORKS 文件导出为 PDF(无需 SOLIDWORKS 软件)。

这个用 C# 开发的控制台应用程序允许通过 SOLIDWORKS eDrawings 的免费版本及其 API 将 SOLIDWORKS、DXF、DWG 文件导出为 PDF。使用此工具无需安装 SOLIDWORKS。

运行工具

此应用程序可以从命令行运行,并需要两个必填参数和一个可选参数,如下所述:

示例命令
exportpdf.exe "C:\SOLIDWORKS Drawings" "test.slddrw""C:\PDFs"

using System;

using System.Collections.Generic;

using System.Drawing.Printing;

using System.IO;

using System.Linq;

using System.Windows.Forms;

using eDrawings.Interop;

using eDrawings.Interop.EModelViewControl;

namespace ExportPdf

{

static class Module1

{

private static EModelViewControl m_Ctrl;

private static List<string> m_Files;

private static string m_OutDir;

public static void Main()

{

try

{

ExtractInputParameters();

var eDrwCtrl = new EDrawingsHost();

eDrwCtrl.ControlLoaded += OnEdrawingsControlLoaded;

var winForm = new Form();

winForm.Controls.Add(eDrwCtrl);

eDrwCtrl.Dock = DockStyle.Fill;

winForm.ShowIcon = false;

winForm.ShowInTaskbar = false;

winForm.WindowState = FormWindowState.Minimized;

winForm.ShowDialog();

}

catch (Exception ex)

{

PrintError(ex.Message);

}

}

private static void ExtractInputParameters()

{

string\[\] args = Environment.GetCommandLineArgs();

string input = args1;

string filter = args2;

m_OutDir = "";

if (args.Length > 3)

{

m_OutDir = args3;

}

if (!string.IsNullOrEmpty(m_OutDir))

{

if (!Directory.Exists(m_OutDir))

{

Directory.CreateDirectory(m_OutDir);

}

}

if (Directory.Exists(input))

{

m_Files = Directory.GetFiles(input, filter, SearchOption.AllDirectories).ToList();

}

else if (File.Exists(input))

{

m_Files = new List<string>();

m_Files.Add(input);

}

else

{

throw new Exception("Specify input file or directory");

}

}

public static void OnEdrawingsControlLoaded(EModelViewControl ctrl)

{

Console.WriteLine(string.Format("Starting job. Exporting {0} file(s)", m_Files.Count));

m_Ctrl = ctrl;

global::ExportPdf.Module1.m_Ctrl.OnFinishedLoadingDocument += OnDocumentLoaded;

global::ExportPdf.Module1.m_Ctrl.OnFailedLoadingDocument += OnDocumentLoadFailed;

global::ExportPdf.Module1.m_Ctrl.OnFinishedPrintingDocument += OnDocumentPrinted;

global::ExportPdf.Module1.m_Ctrl.OnFailedPrintingDocument += OnPrintFailed;

PrintNext();

}

public static void PrintNext()

{

if (m_Files.Any())

{

string filePath;

filePath = m_Files.First();

m_Files.RemoveAt(0);

m_Ctrl.CloseActiveDoc("");

m_Ctrl.OpenDoc(filePath, false, false, false, "");

}

else

{

Console.WriteLine("Completed");

Environment.Exit(0);

}

}

public static void OnDocumentLoaded(string fileName)

{

MessageBox.Show("3");

const string PRINTER_NAME = "Microsoft Print to PDF";

const int AUTO_SOURCE = 7;

Console.WriteLine(string.Format("Opened {0}", fileName));

m_Ctrl.SetPageSetupOptions(EMVPrintOrientation.eLandscape, (int)PaperKind.A4, 100, 100, 1, AUTO_SOURCE, PRINTER_NAME, 0, 0, 0, 0);

string pdfFileName = Path.GetFileNameWithoutExtension(fileName) + ".pdf";

string outDir;

if (!string.IsNullOrEmpty(m_OutDir))

{

outDir = m_OutDir;

}

else

{

outDir = Path.GetDirectoryName(fileName);

}

string pdfFilePath;

pdfFilePath = Path.Combine(outDir, pdfFileName);

Console.WriteLine(string.Format("Exporting {0} to {1}", fileName, pdfFilePath));

m_Ctrl.Print5(false, fileName, false, false, true, EMVPrintType.eOneToOne, 1, 0, 0, true, 1, 1, pdfFilePath);

}

public static void OnDocumentLoadFailed(string fileName, int errorCode, string errorString)

{

PrintError(string.Format("Failed to load {0}: {1}", fileName, errorString));

PrintNext();

}

public static void OnDocumentPrinted(string printJobName)

{

Console.WriteLine(string.Format("'{0}' export completed", printJobName));

PrintNext();

}

public static void OnPrintFailed(string printJobName)

{

PrintError(string.Format("Failed to export '{0}'", printJobName));

PrintNext();

}

public static void PrintError(string msg)

{

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine(msg);

Console.ResetColor();

}

}

}

主要代码模块

  1. Main方法:

    • 程序的入口点,捕获可能出现的异常。
    • 创建EDrawingsHost实例eDrwCtrl,并设置其ControlLoaded事件处理程序为OnEdrawingsControlLoaded。
    • 创建一个Form,将eDrwCtrl添加到Form的控件中,并设置一些属性后以对话框形式显示。
  2. ExtractInputParameters方法:

    • 从命令行参数中提取输入参数,包括输入文件或文件夹路径、筛选器和可选的输出文件夹路径。
    • 如果输出文件夹不存在,则创建该文件夹。
    • 如果输入是一个目录,则获取该目录下符合筛选条件的所有文件路径存入m_Files;如果输入是一个文件,则将该文件路径存入m_Files。
  3. OnEdrawingsControlLoaded方法:

    • 当 eDrawings 控件加载完成时触发。
    • 打印开始任务的信息,并设置m_Ctrl的各种事件处理程序。
    • 调用PrintNext方法开始处理第一个文件。
  4. PrintNext方法:

    • 如果m_Files中有文件,则取出第一个文件路径,关闭当前打开的文档,打开这个文件。
    • 如果m_Files为空,则打印任务完成信息并退出程序。
  5. OnDocumentLoaded方法:

    • 当文档加载成功时触发。
    • 设置页面打印选项,确定输出 PDF 文件的名称和路径。
    • 使用m_Ctrl的打印方法将当前文档打印为 PDF 文件。
  6. OnDocumentLoadFailed方法:

    • 当文档加载失败时触发。
    • 打印错误信息,并调用PrintNext方法继续处理下一个文件。
  7. OnDocumentPrinted方法:

    • 当文档打印成功时触发。
    • 打印文档导出完成的信息,并调用PrintNext方法继续处理下一个文件。
  8. OnPrintFailed方法:

    • 当文档打印失败时触发。
    • 打印错误信息,并调用PrintNext方法继续处理下一个文件。
  9. PrintError方法:

    • 将错误信息以红色字体打印到控制台,然后恢复控制台颜色。

样例代码下载地址:https://download.csdn.net/download/bjhtgy/89789940

相关推荐
后台圈9 小时前
AI作品分享-扭矩点检管理系统
制造
收放扳机10 小时前
PCB收放板设备机械手架构选型参考——三轴/四轴/六轴/蜘蛛手对比
人工智能·科技·架构·自动化·制造·pcb工艺
jingchengkai15 小时前
CNC加工中心行程与零件尺寸怎么匹配?加工范围选择的工程细节
制造·cnc·五轴加工
samble17 小时前
从零搭建灌装监控系统(十八):自定义控件,三色灯与状态指示
c#·wpf·mvvm·modbus·工业控制
jun_bai17 小时前
使用Aspose实现word文档合并,内容替换
windows·c#·word
智造ERP规划19 小时前
项目型制造的ERP和标准品制造是两种东西:5个核心差异拆解
制造
字节暗面20 小时前
客户端上报不可信:游戏服务端数据校验与对局重演设计
c#·游戏开发·服务端校验·反作弊
云飞云共享云桌面21 小时前
智能装备数字化转型:云飞云云桌面助力苏州工厂共享 SolidWorks 算力
运维·服务器·3d·自动化·制造
chingho21 小时前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目
yichengerp21 小时前
中小电子厂用什么ERP?电子厂ERP管理软件实施要点与易呈方案推荐
大数据·运维·人工智能·云计算·制造