APD Toronto
asked on
TCPDF: Opening Resulting PDF in Separate Tab or Window
Hi Experts,
I am using TCPDF with PHP in order to generate a report in PDF. After the generation, On my end the PDF open in a separate window in Adobe Reader, however on my client's computers it open on the same tab, then when they click back of course they get "page expired".
Is there any way I can force this to open either in another browser window or browser tab?
Thank you
I am using TCPDF with PHP in order to generate a report in PDF. After the generation, On my end the PDF open in a separate window in Adobe Reader, however on my client's computers it open on the same tab, then when they click back of course they get "page expired".
Is there any way I can force this to open either in another browser window or browser tab?
Thank you
ASKER
Here is my code. I think I need to add something in my final 2 lines...
//Get Location List & Count
$sort_by = ($sort_by == 'N' ? 'name' : 'default_time');
$locs = self::get_location_list($archived, FALSE, 1, FALSE, $sort_by, TRUE);
$loc_count = self::get_loc_count_for_pdf($archived, FALSE);
if ($archived == TRUE){
$sub_title ='Archived List';
} else {
$sub_title ='Active List';
}
//Connect to TCPDF
//Temporarily Change directory to TCPDF to load files...
$currentDIR = getcwd();
chdir("../../tcpdf/examples");
require_once('tcpdf_include.php');
//Change DIR back
chdir($currentDIR);
//Setup PDF File
$pdf = new TCPDF('P', 'mm', array(215.9, 279.4));
$pdf->SetTitle($sub_title . ' of Locations');
$pdf->SetMargins(5, 5);
$pdf->SetAutoPageBreak(TRUE);
$pdf->setPrintHeader(FALSE);
$pdf->SetFont('Helvetica', '', 8);
$pdf->AddPage();
//Setup Title on p.1
$html = '<table cellpadding="5px" width="100%">';
$html .= '<tr> <td><font size="+5"><b> Location Listing </font><br>'
. $sub_title . '</b></td> </tr> </table><br><br>';
$pdf->writeHTML($html);
//Data Container
$page_current = 0;
$page_next = 1;
$locs_processed = 0;
foreach ($locs as $loc){
//Insert column headers @ top of pafe
if ($page_current != $page_next){
$html = '<table cellpadding="5px" width="100%">';
$html .='<tr> '
. '<td align="center" width="25%"> <b> Location </b></td>'
. '<td align="center" width="10%"> <b> Code </b></td>'
. '<td align="center" width="15%"> <b> Phone </b></td>'
. '<td align="center" width="10%"> <b> Default P/U <br>Time </b></td>'
. '<td align="center" width="10%"> <b> Default P/U <br>Veh </b></td>'
. '<td align="center" width="30%"> <b> Address </b></td>'
. '</tr>';
$page_current++;
$alt = 1;
$count = 0;
$locs_remaining = $loc_count - $locs_processed;
//Define rows per page
$max_rows = ($page_current == 1 ? 31 : 34);
$max_rows = ($max_rows >= $locs_remaining ? $locs_remaining : $max_rows);
}
if($alt == 1){
$bg = '#FFFFFF';
} else {
$bg = '#C0C0C0';
}
$count++;
$locs_processed++;
$time = substr($loc['default_time'], 0, 5);
$html .= '<tr>
<td bgcolor="' . $bg .'">' . $loc['name'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['code'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['phone'] . '</td>
<td bgcolor="' . $bg .'">' . $time . '</td>
<td bgcolor="' . $bg .'">' . $loc['default_vehicle'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['address'] . '</td>';
$html .= '</tr>';
$alt = $alt*(-1);
if ($count == $max_rows){
$html .= '</table>';
$pdf->writeHTML($html);
//Position Footer at 7 mm from bottom
$pdf->SetY(-9);
$pdf->SetX(10);
$today = new DateTime('today');
$today_f = $today->format('F d, Y');
$pdf->Cell(0, 0, $today_f, 0, 0, 'left');
$page = 'Page ' . $pdf->getAliasNumPage() . ' of ' . $pdf->getAliasNbPages();
$pdf->setX(-30);
$pdf->Cell(0, 0, $page, 0, 0, 'right');
$page_next++;
if ($locs_processed != $loc_count) $pdf->AddPage();
}
$alt++;
}
//Generate File
$file = 'LocationList.pdf';
$pdf->Output($file);
http://iconoun.com/demo/temp_apd_toronto.php
We seem to be missing parts of the application. When I run it I get this:
Notice: Undefined variable: sort_by in /home/iconoun/public_html/ demo/temp_ apd_toront o.php on line 9
Fatal error: Cannot access self:: when no class scope is active in /home/iconoun/public_html/ demo/temp_ apd_toront o.php on line 11
I basically just copied and pasted the script. Can you please furnish the missing parts, or a mockup of them? Thanks.
We seem to be missing parts of the application. When I run it I get this:
Notice: Undefined variable: sort_by in /home/iconoun/public_html/
Fatal error: Cannot access self:: when no class scope is active in /home/iconoun/public_html/
I basically just copied and pasted the script. Can you please furnish the missing parts, or a mockup of them? Thanks.
<?php // demo/temp_apd_toronto.php
/**
* See http://www.experts-exchange.com/Programming/Languages/Scripting/PHP/Q_28649357.html
*/
error_reporting(E_ALL);
//Get Location List & Count
$sort_by = ($sort_by == 'N' ? 'name' : 'default_time');
$locs = self::get_location_list($archived, FALSE, 1, FALSE, $sort_by, TRUE);
$loc_count = self::get_loc_count_for_pdf($archived, FALSE);
if ($archived == TRUE){
$sub_title ='Archived List';
} else {
$sub_title ='Active List';
}
//Connect to TCPDF
//Temporarily Change directory to TCPDF to load files...
$currentDIR = getcwd();
chdir("../../tcpdf/examples");
require_once('tcpdf_include.php');
//Change DIR back
chdir($currentDIR);
//Setup PDF File
$pdf = new TCPDF('P', 'mm', array(215.9, 279.4));
$pdf->SetTitle($sub_title . ' of Locations');
$pdf->SetMargins(5, 5);
$pdf->SetAutoPageBreak(TRUE);
$pdf->setPrintHeader(FALSE);
$pdf->SetFont('Helvetica', '', 8);
$pdf->AddPage();
//Setup Title on p.1
$html = '<table cellpadding="5px" width="100%">';
$html .= '<tr> <td><font size="+5"><b> Location Listing </font><br>'
. $sub_title . '</b></td> </tr> </table><br><br>';
$pdf->writeHTML($html);
//Data Container
$page_current = 0;
$page_next = 1;
$locs_processed = 0;
foreach ($locs as $loc){
//Insert column headers @ top of pafe
if ($page_current != $page_next){
$html = '<table cellpadding="5px" width="100%">';
$html .='<tr> '
. '<td align="center" width="25%"> <b> Location </b></td>'
. '<td align="center" width="10%"> <b> Code </b></td>'
. '<td align="center" width="15%"> <b> Phone </b></td>'
. '<td align="center" width="10%"> <b> Default P/U <br>Time </b></td>'
. '<td align="center" width="10%"> <b> Default P/U <br>Veh </b></td>'
. '<td align="center" width="30%"> <b> Address </b></td>'
. '</tr>';
$page_current++;
$alt = 1;
$count = 0;
$locs_remaining = $loc_count - $locs_processed;
//Define rows per page
$max_rows = ($page_current == 1 ? 31 : 34);
$max_rows = ($max_rows >= $locs_remaining ? $locs_remaining : $max_rows);
}
if($alt == 1){
$bg = '#FFFFFF';
} else {
$bg = '#C0C0C0';
}
$count++;
$locs_processed++;
$time = substr($loc['default_time'], 0, 5);
$html .= '<tr>
<td bgcolor="' . $bg .'">' . $loc['name'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['code'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['phone'] . '</td>
<td bgcolor="' . $bg .'">' . $time . '</td>
<td bgcolor="' . $bg .'">' . $loc['default_vehicle'] . '</td>
<td bgcolor="' . $bg .'">' . $loc['address'] . '</td>';
$html .= '</tr>';
$alt = $alt*(-1);
if ($count == $max_rows){
$html .= '</table>';
$pdf->writeHTML($html);
//Position Footer at 7 mm from bottom
$pdf->SetY(-9);
$pdf->SetX(10);
$today = new DateTime('today');
$today_f = $today->format('F d, Y');
$pdf->Cell(0, 0, $today_f, 0, 0, 'left');
$page = 'Page ' . $pdf->getAliasNumPage() . ' of ' . $pdf->getAliasNbPages();
$pdf->setX(-30);
$pdf->Cell(0, 0, $page, 0, 0, 'right');
$page_next++;
if ($locs_processed != $loc_count) $pdf->AddPage();
}
$alt++;
}
//Generate File
$file = 'LocationList.pdf';
$pdf->Output($file);
Here's my standard "teaching sample" showing many of the basic moving parts. It produces a clickable link that opens in another browser window.
http://iconoun.com/demo/tcpdf_example.php
http://iconoun.com/demo/tcpdf_example.php
<?php // demo/tcpdf_example.php
/**
* Demonstrate how to put an image into a TCPDF document
* and write some text over part of the image
*
* See http://www.tcpdf.org/doc/code/annotated.html
*/
error_reporting(E_ALL);
// A DATE SETTING MAY BE REQUIRED - DEPENDS ON PHP INSTALLATION SETTINGS
date_default_timezone_set('America/Chicago');
// SYNTHESIZE THE PDF FILE URL AND FILE NAME
$pdf_file_link = 'storage/tcpdf_example.pdf';
$pdf_file_name = getcwd() . DIRECTORY_SEPARATOR . $pdf_file_link;
// LOAD THE TCPDF CLASS AND CONFIGURATION
require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');
// EXTEND THE TCPDF OBJECT SO WE CAN SUBSTITUTE OUR OWN METHODS
class PDF extends TCPDF
{
// NULLIFY AUTOMATIC HEADER AND FOOTER
public function Header() {}
public function Footer() {}
}
// INSTANTIATE THE OBJECT
$pdf = new PDF('P', 'mm', 'LETTER', true, 'UTF-8', false);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(0,0,0,TRUE);
$pdf->SetAutoPageBreak(FALSE);
$pdf->setLanguageArray($l);
$pdf->SetFont('times', '', 13);
$pdf->setCellPaddings(0,0,0,0);
$pdf->setCellMargins(0,0,0,0);
// DO NOT DO THIS
// $pdf->setFillColor(255,255,224);
// APPLY CELL BORDERS, IF NEEDED
$bdr = '1TRBL';
// BUT IF NO CELL BORDER IS NEEDED
$bdr = 0;
// ADD A PAGE
$pdf->AddPage('P', 'LETTER', TRUE);
// ADD AN IMAGE
$img = 'images/ray_padded.png';
// I HAVE NO IDEA WHAT THIS IS DOING TO IMAGE SCALE - EXPERIMENT WITH IT
$pdf->setImageScale(1.53);
// GET THE IMAGE SETTINGS
$pdf->Image
( $img
, 0 // $x
, 0 // $y
, 0 // WIDTH
, 0 // HEIGHT
, 'PNG' // TYPE
, '#' // LINK URL
, 'T' // SET POINTER TOP LEFT
, FALSE // NO RESIZING
, 300 // DPI
, 'L' // PALIGN
, FALSE // ISMASK
, FALSE // IMGMASK
, 0 // BORDER
, FALSE // FIT TO BOX
, FALSE // HIDDEN
, FALSE // FIT ON PAGE
)
;
// ADD SOME TEXT ON TOP OF THE IMAGE
$pdf->Text
( 24 // $x,
, 24 // $y,
, 'This is Ray'
, FALSE // $fstroke = false,
, FALSE // $fclip = false,
, TRUE // $ffill = true,
, $bdr // $border = whatever,
, 2 // $ln = 0, 2=PUT CURSOR BELOW
, '' // $align = '', DEFAULT LEFT
, FALSE // $fill = false, CELL BACKGROUND
, '' // $link = '', NOT A LINK
, 0 // $stretch = 0, NO TEXT STRETCH
, FALSE // $ignore_min_height = false,
, 'A' // $calign = 'T', A=FONT TOP INSIDE CELL
, 'T' // $valign = 'M', T=VERTICAL ALIGN INSIDE CELL
, TRUE // $rtloff = false TRUE = USE PAGE TOP LEFT CORNER TO ALIGN
)
;
// WRITE THE PDF FILE TO THE SERVER
$pdf->Output($pdf_file_name, 'F');
// PRESENT A CLICKABLE LINK SO WE CAN D/L AND PRINT THE PDF
echo '<a target="my_PDF" href="' . $pdf_file_link . '"><strong>Print the PDF</strong></a>';
ASKER
Hi Ray,
I did give this some thought, and I am calling my above script via a submit form, so I can just add a target to it, like in your example.
However, in your example you have a target of "my_pdf", but I thought valid values were "_blank" ?
Thank you
I did give this some thought, and I am calling my above script via a submit form, so I can just add a target to it, like in your example.
However, in your example you have a target of "my_pdf", but I thought valid values were "_blank" ?
Thank you
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If you have any questions or need help with it, please post a link to the "create PDF" script and I'll show you a way to move forward.