You are right, this is needlessly complicated. Unfortunately there is no really good solution for this. The problem is that any robust solution really has to work regardless of situation. The problem is that an artboard is not the same thing as a page, its more general. See what do you do when several artboards overlap each other and you want to only rotate some of the pages with content? Also artboards aren't normal objects they can not exist in arbitrary orientation.
Personally, if i ever would be in a position where i would need to do a lot of this. Then I would do what @Scott, hints in his last paragraph. Because its the most general possible solution. However i would instrument that a bit. I would make a script that would auto generate the bounds in a layer called artboards. Then i would make a script that would update the artboards after manipulation. THis would make it possible for me to use all the tools in my arsenal to edit the layout as a please, and remove the pain of updating stuff.
Ideally it would be a plugin, but the support costs are so high that i would need to be actually employed by your org to support it.
So how would this work?
Lets try to flesh out a preparation script. In essence we want to draw a invisible rectangle for each artboard (and because we want to be neat lets put them on a saparate layer).
#target illustrator
function ab_to_path(parent, ab) {
try {
pth = parent.pathItems.getByName(ab.name);
pth.remove();
} catch (err) {
}
finally {
rect = ab.artboardRect;
pth = parent.pathItems.rectangle(rect[1], rect[0],
rect[2] - rect[0], rect[1] - rect[3]);
pth.name = ab.name;
pth.stroked = false;
pth.filled = false;
return pth;
}
}
function find_or_create_layer(parent, name) {
try {
layer = parent.layers.getByName(name);
} catch (err) {
layer = parent.layers.add();
layer.name = name;
layer.zOrder( ZOrderMethod.SENDTOBACK );
}
finally {
return layer;
}
}
function artboards_to_rectangles( doc ){
layer = find_or_create_layer(doc, "ArtboardProxy");
boards = doc.artboards;
for (i = boards.length-1; i >= 0; i--){
ab_to_path( layer, boards[i]);
}
}
artboards_to_rectangles(app.activeDocument);
OK now you can just select the parts you want. Then rotate and move and even scale the corners as you want. Remeber a artboard can not be slaned so dont try to do that.
And finally we need to script to clean up and update artboards:
function find_or_create_ab(doc, name) {
try {
ab = doc.artboards.getByName(name);
} catch (err) {
ab = doc.artboards.add([0, 0, 10, -10]);
ab.name =name;
}
finally {
return ab;
}
}
function path_to_ab(doc, rect) {
bb = rect.geometricBounds;
ab = find_or_create_ab(doc, rect.name)
ab.artboardRect = bb;
}
function rectangles_to_artboards( doc ){
layer = find_or_create_layer(doc, "ArtboardProxy");
rect = doc.pathItems;
for (i = 0; i < rect.length; i++){
path_to_ab(doc, rect[i]);
}
}
rectangles_to_artboards(app.activeDocument);
And thats about best we can do without using the api. OK so you could make a gui that opens a window with a button done that waits for cleanup