Introduction
The gravityflowpdf_content filter is used to modify the contents the PDF Generator add-on defines via the step settings template before generating the PDF.
Parameters
Parameter | Type | Definition |
---|---|---|
$body | Array | The markup the template from step settings produced with current entry values. |
$file_path | Array | Where the PDF will be generated upon successful completion of the step. |
$entry | Array | The current entry array. |
$step | Step | The current step. |
Examples
Add a custom heading above the PDF template content
add_filter( 'gravityflowpdf_content', 'sh_pdf_content_modify', 10, 4 );
function sh_pdf_content_modify( $body, $file_path, $entry, $step ) {
$body = '<h1>Inserting a custom title before template content</h1>' . $body;
return $body;
}
Prevent the {all_fields} merge tag from shrinking all the text in the table for long tables.
add_filter( 'gravityflowpdf_content', 'sh_pdf_content_modify', 10, 4 );
function sh_pdf_content_modify( $body, $file_path, $entry, $step ) {
$body = str_replace( '<table width="99%" border="0" cellpadding="1" cellspacing="0" bgcolor="#EAEAEA"><tr><td>', '', $body );
$body = str_replace( "</td>\r\n </tr>\r\n </table>", '', $body );
return $body;
return $body;
}
Use error handling and try/catch block for complex custom markup in PDF.
The gravityflowpdf_content filter lets you put whatever you need into the PDF content using basic html markup. Perhaps you have a use case where:
- A single entries’ PDF is a review/aggregate report that needs to display multiple Gravity Charts
- A single entry has a Nested Forms field and wants to display certain fields in a table
- Complex SLA calculations or workflow status comparisons would be using multiple GFAPI::get_entries searches to show a larger business context.
In any of these cases and more, the following example shows how you can ensure that a PHP error during the PDF generation would not cause the entire step to fail. It also lets you decide if/what details are added to the workflow timeline to help admin staff troubleshoot what the root cause was.
add_filter( 'gravityflowpdf_content', array( $this, 'flowpdf_dynamic_program_review_content'), 10, 4 );
function flowpdf_dynamic_program_review_content( $body, $file_path, $current_entry, $current_step ) {
if ( ! in_array( $current_step->get_id(), array( '1000', '1002' ) ) ) {
return $body;
}
$pdf_content = '';
$pdf_generate_errors = [];
// Custom error handler to capture only relevant errors
$custom_error_handler = function ($errno, $errstr, $errfile, $errline) use (&$pdf_generate_errors) {
$pdf_generate_errors[] = sprintf(
'Error: [%d] %s in %s on line %d',
$errno,
$errstr,
$errfile,
$errline
);
return true; // Prevents PHP's default error handler from running
};
set_error_handler( $custom_error_handler );
try {
//Do complex logic here.
//You would obviously check values for as many edge cases to avoid causing failures.
//But the try/catch block ensures if you happen to miss one,
//or entry data is in an unexpected format that causes a PHP failure the step will still proceed.
} catch (Exception $e) {
// Handle exceptions if necessary
$pdf_generate_errors[] = 'Exception: ' . $e->getMessage();
} finally {
// Restore the previous error handler
restore_error_handler();
}
if ( ! empty( $pdf_generate_errors ) ) {
$body = GFCommon::replace_variables( $body, $form, $entry, false, false, false, 'html' );
$body .= '<h2>PDF Generation Errors</h2><p>Please contact IT Support with the following details:</p><pre>' . print_r( $pdf_generate_errors, true ) . '</pre>';
} else {
// Proceed with normal processing
$pdf_content = GFCommon::replace_variables( $pdf_content, $form, $entry, false, false, false, 'html');
$body .= $pdf_content;
}
return $body;
}
Placement
This code can be used in the functions.php file of the active theme, a custom functions plugin, a custom add-on, or with a code snippets plugin.
See also the PHP section in this article: Where Do I Put This Code?