I have recently had to come up with a way to programmatically add a Web Part to a large number of existing publishing pages. It took me a little while to find the exact way to do it, so I thought I would post the source code here.

Attached is the C# code that will iterate over a bunch of pages in a bunch of sites, and then add a doclib Web Part on all those pages, in a specific Web Part Zone. The meat of the code is this:

SPSite mySiteCollection = new SPSite("http://sharepoint");
SPWeb w = mySiteCollection.AllWebs["/whatever"];
SPFile f = w.GetFile("Pages/Page.aspx");
SPLimitedWebPartManager wpm = f.GetLimitedWebPartManager(PersonalizationScope.Shared);
SPList l = w.Lists["Documents"];
ListViewWebPart wp = new ListViewWebPart();
wp.ListName = l.ID.ToString("B").ToUpper();
wp.ViewGuid = l.DefaultView.ID.ToString("B").ToUpper();
wpm.AddWebPart(wp, "Zone 1", 1);
f.Publish("Added Web Part");
f.Approve("Web Part addition approved");

This bit of code uses an SPLimitedWebPartManager to add the ListViewWebPart to the "Zone 1" Web Part Zone. The page is then published and approved.