CAD 文件 批量转为PDF或批量打印,还是比较稳定的
1.需要本地安装CAD软件
2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中,
originalValue = ACADPref.PrinterConfigPath \
= r"C:\Users\hyh\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\chs\Plotters"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import win32com.client
import time
import os,subprocess
def find_all_sub_files( directory, suffix='.dxf'):
'''
:param directory: 查找的主目录
:param suffix: 获取的扩展名
:return: 符合扩展名的列表
'''
all_files = []
# 递归遍历目录及其子目录中的所有文件
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(suffix):
if '~$' not in file:
all_files.append(os.path.join(root, file))
return all_files
def close_application(application = "chrome.exe"):
# windows系统 关闭谷歌浏览器
cmd = "taskkill /f /t /im {}".format(application)
# 执行cmd命令,不显示任何输出
subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
def cad_to_PDf(pdf_path,doc):
# doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
#print(doc.Name)
#print(doc.ActiveLayout.ConfigName)
# 设置绘图仪管理器的工作目录
ACADPref = doc.Application.preferences.Files
originalValue = ACADPref.PrinterConfigPath \
= r"C:\Users\hyh\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\chs\Plotters"
#print(ACADPref)
#print(originalValue)
oplot = doc.PlotConfigurations.Add("PDF", doc.ActiveLayout.ModelType)
doc.ActiveLayout.ConfigName = "DWG To PDF.pc3"
doc.SetVariable("Filedia", 0)
doc.SetVariable("BACKGROUNDPLOT", 0) # 前台打印
doc.Plot.QuietErrorMode = True
print(pdf_path)
doc.Plot.PlotToFile(pdf_path) # 选择打印机,若要采用纸质打印的打印机,则输出就需要将plot.PlotToFile()改为plot.PlotToDevice()
# doc.PlotRotation = 0 # 横向打印
# doc.StandardScale = 0 # 图纸打印比例
# doc.CenterPlot = True # 居中打印
# doc.PlotWithPlotStyles = True # 依照样式打印
# doc.PlotHidden = False # 隐藏图纸空间对象
oplot.Delete()
oplot = None
obj = doc.GetVariable("DBMOD")
# print(obj)
def cad_conversion(cad_file_dir, save_pdf_path):
wincad = win32com.client.Dispatch("AutoCAD.Application")
docs = wincad.Documents
dxf_all_list=find_all_sub_files(cad_file_dir, suffix='.dxf')
for dxf_path in dxf_all_list:
cad_name=dxf_path.split('\\')[-1].replace('.dxf','.pdf')
if not os.path.exists(save_pdf_path):
os.makedirs(save_pdf_path)
pdf_path=os.path.join(save_pdf_path,cad_name)
doc = docs.Open(dxf_path)
cad_to_PDf( pdf_path, doc)
# 关闭CAD文件
#doc.Close()
doc.Close(False)
del doc
time.sleep(1)
close_application(application="chrome.exe") # 关闭谷歌浏览器,如默认其他浏览器,需要修改 chrome.exe
wincad.Quit()
del wincad
if __name__ == '__main__':
# CAD文件路径 输出PDF文件路径
cad_file = r"D:\Python\CAD\hb" # 输入CAD文件路径
output_pdf = r"D:\Python\CAD\hb\export_cad_data\CAD" # 输出PDF文件路径
cad_conversion(cad_file, output_pdf)