CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印,还是比较稳定的

1.需要本地安装CAD软件

2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中,

python 复制代码
    originalValue = ACADPref.PrinterConfigPath \
        = r"C:\Users\hyh\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\chs\Plotters"
python 复制代码
#!/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)
相关推荐
西洼工作室1 分钟前
python邮箱令牌/点击验证、邮箱验证码实现
前端·python
倔强的猴子(翻版)13 分钟前
我用 Python 写了个排序库,一亿数据量下比 C 级 np.sort() 快 7 倍
人工智能·python·算法·阿里云·文心一言
郝学胜-神的一滴15 分钟前
深入理解回归损失函数:MSE、L1 与 Smooth L1 的设计哲学
人工智能·python·程序人生·算法·机器学习·数据挖掘·回归
ZC跨境爬虫17 分钟前
Python Django开发者转向微信小程序:从架构理解到第一行代码的完整准备指南
开发语言·python·ui·微信小程序·django
绘梨衣54718 分钟前
django-elasticsearch-dsl-drf 搜索服务搭建教学文档
python·elasticsearch·django
测试员周周24 分钟前
【AI测试系统】第6篇:需求扔进去,3 分钟出测试用例?AI测试系统的 RAG 知识增强实战
人工智能·python·功能测试·测试工具·测试用例
AI玫瑰助手34 分钟前
Python入门:Windows/macOS/Linux系统安装Python教程
windows·python·macos
m0_738120721 小时前
网路安全编程——熟悉并使用Scapy简单实现捕捉主流邮箱协议(SMTP、POP3和IMAP) 的身份凭证
网络·python·网络协议·tcp/ip·安全·网络安全
new【一个】对象1 小时前
RAG详解
python·llm·agent·rag
傲笑风1 小时前
jupyter转PDF教程
python·jupyter