Makeshift pilot holes:
If you have to drill pads and vias without pilot holes, use a thumb-tack or other sharp tool to make an indentation as close to the center as you are able. (How I deal with poorly etched pilot holes!)
FreePCB (Windows-only open source program) generates gerber files with pilot holes in the copper layers corresponding to the drill holes through vias and pads. The pilot holes are optional: you can enable them with a checkbox in the CAM file generation dialog.
In the same dialog, there is an input box where you can specify the pilot hole diameter. A separate command line utility called GerberRender, distributed with FreePCB, is used for generating raster images.
DIY Pilots via Image Manipulation
If I had to use PCB software that doesn't generate pilot holes, here is what I would do: I would set the through-hole size on all my parts to have the pilot hole diameter, about 10 to 15 mils. (Since I would be making the PCB myself, I wouldn't care that the holes are wrong; however, this would have to be fixed, obviously, if the PCB is later sent out to fab.) Then I would use the image generated from the drill file as a mask to create the pilot holes in the copper layer(s), using an image-processing program such as GIMP.
Suppose you have a pair of black and white images at identical pixel dimensions, one depicting a copper layer and the other drill holes, with the holes and copper being in black, over a white background. Here is how you can use GIMP to render the holes into the copper.
- Load the copper layer image and the drill file image as two layers by using GIMP's "Open as Layers" command in the File menu, which allows multiple images to be selected and loaded as the layers of a single GIMP image.
- Ensure that the drill layer is the top one of the two, moving it up using the green arrow buttons in the Layers dialog.
- Ensure you're switched to the drill layer by clicking on it in the Layers dialog.
- Invert the layer to create a negative. This is done in the Colors menu with the Invert command. Now the holes are white, on a black background.
In the Layer dialog, change the drill layer's Mode to "Lighten only".
At this point, you see both layers, with the white regions of the
drill layer creating white holes in the copper layer.
- Do a "Merge visible layers" in the layer dialog's context menu, or, equivalently, "Merge layer down" on the drill layer.
- Do an "Export to ..." to save the resulting image as your copper-with-pilots layer.
There is probably a way to script all this from the command line via the ImageMagick utility.
A more ambitious project would be to write an image processing tool or plugin which can scan through a regular drill layer image (with holes having various diameters), identify all the holes and generate a new image in which they are all replaced by holes having a fixed, smaller diameter. Such a filter would make it unnecessary to switch to custom footprints in the part library in order to get properly sized pilot holes.