在 Windows 服务器上将 DWG、DXF、PLT、HPGL 转换为 PDF 和 TIFF — 无需 AutoCAD。
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total CAD ConverterX 是一个服务器端 SDK,可将 DWG、DXF、DWF、PLT、HPGL、SVG 和 CGM 图纸转换为 PDF、TIFF、JPEG、PNG、BMP、WMF 和 DXF — 无需在服务器上安装 AutoCAD。它以无界面方式运行:没有 GUI,没有对话框,无需任何点击操作。Total CAD ConverterX 同时提供命令行二进制文件和 ActiveX/COM 接口,因此可无缝接入 ASP、PHP、.NET、Python、Ruby、Java 以及任何支持 COM 的后端。
支持的源格式:dxf, dwg, dwf, plt, hg, hgl, hpg, plo, hp, hpl, hpgl, hp1, hp2, hpgl2, gl2, spl, prn, svg, cgm.
Total CAD ConverterX 具有独特的选项,可以一次批量转换多个 CAD 文件:
在寻找基于服务器的解决方案?探索一系列以卓越性能为目标的服务器产品,请访问CoolUtils Server Products。
如果您需要编程语言的示例,请联系我们。我们会为您创建任何示例。
string src = @"C:\test\Source.dwg";
string dest = @"C:\test\Dest.pdf";
var cnv = new CADConverterX();
cnv.Convert(src, dest, "-c PDF -log c:\\test\\CAD.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\CADConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var msgPath = $@"{assemblyDirectoryPath}\MSG\MSG-1.dwg";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(msgPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & MSG files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{msgPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("CADConverter.CADConverterX")
C.Convert "c:\test\source.dwg", "c:\test\dest.pdf", "-cPDF -log c:\test\CAD.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("CADConverter.CADConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite c.ConvertToStream("C:\www\ASP\Source.dwg", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
PHP 示例:
$src="C:\\test\\test.dwg";
$dest="C:\\test\\test.pdf";
if (file_exists($dest)) unlink($dest);
$c= new COM("CADConverter.CADConverterX");
$c->convert($src,$dest, "-c pdf -log c:\\test\\Mail.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('CADConverter.CADConverterX')
src="C:\\test\\test.dwg";
dest="C:\\test\\test.pdf";
c.convert(src,dest, "-c PDF -log c:\\test\\CAD.log");
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("CADConverter.CADConverterX")
src="C:\\test\\test.dwg";
dest="C:\\test\\test.pdf";
c.convert(src, dest, "-c PDF -log c:\\test\\CAD.log");
if not os.path.exists(file_path):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c:=CreateOleObject('CADConverter.CADConverterX');
C.Convert('c:\test\source.dwg', 'c:\test\dest.pdf', '-cPDF -log c:\test\CAD.log');
IF c.ErrorMessage<> Then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("CADConverter.CADConverterX");
c.Convert("C:\\test\\source.dwg", "C:\\test\\dest.pdf", "-c PDF");
if (c.ErrorMessage!="")
alert(c.ErrorMessage)
use Win32::OLE; my $src="C:\\test\\test.dwg"; my $dest="C:\\test\\test.pdf"; my $c = CreateObject Win32::OLE 'CADConverter.CADConverterX'; $c->convert($src,$dest, "-c pdf -log c:\\test\\CAD.log"); print $c->ErrorMessage if -e $dest;
"去年我们用 Total CAD ConverterX 替换了基于 AutoCAD 的 DWG 转 PDF 微服务。此前我们在三台转换 VM 上为 AutoCAD 席位付费,仅仅是为了运行一个 COM 自动化脚本。现在这些 VM 只在队列后端运行 CADConverterX.exe。每张图纸的转换延迟从约 25 秒降到 4 秒,每年的许可费用减少了一个数量级。ActiveX 与我们 .NET worker 的集成只用了半天时间。"
Marko D.
Senior Backend Developer
"我们将 Total CAD ConverterX 作为 Azure 流水线的一部分,运行在 Windows Server Core 容器中。客户上传 DWG,队列拾取后由转换器渲染为 PDF/A 归档输出,文件存入 blob 存储。没有 GUI,没有 AutoCAD,没有许可意外。-log 标志为我们提供了逐文件的日志行,可直接接入我们的日志聚合器。配置很简单:注册 COM、挂载工作目录、完成。"
Anita V.
DevOps Engineer
"我们接受客户发来的任何格式的图纸:DWG、PLT、HPGL2、SVG,应有尽有。我们的接收门户通过 PHP COM 接口调用 Total CAD ConverterX,在操作员开始绘图之前生成预览 PDF。PLT 和 HPGL2 开箱即用,正是我们选择它而非其他替代品的原因。大多数 CAD 库都聚焦于 DWG,而把绘图仪格式当作二等公民。"
Stefan K.
CTO at a printing & plotting bureau
"我们以免版税许可证将 Total CAD ConverterX 捆绑到了我们的图纸管理产品中。一次性的按项目费用只是我们之前供应商按席位收取的重新分发版税的一小部分。我们的安装程序附带 ActiveX,在安装过程中注册它,然后我们的应用程序直接调用它。客户从未看到此转换器。每当我们遇到不寻常的格式边缘情况时,技术支持都响应迅速。"
Paolo F.
Independent Software Vendor
"对于我们之前用于内部资产工作流中批量 DXF 转 PDF 的 AutoCAD COM 自动化来说,这是一个稳健的替代品。之前的方案需要在转换机器上完整安装 AutoCAD,并且每次 AutoCAD 升级后就会出问题。Total CAD ConverterX 作为普通的 Windows 二进制文件运行,可以在无人值守的通宵任务中稳定运行。某些方面的文档可以更加详尽(我们不得不向支持团队询问几个 CLI 标志),但每个问题都在一个工作日内得到了有用的答复。"
Lena B.
Lead .NET Developer
Total CAD ConverterX 附带 CADConverterX.exe,这是一个可以从脚本、计划任务、CI 运行器或任何后端服务驱动的控制台二进制程序。标志集与 GUI 版的 CADConverter.exe 一致;完整参考请参阅命令行文档。下面的配方涵盖了我们最常从 SDK 客户那里听到的场景。
最简单的调用方式 —— 一个源文件、一个输出、一个目标格式。
CADConverterX.exe "C:\drawings\plan.dwg" "C:\out\plan.pdf" -cPDF
处理文件夹中的每个 DWG,并将 PDF 放入同级输出目录。
CADConverterX.exe "C:\drawings\*.dwg" "C:\out\" -cPDF
将掩码替换为 *.dxf、*.plt、*.hpgl 等以选择其他源格式。
建筑和工程项目很少存在于一个平面文件夹中。-Recurse 遍历子目录;-kfs 在输出端重新创建相同的树,而不是将所有内容展平到一个桶中。
CADConverterX.exe "C:\projects\AcmeTower\*.dwg" "C:\out\AcmeTower\" -cPDF -Recurse -kfs
典型的 CAD 交付物是一本相册:数十张属于一起的图纸。-combine 按源文件顺序将它们合并成一个 PDF。
CADConverterX.exe "C:\projects\AcmeTower\sheets\*.dwg" "C:\out\AcmeTower-album.pdf" -cPDF -combine
使用 -sort name 或 -sort numbers 控制图纸顺序,使用 -cimt onefile 当目标是多页 TIFF 而不是 PDF 时。
用于 CAD 工具之间的数据交换,或在网页上嵌入图纸,请渲染为 PDF 以外的矢量格式。
CADConverterX.exe "C:\drawings\*.dwg" "C:\out\" -cDXF
CADConverterX.exe "C:\drawings\*.dwg" "C:\out\" -cSVG
长期蓝图档案通常是带 G4 传真压缩的黑白 TIFF —— 占磁盘空间小,无损,每个查看器都接受。
CADConverterX.exe "C:\drawings\*.dwg" "C:\archive\" -cTIF -dpi 600 -cm bw -tc G4FAX
将 -dpi 降到 300 以用于屏幕审查副本,或推到 1200 如果文件将发送到宽幅绘图仪。
一旦 CADConverterX.exe 作为服务或计划作业运行,了解发生了什么的唯一方法就是日志。-verbosity detail 每个文件写一行;-logmode append 在多次运行之间保留历史。
CADConverterX.exe "C:\drawings\*.dwg" "C:\out\" -cPDF -log "C:\logs\cadconv.log" -verbosity detail -logmode append
当工作进程写入队列文件而转换器消耗它时,您不希望将文件路径编码到命令行本身。-list 从文本文件中读取文件掩码(每行一个)。
CADConverterX.exe -list "C:\queues\batch.txt" "C:\out\" -cPDF
向分包商发送图纸的标准做法:所有者密码锁定编辑/打印权限,用户密码控制文件打开,水印标记每页。
CADConverterX.exe "C:\drawings\*.dwg" "C:\out\" -cPDF -mp "owner-pwd" -up "user-pwd" -perm Copy -wmt "CONFIDENTIAL"
用 Modify、Annotation、FormFill、HighResPrint 的任意组合替换 Copy 来准确授予您想要的权限。
用于需要符合 ISO 19005 PDF/A 文件且具有适当创作元数据的记录管理工作流。
CADConverterX.exe "C:\drawings\*.dwg" "C:\archive\" -cPDF -pdfa -PDFAuthor "Acme Engineering" -PDFTitle "Tower Project Phase 2" -PDFSubject "As-built drawings"
new COM("CADConverter.CADConverterX"),.NET 中使用 new CADConverterX(),Python 中使用 win32com.client.Dispatch,Ruby 中使用 WIN32OLE.new,Pascal/Delphi 中使用 CreateOleObject。上方页面包含可直接复制粘贴的各语言代码示例。此外,CADConverterX.exe 命令行二进制文件可从任何进程、调度器或 shell 脚本调用。mcr.microsoft.com/windows/servercore)构建镜像,并在镜像构建过程中注册 ActiveX。-combine 命令行标志启用单文件合并;-sort name 或 -sort numbers 控制图纸顺序。这是将多页图纸集组装为单个交付 PDF 的标准工作流。