Ahí os va, resuelto :)
Código PHP:
$url = $_POST["url"];
$img = "imagenes/codigo.png";
QRcode::png($url, $img); // Crea y guarda un png con el código QR
// Creo dos imagenes, una es el fondo y la otra el texto que le voy a superponer
$fondo = imagecreatefrompng("imagenes/modelo_tarjeta.png");
$codigo = imagecreatefrompng("imagenes/codigo.png");
imagecopy($fondo, $codigo, 215, 105, 0, 0, 100, 100); //IMPORTANTE: Dependiendo de la URL que pongamos en el QR, el código se hará más grande o más pequeño, por lo que hay que controlar la posición.
imagepng($fondo,"imagenes/resultado.png");
// Ponemos el texto de la imagen
$nombre=$_POST["nombre"];
$apellido1=$_POST["apellido1"];
$apellido2=$_POST["apellido2"];
$empresa=$_POST["empresa"];
$cargo=$_POST["cargo"];
$im = imagecreatefrompng("imagenes/resultado.png");
$font = 'arial.ttf';
$backgroundColor = imagecolorallocate ($im, 255, 255, 255);
$textColor = imagecolorallocate ($im, 0, 0,0);
imagettftext($im, 14, 0, 22, 100, $textColor, $font, $nombre);
imagettftext($im, 14, 0, 22, 120, $textColor, $font, $apellido1);
imagettftext($im, 14, 0, 22, 140, $textColor, $font, $apellido2);
imagettftext($im, 11, 0, 22, 180, $textColor, $font, $cargo);
imagettftext($im, 10, 0, 33, 195, $textColor, $font, $empresa);
unlink("imagenes/codigo.png");
unlink("imagenes/resultado.png");
imagepng($im,"imagenes/tarjeta/tarjeta_".$_POST["dni"].".png");
// Destruimos las imágenes
imagedestroy($fondo);
imagedestroy($codigo);
imagedestroy($im);