No es el problema que sea hidden pero para que vas a capturar un dato que tu mismo has puesto?? Envíalo directamente a la función:
Código PHP:
echo '
<script type="text/javascript">
//<![CDATA[
function imprimir(valor)
{
window.open("ruta.php?variable="+valor);
}
//]]>
</script>
';
echo '
<a href="#" onClick="imprimir(2)">Abrir ventana</a>
';