get_type()) { $account_type = $accounts[0]->get_type(); } // The decimal separator must be a dot in order to write pdf-files setlocale(LC_NUMERIC, "C"); // Create a new PDF file acording to the account type $pdf = new LamPDF($account_type); // Loop over each account and add a new page in the PDF file for it foreach($accounts as $account) { // Get PDF structure from session $structure = $_SESSION['pdf_structure'][$account_type]; // Start a new page for each account $pdf->AddPage(); // Get PDF entries for the current account $entries = $account->get_pdfEntries($account_type); // Now create the PDF file acording to the structure with the submitted values foreach($structure as $entry) { // We have a new section to start if($entry['tag'] == "SECTION" && $entry['type'] == "open") { $name = $entry['attributes']['NAME']; if(preg_match("/^\_[a-zA-Z\_]+/",$name)) { $section_headline = $entries[$name][0]; } else { $section_headline = '- ' . _($name); } $pdf->setFont("arial","B",12); $pdf->Write(5,$section_headline . ":"); $pdf->Ln(6); } // We have a section to end elseif($entry['tag'] == "SECTION" && $entry['type'] == "close") { $pdf->Ln(9); } // We have to include a static text. elseif($entry['tag'] == "TEXT") { // Decide which individual text to fetch if(isset($entry['attributes']['NAME'])) { $text_name = $entry['attributes']['NAME']; } else { $text_name = "User"; } // Load string with individual text for PDF from session $info_string = $_SESSION['config']->get_pdftext($text_name); // Get all allowed vairables from account-object $values = get_object_vars($account); $values = array_keys($values); // Replace $varstring in string with variable foreach ($values as $value) { // replace string if (is_string($account->$value)) { $info_string = str_replace('$'.$value, $account->$value, $info_string); } // replace object elseif (is_object($account->$value)) { $values2 = get_object_vars($account->$value); $values2 = array_keys($values2); foreach ($values2 as $value2) { $info_string = str_replace('$'.$value.'->'.$value2, $account->$value->$value2, $info_string); } } // replace array elseif (is_array($account->$value)) { foreach ($account->$value as $sub_array2) { $sub_array .= $sub_array2.", "; } $sub_array = substr($sub_array, 0, -2); $info_string = str_replace('$'.$value, $sub_array, $info_string); } } // Split string in array $info_array = explode("\n", $info_string); // Set font for text $pdf->setFont("times","",10); // Print each entry in array (each line in the text) as new line foreach ($info_array as $info) { $pdf->Cell(50,5,$info,0,1,"L",0); } // Print linebreak afterwards $pdf->Ln(6); } // We have to include an entry from the account elseif($entry['tag'] == "ENTRY") { // Get name of current entry $name = $entry['attributes']['NAME']; // Get current entry $value_entry = $entries[$name]; // Print entry only when module sumitted values for it if(is_array($value_entry)) { // Loop over all rows of this entry (most of the time this will be just one) foreach($value_entry as $line) { echo "line: " . $line . "
\n"; // Substitue XML syntax with valid FPDF methods $methods = processLine($line); // Call every method foreach($methods as $method) { call_user_func_array(array(&$pdf,$method[0]),$method[1]); } } } $key = false; } } } // Close PDF $pdf->Close(); // Get relative url path $fullpath = realpath('.'); $subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath)); for ($i=0; $irand . time() .'.pdf'; // Save PDF $pdf->Output($filename); // Output meta refresh to pdf-file //metaRefresh($filename); // Return relative path of pdf-file return $filename; } function getStructure($account_type = array("user","group","host")) { $parser = new xmlParser(); $xml = $parser->parse($_SESSION['lampath'] . '/config/pdf-structure.xml'); // Don't know why this is needed but without the array pointer seems to // be at the last element and therefor the while loop fails. reset($account_type); $border = array(); $structure = array(); while(($current = current($account_type)) != null) { $pdf_entries = $xml[1]['PDF']; $border[$current] = array(); while(($index = current($pdf_entries)) != null) { if($xml[0][$index]['attributes']['TYPE'] == $current) { $border[$current]['start'] = $index; next($pdf_entries); $border[$current]['end'] = current($pdf_entries); } next($pdf_entries); } $structure[$current] = array_slice($xml[0],$border[$current]['start'] + 1,$border[$current]['end'] - ($border[$current]['start'] + 1)); next($account_type); } return $structure; } function processLine($line,$first_td = true) { global $key, $line_width; // PCRE matching tag $block_pattern = '/<\/block>/'; // PCRE matching a tag $key_pattern = '/()(.+)<\/key>(.*<\/block>)/'; // PCRE matching a tag // !!FIXME!! value must contain at least one character $value_pattern = '/(.*)(.*)<\/value>(<\/block>)/'; // PCRE matching a tag $td_pattern = '/(.*?)(.+?)<\/td>(.*<\/block>)/'; // PCRE matching a

tag $p_pattern = '/(.*)

(.+)<\/p>(.*<\/block>)/'; // PCRE matching a
tag $br_pattern = '/
/'; $return = array(); if(preg_match($key_pattern,$line,$matches)) { $key = true; $line_width = $line_width - 50; $format = processFormatTags($matches[2],'B'); $return[] = array('setFont',array('times',$format[0],10)); $return[] = array('Cell',array(50,5,$format[1] . ':',0,0,'R',0)); $return[] = array('setFont',array('times','',10)); return array_merge($return,processLine($matches[1] . $matches[3],false)); } elseif(preg_match($value_pattern,$line,$matches)) { $format = processFormatTags($matches[2],''); $return[] = array('setFont',array('times',$format[0],10)); $return[] = array('Cell',array(50,5,$format[1],0,0,'L',0)); $return[] = array('setFont',array('times','',10)); return array_merge($return,processLine($matches[1] . $matches[3])); } elseif(preg_match($p_pattern,$line,$matches)) { $format = processFormatTags($matches[2],''); $return[] = array('setFont',array('times',$format[0],10)); $return[] = array('Write',array(5,$format[1])); $return[] = array('setFont',array('times','',10)); return array_merge($return,processLine($matches[1] . $matches[3])); } elseif(preg_match($td_pattern,$line,$matches)) { if($first_td && $key) { $first_td = !$first_td; $return[] = array('Cell',array(50,5,'',0,0,'L',0)); } $format = processFormatTags($matches[3],''); $attrs = processAttributes($matches[2],array('width' => $line_width,'height' => 5,'align' => 'L')); $return[] = array('setFont',array('times',$format[0],10)); $return[] = array('Cell',array($attrs['width'],$attrs['height'],$format[1],0,0,$attrs['align'],0)); $return[] = array('setFont',array('times','',10)); return array_merge($return,processLine($matches[1] . $matches[4],$first_td)); } elseif(preg_match($br_pattern,$line,$matches)) { return array(array('Ln',array(5))); } elseif(preg_match($block_pattern,$line,$matches)) { $line_width = LAMPDF_LINEWIDTH; return array(array('Ln',array(5))); } } function processFormatTags($line,$style) { // PCRE matching a tag $i_pattern = '/(.*)(.+)<\/i>(.*)/'; // PCRE matching a tag $b_pattern = '/(.*)(.+)<\/b>(.*)/'; // PCRE matching a tag $u_pattern = '/(.*)(.+)<\/u>(.*)/'; // Replacement pattern when one of the above pattern matched $replace = "\$1\$2\$3"; if(preg_match($i_pattern,$line,$matches)) { $style .= "I"; $line = preg_replace($i_pattern,$replace,$line); } if(preg_match($b_pattern,$line,$matches)) { $style .= "B"; $line = preg_replace($b_pattern,$replace,$line); } if(preg_match($u_pattern,$line,$matches)) { $style .= "U"; $line = preg_replace($u_pattern,$replace,$line); } return array($style,$line); } function processAttributes($attrs,$return = array()) { global $line_width; // PCRE matching width attribute $width_pattern = '/(.*)width\=\"(\\d+)(\%?)\"(.*)/'; // PCRE matching height attribute $height_pattern = '/(.*)height\=\"(\\d+)\"(.*)/'; // PCRE matching align attribute $align_pattern = '/(.*)align\=\"(L|R|C)\"(.*)/'; // Remove leading and trailing whitespaces $attrs = trim($attrs); if(preg_match($width_pattern,$attrs,$matches)) { if($matches[3] == '%') { $return['width'] = ceil($line_width * $matches[2] / 100); } else { $return['width'] = ceil($matches[2]); } return processAttributes($matches[1] . $matches[4],$return); } elseif(preg_match($height_pattern,$attrs,$matches)) { $return['height'] = $matches[2]; return processAttributes($matches[1] . $matches[3],$return); } elseif(preg_match($align_pattern,$attrs,$matches)) { $return['align'] = $matches[2]; return processAttributes($matches[1] . $matches[3],$return); } else { return $return; } } function createUserPDF($accounts) { // The decimal separator must be a dot in order to write pdf-files setlocale(LC_NUMERIC, "C"); // Start PDF file $pdfFile = new lamPDF(); $pdfFile->Open(); // Write some information into the PDF file $pdfFile->setFont("arial","",12); $pdfFile->setTitle("LDAP Account Manager"); $pdfFile->setSubject(_("User information page")); $pdfFile->setAuthor("LDAP Account Manager Devel-Team -Michael Duergner-"); $pdfFile->setCreator("LDAP Account Manager (pdf.inc)"); // Loop for every sumbitted account and print its values on a extra page foreach ($accounts as $account) { $pdfFile->addPage(); // Load string with additional information from session $info_string = $_SESSION['config']->pdftext; // Print individuall text. // Get all allowed vairables from account-object $values = get_object_vars($account); $values = array_keys($values); // Replace $varstring in string with variable foreach ($values as $value) { // replace string if (is_string($account->$value)) $info_string = str_replace('$'.$value, $account->$value, $info_string); // replace object else if (is_object($account->$value)) { $values2 = get_object_vars($account->$value); $values2 = array_keys($values2); foreach ($values2 as $value2) { $info_string = str_replace('$'.$value.'->'.$value2, $account->$value->$value2, $info_string); } } // replace array else if (is_array($account->$value)) { foreach ($account->$value as $sub_array2) $sub_array .= $sub_array2.", "; $sub_array = substr($sub_array, 0, -2); $info_string = str_replace('$'.$value, $sub_array, $info_string); } } // Split string in array $info_array = explode("\n", $info_string); $pdfFile->setFont("times","",10); foreach ($info_array as $info) $pdfFile->Cell(50,5,$info,0,1,"L",0); $pdfFile->Ln(6); // Print Personal settings $pdfFile->setFont("arial","B",12); $pdfFile->Write(5,"- " . _("Personal User Infos") . ":"); $pdfFile->Ln(6); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Title") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_title,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Surname") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_surname,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Given name") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_givenname,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Street") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_street,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Postal code") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_postalCode,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Postal address") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_postalAddress,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("E-Mail") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_mail,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Phone") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_telephoneNumber,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Cellular phone") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_mobileTelephoneNumber,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Facsimile") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->personal_facsimileTelephoneNumber,0,1,"L",0); $pdfFile->setFont("times","",10); // Print Unix settings $pdfFile->Ln(9); $pdfFile->setFont("arial","B",12); $pdfFile->Write(5,"- " . _("Unix User Settings") . ":"); $pdfFile->Ln(6); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Username") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_username,0,1,"L",0); if($account->unix_password_no == "1") { $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Unix password") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,_("Unix password disabled!"),0,1,"L",0); } elseif($account->unix_password == "") { } else { $account->unix_password = $_SESSION['ldap']->decrypt(base64_decode($account->unix_password)); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Unix password") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->unix_password,0,1,"L",0); } $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Group(s)") . ":",0,0,"R",0); $text = $account->general_group; $groups = $account->general_groupadd; for($j=0;$jsetFont("times","",10); $pdfFile->Cell(50,5,$text,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Home Directory") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_homedir,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Login Shell") . ":",0,0,"R",0); $text = ""; $shells = $account->general_shell; $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_shell,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Password expire") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,date('j. F Y' ,$account->unix_pwdexpire),0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Login at host(s)") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->unix_host,0,1,"L",0); // Print Samba settings $pdfFile->Ln(9); $pdfFile->setFont("arial","B",12); $pdfFile->Write(5,"- " . _("Windows User Settings") . ":"); $pdfFile->Ln(6); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Username") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->general_username,0,1,"L",0); if($account->smb_flags['N']) { $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,_("Window password disabled!"),0,1,"L",0); } elseif($account->smb_useunixpwd == "1") { $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,_("Windows password set to unix password."),0,1,"L",0); } elseif($account->smb_password == "") { } else { $account->smb_password = $_SESSION['ldap']->decrypt(base64_decode($account->smb_password)); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_password,0,1,"L",0); } $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Home drive") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_homedrive,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Script path") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_scriptPath,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Profile path") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_profilePath,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Login at workstation(s)") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_smbuserworkstations,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Windows home directory") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $pdfFile->Cell(50,5,$account->smb_smbhome,0,1,"L",0); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("Windows Domain") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); if($_SESSION['config']->get_samba3() == "yes") $pdfFile->Cell(50,5,$account->smb_domain->name,0,1,"L",0); else $pdfFile->Cell(50,5,$account->smb_domain,0,1,"L",0); // Print Quota settings $pdfFile->Ln(9); $pdfFile->setFont("arial","B",12); $pdfFile->Write(5,"- " . _("Quota Settings") . ":"); $pdfFile->Ln(6); $pdfFile->setFont("times","B",10); $pdfFile->Cell(50,5,_("User quota(s)") . ":",0,0,"R",0); $pdfFile->setFont("times","",10); $quotas = $account->quota; if(count($quotas)>0) { $pdfFile->Cell(30,5,_("Mountpoint"),0,0,"L",0); $pdfFile->Cell(30,5,_("Soft block"),0,0,"L",0); $pdfFile->Cell(30,5,_("Soft inode"),0,0,"L",0); $pdfFile->Cell(30,5,_("Hard block"),0,0,"L",0); $pdfFile->Cell(30,5,_("Hard inode"),0,1,"L",0); for($j=0;$jCell(50,5,"",0,0,"R",0); $pdfFile->Cell(30,5,$quotas[$j][0],0,0,"L",0); $pdfFile->Cell(30,5,$quotas[$j][2],0,0,"L",0); $pdfFile->Cell(30,5,$quotas[$j][6],0,0,"L",0); $pdfFile->Cell(30,5,$quotas[$j][3],0,0,"L",0); $pdfFile->Cell(30,5,$quotas[$j][7],0,1,"L",0); } } else { $pdfFile->Cell(50,5,_("No user quotas defined or no quota support by filesystem."),0,1,"L",0); } $pdfFile->Ln(9); } // Close PDF $pdfFile->Close(); // Get relative url path $fullpath = realpath('.'); $subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath)); for ($i=0; $irand . time() .'.pdf'; // Save PDF $pdfFile->Output($filename); // Output meta refresh to pdf-file metaRefresh($filename); // Return relative path of pdf-file return $filename; } // creates a PDF with host accounts // $accounts: array of account function createHostPDF($accounts) { // The decimal separator must be a dot in order to write pdf-files setlocale(LC_NUMERIC, "C"); // Start PDF file $pdfFile = new lamHostPDF(); $pdfFile->Open(); // Write some information into the PDF file $pdfFile->setFont("arial","",12); $pdfFile->setTitle("LDAP Account Manager"); $pdfFile->setSubject(_("Samba-Host information page")); $pdfFile->setAuthor("LDAP Account Manager Devel-Team -Roland Gruber-"); $pdfFile->setCreator("LDAP Account Manager (pdf.inc)"); // print host accounts $pdfFile->addPage(); $k = 0; // used to count the already printed accounts per page for($i = 0; $i < count($accounts); $i++) { $k++; $account = $accounts[$i]; $ypos = $pdfFile->GetY(); $pdfFile->setFont("times","B",16); $pdfFile->Write(5,$account->general_username); $pdfFile->Ln(8); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Description") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_gecos); $pdfFile->Ln(5); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("UID") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_uidNumber); $pdfFile->Ln(5); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Primary group") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_group); $pdfFile->Ln(5); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Domain") . ": "); $pdfFile->setFont("times","",10); unset($domain); if (is_string($account->smb_domain)) { $domain = $account->smb_domain; } else { $domain = $account->smb_domain->name; } $pdfFile->Write(5,$domain); $pdfFile->Ln(5); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("DN") . ": "); $pdfFile->setFont("times","",9); $pdfFile->Write(5,$account->general_dn); // print second column if ($accounts[$i+1]) { $k++; $i++; $account = $accounts[$i]; $pdfFile->SetY($ypos); $pdfFile->SetX(115); $pdfFile->setFont("times","B",16); $pdfFile->Write(5,$account->general_username); $pdfFile->Ln(7); $pdfFile->SetX(115); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Description") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_gecos); $pdfFile->Ln(5); $pdfFile->SetX(115); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("UID") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_uidNumber); $pdfFile->Ln(5); $pdfFile->SetX(115); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Primary group") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_group); $pdfFile->Ln(5); $pdfFile->SetX(115); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Domain") . ": "); $pdfFile->setFont("times","",10); unset($domain); if (is_string($account->smb_domain)) { $domain = $account->smb_domain; } else { $domain = $account->smb_domain->name; } $pdfFile->Write(5,$domain); $pdfFile->Ln(5); $pdfFile->SetX(115); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("DN") . ": "); $pdfFile->setFont("times","",9); $pdfFile->Write(5,$account->general_dn); } // space between two rows if ($i < count($accounts) - 1) { $pdfFile->Ln(12); } // new page after twelve accounts if ($k == 12) { $k = 0; $pdfFile->addPage(); } } // Close PDF $pdfFile->Close(); // Get relative url path $fullpath = realpath('.'); $subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath)); for ($i=0; $irand . time() .'.pdf'; // Save PDF $pdfFile->Output($filename); // Output meta refresh to pdf-file metaRefresh($filename); // Return relative path of pdf-file return $filename; } // creates a PDF with groups // $accounts: array of account function createGroupPDF($accounts) { // The decimal separator must be a dot in order to write pdf-files setlocale(LC_NUMERIC, "C"); // Start PDF file $pdfFile = new lamGroupPDF(); $pdfFile->Open(); // Write some information into the PDF file $pdfFile->setFont("arial","",12); $pdfFile->setTitle("LDAP Account Manager"); $pdfFile->setSubject(_("Group information page")); $pdfFile->setAuthor("LDAP Account Manager Devel-Team -Roland Gruber-"); $pdfFile->setCreator("LDAP Account Manager (pdf.inc)"); // print group accounts $pdfFile->addPage(); for($i = 0; $i < count($accounts); $i++) { $account = $accounts[$i]; $ypos = $pdfFile->GetY(); if ($ypos > 260) $pdfFile->addPage(); $pdfFile->setFont("times","B",16); $pdfFile->Write(5,$account->general_username); $pdfFile->Ln(8); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Description") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_gecos); $pdfFile->Ln(5); if ($account->smb_displayname) { $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Display name") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->smb_displayname); $pdfFile->Ln(5); } $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("GID") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->general_uidNumber); $pdfFile->Ln(5); if ($account->domain) { $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Domain") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,$account->domain->name); $pdfFile->Ln(5); } $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("DN") . ": "); $pdfFile->setFont("times","",9); $pdfFile->Write(5,$account->general_dn); if (is_array($account->unix_memberUid)) { $pdfFile->Ln(5); $pdfFile->setFont("times","B",10); $pdfFile->Write(5,_("Members") . ": "); $pdfFile->setFont("times","",10); $pdfFile->Write(5,implode(", ", $account->unix_memberUid)); } // space between two rows if ($i < count($accounts) - 1) { $pdfFile->Ln(12); } } // Close PDF $pdfFile->Close(); // Get relative url path $fullpath = realpath('.'); $subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath)); for ($i=0; $irand . time() .'.pdf'; // Save PDF $pdfFile->Output($filename); // Output meta refresh to pdf-file metaRefresh($filename); // Return relative path of pdf-file return $filename; } // lamPDF class || For defining own a Header and Footer class lamPDF extends FPDF { function lamPDF($account_type = "User") { // Call constructor of superclass $this->FPDF('P','mm','A4'); // Decide which PDF file type we shall use switch($account_type) { case "user": $subject = _("User information page"); break; case "group": $subject = _("Group information page"); break; case "host": $subject = _("Samba-Host information page"); break; } // Open PDF file and write some basic information $this->Open(); $this->setFont("arial","",12); $this->setTitle("LDAP Account Manager"); $this->setSubject($subject); $this->setAuthor("LDAP Account Manager Devel-Team -Michael Duergner-"); $this->setCreator("LDAP Account Manager (pdf.inc)"); } // Print page header function header() { $imageFile = substr(__FILE__,0,strlen(__FILE__)- 11) . "graphics/printLogo.jpg"; $this->Image($imageFile,10,10,50,20,"JPG"); $this->SetFont("arial","B",22); $this->Cell(170,5,"LDAP Account Manager",0,1,"R",0); $this->Ln(3); $this->SetFont("times","",14); $this->Cell(170,5,"- " . $this->subject . " -",0,0,"R",0); $this->SetLineWidth(0.8); $this->Line(10,40,200,40); $this->Line(10,42,200,42); $this->SetY(50); } // Print page footer function footer() { $this->SetLineWidth(0.8); $this->Line(10,280,200,280); $this->Line(10,282,200,282); $this->SetY(285); $this->Cell(0,5,_("This document was automatically created by LDAP Account Manager"),0,0,"C",0); } }