这是你可以处理它的方式,尽管意见可能会有所不同。构建框架将有点复杂,使其美观完全是另一项任务。
我会在您提交表单时运行AJAX查询,让它更性感。AJAX脚本从页面上的框中收集所有数据,调用后端,然后呈现整个页面上可见的“结果:”框,并将生成的HTML插入该框中。基本上,这就是流畅的搜索结果的工作原理。
结果框中有一个创建PDF的按钮。Java正在监视该按钮,该按钮所具有的是一个数据属性,该属性可能与结果框中的HTML非常相似。当您将HTML插入结果框时,您已经同时插入了该HTML。因此,现在Java可以将该数据属性发送到PDF编写器,而无需再次访问后端。这将成为您要求的“干净屏幕”,但您可以下载或通过电子邮件发送更好的信息
下面是一个示例java函数,它创建一个表单,向表单附加一个对象,然后提交表单。您可以将其提交到“PDF Writer”脚本。您使用所有要提交的数据填充提交给此函数的对象(obj)——可能只是html,但可能性是无限的。
function submitACP(obj){
// form submission to ACP with current vars
var scheduleForm = document.createElement("form");
scheduleForm.id = "transmission_form";
scheduleForm.target = "_self";
scheduleForm.method = "post"; // or "POST" if appropriate
scheduleForm.enctype = "multipart/form-data";
if (isset(obj.clientID) && obj.clientID > 0) {
scheduleForm.action = \'https://\'+$(location).attr(\'host\')+\'/create-pdf/\';
} else {
scheduleForm.action = \'https://\'+$(location).attr(\'host\')+\'/client-selector/\'; // need a client id
}
var transmissionData = encodeURIComponent(JSON.stringify(obj));
console.log(\'data stringified:\'+transmissionData);
var transmission_object = document.createElement("input");
transmission_object.type = "text";
transmission_object.name = "client_object";
transmission_object.value = transmissionData;
scheduleForm.appendChild(transmission_object);
document.body.appendChild(scheduleForm);
$(\'#transmission_form\').submit();
}
对于PDF编写器,我使用TCPDF。要想把它做好,需要大量的尝试和错误,但它是可靠的。您要做的第一件事是启动输出缓冲,以防止任何东西破坏PDF。然后运行逻辑,将所需内容捕获到字符串变量中。停止缓冲,然后需要TCPDF目录并调用它:
ob_start();
set_time_limit(30);
$path = $_SERVER[\'DOCUMENT_ROOT\'];
//define( \'SHORTINIT\', true );
require( $path.\'/wp-load.php\' );
$data_array = json_decode(stripslashes(urldecode($_POST[\'client_object\'] )), true );
if (! wp_verify_nonce($data_array[\'nonce\'], \'pdf_nonce\')) {
die(\'sorry, charlie.\');
}
$doc_label = wp_kses($data_array[\'client_name\']);
echo wp_kses($data_array[\'html\']);
// Include the main TCPDF library (search for installation path).
require __DIR__ . \'/vendor/tcpdf/config/tcpdf_config.php\';
require __DIR__ . \'/vendor/tcpdf/tcpdf.php\';
// create new PDF document
ob_end_clean();
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, \'UTF-8\', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor(\'Sales Robot\');
$pdf->SetTitle($doc_label);
$pdf->SetSubject(\'Hardcopy Schedule\');
//$pdf->SetKeywords(\'TCPDF, PDF, example, test, guide\');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, \'\', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, \'\', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).\'/lang/eng.php\')) {
require_once(dirname(__FILE__).\'/lang/eng.php\');
$pdf->setLanguageArray($l);
}
// ---------------------------------------------------------
// set font
$pdf->SetFont(\'helvetica\', \'B\', 20);
// add a page
$pdf->AddPage();
//$pdf->Write(0, \'Example of HTML tables\', \'\', 0, \'L\', true, 0, false, false, 0);
$pdf->SetFont(\'helvetica\', \'\', 12);
$pdf->writeHTML($hc_html, true, false, false, false, \'\');
$doc_label .= \'.pdf\';
//Close and output PDF document
$pdf->Output($doc_label, \'I\');
//============================================================+
// END OF FILE
//============================================================+
die();
?>
就像我说的,你可以从多个方向来看这个问题。如果您对java和AJAX没有掌握,您可以将表单提交到PDF writer页面,在启动输出缓冲区之后!,在表单变量上运行逻辑,输出到变量,然后在调用PDF writer时使用该变量。