Skip to content

GerberJobFile and Project

This guide shows how to use GerberJobFile class and Project to represent PCB projects.

GerberJobFile

PyGerber provides a GerberJobFile class to directly handle .gbrjob files usually exported alongside Gerber files. You can find The Gerber Job Format Specification at www.ucamco.com. Attributes of GerberJobFile directly map to values in .gbrjob file. You can create GerberJobFile manually by constructing it out of classes imported from pygerber.gerber.api or you can load existing .gbrjob file with from_file() method.

example.py
1
2
3
4
5
6
7
8
from pygerber.examples import ExamplesEnum, get_example_path
from pygerber.gerber.api._gerber_job_file import GerberJobFile


gerber_job = GerberJobFile.from_file(
    get_example_path(ExamplesEnum.carte_test_gbrjob),
)
print(gerber_job.header.generation_software.vendor)
$ python example.py
KiCad

PyGerber Project class

Project class is a container for CompositeView objects. It is primarily a utility for grouping CompositeView objects together, it doesn't really fit into PCB design workflow but can be really handy to express what should be rendered together while creating images of PCBs.

Project has top, bottom read-only attributes which containing CompositeView objects and inner read-only attribute containing tuple of CompositeView objects representing inner layers. Layers in inner are ordered first to last, L1 at index 0, Ln at index n.

Converting GerberJobFile to Project

GerberJobFile can be converted to Project object with to_project() method. This will automatically read layers from GerberJobFile and arrange them in Project object so they can be rendered.

example.py
from pygerber.examples import ExamplesEnum, get_example_path
from pygerber.gerber.api._gerber_job_file import GerberJobFile


gerber_job = GerberJobFile.from_file(
    get_example_path(ExamplesEnum.carte_test_gbrjob),
)
project = gerber_job.to_project()

print("top:")
for file in project.top.files:
    print(f"  {file}")

for i, inner in enumerate(project.inner):
    print(f"inner {i}:")
    for file in inner.files:
        print(f"  {file}")

print("bottom:")
for file in project.bottom.files:
    print(f"  {file}")

project.bottom.render_with_pillow().get_image().save("output.png")
$ python example.py
top:
  GerberFile(source='carte_test-F_Cu.gbr', sha256='4b0d219591c6b37af12505f6f5c8846180c4e1bc74f50d5bec0a6ab18ca616a5')
  GerberFile(source='carte_test-F_Mask.gbr', sha256='1322445fd9368ac7c9f167a213cbc86651b35752e8bae8c0c3623db319b23e80')
  GerberFile(source='carte_test-F_Silkscreen.gbr', sha256='23b6b77cda230055a6f32c8a3719574b2075576ffc444906f129ee88123c984b')
  GerberFile(source='carte_test-Edge_Cuts.gbr', sha256='4a6960843955afe271580adb763eae8696251b8c68a295c66af333ad33749a0f')
bottom:
  GerberFile(source='carte_test-B_Cu.gbr', sha256='bce8b1dc2e10e0037c9854d834c7e15e8b12934fca21aa8b9345688685ad2eac')
  GerberFile(source='carte_test-B_Mask.gbr', sha256='68044ba4c1d4c8579e6d882e295729759f6df5b4906eae925071c5237bc5d71c')
  GerberFile(source='carte_test-B_Silkscreen.gbr', sha256='7b64d8e6630afdef5c7bbb39073150d38f822daeb744030ca28f02e37d725e2f')
  GerberFile(source='carte_test-Edge_Cuts.gbr', sha256='4a6960843955afe271580adb763eae8696251b8c68a295c66af333ad33749a0f')

Here is image generated by code above:

render_project

As you can see, during conversion copper, soldermask, legend and profile (edge cuts) files corresponding to top part of PCB were recognized. Be aware that MaterialStackup field is currently not taken into account while converting GerberJobFile to Project, so no information about materials or colors is retained.

PCB design disclaimer

Gerber files carte_test-* were generated from KiCad demo project test_xil_95108.

LICENSE.README in KiCad repository states:

Licensed under CC BY-SA 4.0:

  • All the demo files provided in demos/*