Search code examples
pythonpdfpngjpegdxf

Python converting DXF files to PDF or PNG or JPEG


Does anyone know any way of converting DXF files to either PNG or PDF?

I have a huge list of DXF Files and I want to convert them to Images to view them quicker.

If its possible, how could you extract the DXF file values, like the thickness or measurements of that drawing that's in the DXF File.


Solution

  • EDIT!!!

    import matplotlib.pyplot as plt
    import ezdxf
    from ezdxf.addons.drawing import RenderContext, Frontend
    from ezdxf.addons.drawing.matplotlib import MatplotlibBackend
    import re
    
    
    class DXF2IMG(object):
    
        default_img_format = '.png'
        default_img_res = 300
        def convert_dxf2img(self, names, img_format=default_img_format, img_res=default_img_res):
            for name in names:
                doc = ezdxf.readfile(name)
                msp = doc.modelspace()
                # Recommended: audit & repair DXF document before rendering
                auditor = doc.audit()
                # The auditor.errors attribute stores severe errors,
                # which *may* raise exceptions when rendering.
                if len(auditor.errors) != 0:
                    raise Exception("The DXF document is damaged and can't be converted!")
                else:
                    fig = plt.figure()
                    ax = fig.add_axes([0, 0, 1, 1])
                    ctx = RenderContext(doc)
                    ctx.set_current_layout(msp)
                    ctx.current_layout.set_colors(bg='#FFFFFF')
                    out = MatplotlibBackend(ax)
                    Frontend(ctx, out).draw_layout(msp, finalize=True)
    
                    img_name = re.findall("(\S+)\.",name)  # select the image name that is the same as the dxf file name
                    first_param = ''.join(img_name) + img_format  #concatenate list and string
                    fig.savefig(first_param, dpi=img_res)
    
    
    if __name__ == '__main__':
        first = DXF2IMG()
        first.convert_dxf2img(['GT-010.DXF'],img_format='.png')
    

    @hamza-mohammed shared a solution that works marvellously!

    Full credit goes to: https://github.com/Hamza442004/DXF2img

    Above is the version with out the GUI in case anyone wants the real deal!