Probably because you named the variable $data instead of $card, whereas it was named $card where you said it was working (without rendering the pdf)
$pdf = PDF::loadView('print.print',array('card' =>$card)); // name the variable card
You'll also need to retrieve $card from the db like you do in your first code snippet, in order to pass it to the view.
public function print_pdf()
{
$card = Card::all(); // you're not passing an $id to print_pdf() like you are the show() method
$pdf = PDF::loadView('print.print', ['card' => $card]);
return $pdf->download('card.pdf');
}