exec("pdftk.exe 2>&1", $output, $retval);
問題点:stderrとstdoutの区別が付かなくなってしまいます。エラー表示(stderr)なのか、情報(stdout)なのか。
proc_openを使うと、個別に対応可能ですが、手間です。
成功・失敗だけを見たいのであれば、$retvalを見れば十分な場合も多いです。
良識的なコマンドラインツールは、次のような$retvalを返すように考えられ作られています。
0 = 成功
0 以外 = 失敗 (正だけではなく、負の場合も有るので注意が必要。アクセス違反を意味する 0xC0000005 つまり -1073741819 等。)
そういう場合ではstderrをstdoutに結合する方法も有効と思います。