Here's a code blurb I used to use that may give you ideas.
If[Head[xxx`g] == Graphics,
printcell[file, PrintingOptions -> {printopts},
PageHeaderLines -> {False, False}]];
(i wanted to print a graphic cell print because it "printed better". the above says if the previous output of the last cell was Graphics, then use printcell to print it). I have omitted "printopts" which are just print settings specific for that task.
printcell[file_String, nbopts___] :=
Module[{nb, nbsel, newnb, cell, v, xxx},
nb =.; newnb =.; nbsel =.;
nb = EvaluationNotebook[];
SelectionMove[nb, Previous, EvaluationCell, AutoScroll -> False];
SelectionMove[nb, Previous, Cell, AutoScroll -> False];
SelectionMove[nb, All, TextParagraph, AutoScroll -> False];
cell = NotebookRead[nb];
newnb =.;
newnb = NotebookCreate[Visible -> False];
SelectionMove[newnb, All, Notebook, AutoScroll -> False];
(*
bug if opts not defined short circuits most tests
*)
If[Length[{nbopts}] =!= 0,
(*SetOptions[EvaluationNotebook[],nbopts];*)
SetOptions[newnb, nbopts];
];
NotebookWrite[newnb, cell];
NotebookPrint[newnb, file];
SelectionMove[newnb, All, Notebook, AutoScroll -> False];
nbsel = NotebookSelection[newnb];
v = Options[newnb];
NotebookClose[newnb];
nb =.; newnb =.; nbsel =.;
v
];