Black Border Around Negative PDF Plot

I’ve been using Eagle and am trying out KiCad. The issue I am concerned about is presented in the two posts I’ve provided links to, below. I etch my own PCBs and have found that, when making the negative mask for exposing the photoresist on my boards, a wide black boarder at the top will deplete the laser printer’s ink and the quality of the remaining mask is diminished. Is there any solution for shrinking or eliminating the border? I see AlexKern seemed to have demonstrated a solution in “negative-plot-isnt-negative-copy-of-positive”, but am not in a position to reproduce his results. Any suggestions would be appreciated.

Hello and welcome @jlhavens

I think you are going to be stuck with having to fill your PCB surround with Filled Graphic Rectangles or Polygons that have been placed on the same layer as your tracks so only your PCB will have ink.

Note: I left some unfilled edge on left and right as well as making the RH rectangle too small. This was for clarity of my suggestion.

ksnip_20230304-155640

I wonder why you want to use .PDF format for manufacturing output.
If you use .SVG, then your artwork can be post processed quite easily with a decent vector graphics program.

1 Like

Thanks. I’ll give it a try. I’m not clear on how the outside edge of the boarder is determined, but I’ll give it a try and see if I can figure it out.

I’m not tied PDF. I’ll see how the post processing goes. Thanks for the suggestion.

ksnip_20230305-113636

The red arrow will give you the sheet size selection and the green arrow shows:
Pink - The drawing sheet border.
Grey - The actual size of the sheet of paper.
Blue - Part of an unfilled graphic rectangle I created on the bottom copper layer that, when filled, will make the PCB surround clear or white when negative plot is used.

To fill the graphic rectangle, double left click anywhere on the border and select fill option on the newly showing window.

You can preview the plot, before printing, to check your results, by double clicking the file created by the plot function. If you do not fill in the Output Directory in the Plot window, Kicad will automatically place the plot file with all the other files pertaining to this project, wherever that is in Windows.

I very much appreciate you taking the time to provide addition details, Thanks.

I could not get the desired outcome with a single filled rectangle around the entire sheet, as the traces were covered and only the pads showed on a printout. If I make four filled rectangles, though, each one closely adjacent to one edge of the PCB and going out beyond the edge of the sheet, then I can eliminate the boarder around my negative image.

Is there a way to simplify this and make a single filled rectangle, but designate the PCB as a keep-out area?

Again, Thank-you very much for your help.

The first image I posted was a modified version (I thought for clarity) of what you did. The top and bottom rectangles overlapped the edge of the paper top and bottom, but didn’t quite reach the edge of the paper to the left and right. The left rectangle overlapped the top and bottom but again not the left edge of the paper. The RH rectangle didn’t quite overlap anything.

It can be done, but I think it is debatable as to which is more effort.

Add a rule area (keep out) by selecting 8th icon down RHS.
In the opened box tick your copper layer, give it a name (anything), for Basic Rules only tick “keep out copper fill”.
Then draw the keep out area around your PCB.

Next, make sure you have your copper layer selected in the Appearance Manager on the RH side (otherwise wrong “Zone Properties” box will open).
Then, select “Add a filled zone” (above the keep-out icon).
Left click outside a corner of the sheet of paper. The zone properties box will open. Tick your copper layer, highlight “no net”, select “solid fill” in fill type, then click OK.
Move your mouse around the paper sheet, clicking at each corner 'till rectangle is complete.

Right click on zone border, select Zone from drop down menu, select “fill all zones” or use hotkey B.

Job done! :smiley:

“The first image I posted was a modified version (I thought for clarity) of what you did. …”

When I looked at your image, it was just too far out of my experience to think that you were making filled rectangles that went entirely off the page. I assumed that the image was just zoomed in far enough that the page borders didn’t show. Looking back it seems more obvious, now.

After your second response I spent quite a while making a single rectangle around the whole page, thinking that’s what your were illustrating. As you can probably guess, that didn’t work out too well for me. Only after a composed a reply did it dawn on me that your two responses were not independent solutions, but the second meant to supplement the first. When you don’t have much experience with an application, you can easily go off the rails.

I tried the keep-out zone method and couldn’t get that to work in a way that was useful to me. I do appreciate your very precise instructions. I think that I did get the expected result, but I have a ground fill on my PCB (and generally do for all the boards I make), so when I made the keep-out around the board, it disappeared. Edge cuts interfered with the results, too, although for my purposes they don’t have much use anyway.

I again want to thank you again for your help. I know it is time consuming to field questions and generate the high quality responses you’ve provided. Thanks. I think I will use the filled-rectagle method for now. After going to the trouble of designing a PCB, adding a few rectangles isn’t such a big deal.

1 Like

After trying a few other options, I think the easiest way to do this is to remove the edge cuts; Make a large filled zone (no net) that covers the whole sheet; Select the newly made fill, go to Zones/add zone cutout, and draw a cutout around the PCB.

1 Like

In my earlier post about filling with a zone around a keep out, I’d forgotten about zones already on the board. :frowning_face:

I like your method. :+1:

Instead of removing the graphics from Edge.Cuts, you can also move it to a user layer to disable it. This both keeps it as a visual reference, and it’s easy to put it back on Edge.Cuts if your manufacturing method changes.

I wrote a script to do what I wanted to do. It works for me in Kicad Version 7. Use at your own risk. I have found that Kicad crashes fairly frequently when I am developing python scripts–maybe its just me.


import pcbnew
board = pcbnew.GetBoard()

draw = board.GetDrawings()
EdgeCuts = False
for d in draw:
    if (d.GetLayerName()=='Edge.Cuts'):
        EdgeCuts = True

#zones for top and bottom layer
zone = pcbnew.ZONE(board)
zone2 = pcbnew.ZONE(board)

#define outside of PCB
boardbbox = board.ComputeBoundingBox()
boardxl = boardbbox.GetX()
boardyl = boardbbox.GetY()
boardwidth = boardbbox.GetWidth()
boardheight = boardbbox.GetHeight()

Space = 500000
if(EdgeCuts):
    Space = 0
    for d in draw: 
        if (d.GetLayerName()=='Edge.Cuts'):
            board.Delete(d)

#draw edge cuts on user layer for later reference           
BndBx = pcbnew.PCB_SHAPE(board)
BndBx.SetShape(pcbnew.SHAPE_T_RECT)
BndBx.SetStartX(boardxl - Space)
BndBx.SetStartY(boardyl - Space)
BndBx.SetEndX(boardxl+boardwidth +  Space)
BndBx.SetEndY(boardyl+boardheight +  Space)
BndBx.SetFilled(False)
BndBx.SetLayer(pcbnew.User_1)
BndBx.SetWidth(200000)
board.Add(BndBx)

#outline of zone covering whole sheet
points =(pcbnew.VECTOR2I(0,0),pcbnew.VECTOR2I(0,211000000),pcbnew.VECTOR2I(298000000,211000000),pcbnew.VECTOR2I(298000000,0))
for c in points: 
    zone.AppendCorner(c, -1)
    zone2.AppendCorner(c, -1)
#outline of hole
points2 =(pcbnew.VECTOR2I(boardxl-(500000+Space),boardyl-(500000+Space)),pcbnew.VECTOR2I(boardxl-(500000+Space),boardyl+boardheight+(500000+Space)),pcbnew.VECTOR2I(boardxl+boardwidth+(500000+Space),boardyl+boardheight+(500000+Space)),pcbnew.VECTOR2I(boardxl+boardwidth+(500000+Space),boardyl-(500000+Space)))

zone.NewHole()
zone2.NewHole()
for c in points2: 
    zone.AppendCorner(c, 0)
    zone2.AppendCorner(c, 0)

#add tot he board
zone.SetLayer(pcbnew.F_Cu)
board.Add(zone)

zone2.SetLayer(pcbnew.B_Cu)
board.Add(zone2)

filler = pcbnew.ZONE_FILLER(board)
filler.Fill(board.Zones())
pcbnew.Refresh()

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.