Ok, problem found.
You cannot delete products from your store, otherwise the invoice plugin will try to fetch a nonexistent product ID. And in the code, it doesn't actually check for failure.
Line 139 in class-wcdn-print.php:
$product = $this->order->get_product_from_item( $item );
And after, there's no check for failure. $product is coming up empty since it's been deleted from WooCommerce.
This whole approach is flawed, though, because the order details in Woo will always show the product names and prices, long after the products are deleted. And this plugin is only fetching the name and prices, so why look up the product in Woo? It should just use the details in the $item array to populate the printout. $item already contains everything necessary, as far as I know.