Yes, WPViewPDF can do this.
{:: This functions loads data from a stream and return an identifyer for a given page.
First call LoadPDFWatermarkFromStream and for all pages LoadPDFWatermarkStreamGetPage.
Use the result of LoadPDFWatermarkStreamGetPage in
wpviewpdf1.CommandStrEx( COMPDF_ApplyWatermark, '1', id ); // '1' is the page number or the range!
}
function LoadPDFWatermarkFromStream( Stream: TStream; StreamID : Word ): Integer;
function LoadPDFWatermarkStreamGetPage( StreamID : Word; PageNo : Word ): Integer;