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
   ];