Function dol_nboflines_bis shoul work with non UTF-8 content.

This commit is contained in:
Laurent Destailleur 2009-08-02 18:05:16 +00:00
parent b57232bd24
commit e3bd60cb8a
12 changed files with 24 additions and 21 deletions

View File

@ -334,7 +334,7 @@ class BordereauChequeBlochet extends FPDF
$pdf->SetDrawColor(224,224,224); $pdf->SetDrawColor(224,224,224);
// On positionne le debut du bas de page selon nbre de lignes de ce bas de page // On positionne le debut du bas de page selon nbre de lignes de ce bas de page
$nbofligne=dol_nboflines_bis($ligne); $nbofligne=dol_nboflines_bis($ligne,0,$outputlangs->charset_output);
//print 'e'.$ligne.'t'.dol_nboflines($ligne);exit; //print 'e'.$ligne.'t'.dol_nboflines($ligne);exit;
$posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0); $posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0);

View File

@ -233,7 +233,7 @@ class pdf_edison extends ModelePDFCommandes
//on recupere la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $outputlangs->convToOutputCharset($com->lignes[$i+1]->desc); $follow_descproduitservice = $outputlangs->convToOutputCharset($com->lignes[$i+1]->desc);
//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -288,7 +288,7 @@ class pdf_einstein extends ModelePDFCommandes
//on recupere la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $outputlangs->convToOutputCharset($com->lignes[$i+1]->desc); $follow_descproduitservice = $outputlangs->convToOutputCharset($com->lignes[$i+1]->desc);
//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -219,7 +219,7 @@ Class pdf_expedition_merou extends ModelePdfExpedition
$pdf->MultiCell(30, 3, $object->lignes[$i]->qty_shipped, 0, 'C', 0); $pdf->MultiCell(30, 3, $object->lignes[$i]->qty_shipped, 0, 'C', 0);
//Generation de la page 2 //Generation de la page 2
$curY += (dol_nboflines_bis($libelleproduitservice)*3+1); $curY += (dol_nboflines_bis($libelleproduitservice,0,$outputlangs->charset_output)*3+1);
$nexY = $curY; $nexY = $curY;
if ($nexY > ($tab_top+$tab_height-10) && $i < $nblignes - 1) if ($nexY > ($tab_top+$tab_height-10) && $i < $nblignes - 1)
{ {

View File

@ -295,7 +295,7 @@ class pdf_crabe extends ModelePDFFactures
//on recupere la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $fac->lignes[$i+1]->desc; $follow_descproduitservice = $fac->lignes[$i+1]->desc;
//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = dol_nboflines_bis($follow_descproduitservice,52)*4; $nblineFollowDesc = dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4;
// Et si on affiche dates de validite, on ajoute encore une ligne // Et si on affiche dates de validite, on ajoute encore une ligne
if ($fac->lignes[$i]->date_start && $fac->lignes[$i]->date_end) if ($fac->lignes[$i]->date_start && $fac->lignes[$i]->date_end)
{ {

View File

@ -289,7 +289,7 @@ class pdf_soleil extends ModelePDFFicheinter
$pdf->SetXY (10, $tab_top + 4 + $j * $height); $pdf->SetXY (10, $tab_top + 4 + $j * $height);
$pdf->writeHTMLCell(0, 3, $this->marge_gauche, $tab_top + 4 + $j * $height, $pdf->writeHTMLCell(0, 3, $this->marge_gauche, $tab_top + 4 + $j * $height,
dol_htmlentitiesbr($outputlangs->convToOutputCharset($fichinterligne->desc),1), 0, 1, 0); dol_htmlentitiesbr($outputlangs->convToOutputCharset($fichinterligne->desc),1), 0, 1, 0);
$tab_height+=dol_nboflines_bis($fichinterligne->desc,52)*4; $tab_height+=dol_nboflines_bis($fichinterligne->desc,52,$outputlangs->charset_output)*4;
$j++; $j++;
} }

View File

@ -237,10 +237,10 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
// Cherche nombre de lignes a venir pour savoir si place suffisante // Cherche nombre de lignes a venir pour savoir si place suffisante
if ($i < ($nblignes - 1)) // If it's not last line if ($i < ($nblignes - 1)) // If it's not last line
{ {
//on r<EFBFBD>cup<EFBFBD>re la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $object->lignes[$i+1]->desc; $follow_descproduitservice = $object->lignes[$i+1]->desc;
//on compte le nombre de ligne afin de v<EFBFBD>rifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -301,10 +301,10 @@ class pdf_typhon extends ModelePDFDeliveryOrder
// Cherche nombre de lignes a venir pour savoir si place suffisante // Cherche nombre de lignes a venir pour savoir si place suffisante
if ($i < ($nblignes - 1)) // If it's not last line if ($i < ($nblignes - 1)) // If it's not last line
{ {
//on r<EFBFBD>cup<EFBFBD>re la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $object->lignes[$i+1]->desc; $follow_descproduitservice = $object->lignes[$i+1]->desc;
//on compte le nombre de ligne afin de v<EFBFBD>rifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -303,7 +303,7 @@ class pdf_propale_azur extends ModelePDFPropales
//on recupere la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $propale->lignes[$i+1]->desc; $follow_descproduitservice = $propale->lignes[$i+1]->desc;
//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -229,7 +229,7 @@ class pdf_propale_jaune extends ModelePDFPropales
//on recupere la description du produit suivant //on recupere la description du produit suivant
$follow_descproduitservice = $outputlangs->convToOutputCharset($propale->lignes[$i+1]->desc); $follow_descproduitservice = $outputlangs->convToOutputCharset($propale->lignes[$i+1]->desc);
//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52)*4); $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
} }
else // If it's last line else // If it's last line
{ {

View File

@ -2632,16 +2632,19 @@ function dol_nboflines($s,$maxchar=0)
/** /**
* \brief Return nb of lines of a formated text with \n and <br> * \brief Return nb of lines of a formated text with \n and <br>
* \param texte Text * \param texte Text
* \param maxlinesize Largeur de ligne en caracteres (ou 0 si pas de limite - defaut) * \param maxlinesize Largeur de ligne en caracteres (ou 0 si pas de limite - defaut)
* \return int Number of lines * \param charset Give the charset used to encode the $texte variable in memory.
* \return int Number of lines
*/ */
function dol_nboflines_bis($texte,$maxlinesize=0) function dol_nboflines_bis($texte,$maxlinesize=0,$charset='UTF-8')
{ {
//print $texte;
$repTable = array("\t" => " ", "\n" => "<br>", "\r" => " ", "\0" => " ", "\x0B" => " "); $repTable = array("\t" => " ", "\n" => "<br>", "\r" => " ", "\0" => " ", "\x0B" => " ");
$texte = strtr($texte, $repTable); $texte = strtr($texte, $repTable);
$pattern = '/(<[^>]+>)/'; if ($charset == 'UTF-8') { $pattern = '/(<[^>]+>)/Uu'; } // /U is to have UNGREEDY regex to limit to one html tag. /u is for UTF8 support
else $pattern = '/(<[^>]+>)/U'; // /U is to have UNGREEDY regex to limit to one html tag.
$a = preg_split($pattern, $texte, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); $a = preg_split($pattern, $texte, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$nblines = floor((count($a)+1)/2); $nblines = floor((count($a)+1)/2);
// count possible auto line breaks // count possible auto line breaks

View File

@ -176,7 +176,7 @@ function pdf_pagefoot(&$pdf,$outputlangs,$paramfreetext,$fromcompany,$marge_bass
$pdf->SetDrawColor(224,224,224); $pdf->SetDrawColor(224,224,224);
// On positionne le debut du bas de page selon nbre de lignes de ce bas de page // On positionne le debut du bas de page selon nbre de lignes de ce bas de page
$nbofligne=dol_nboflines_bis($ligne); $nbofligne=dol_nboflines_bis($ligne,0,$outputlangs->charset_output);
//print 'nbofligne='.$nbofligne; exit; //print 'nbofligne='.$nbofligne; exit;
//print 'e'.$ligne.'t'.dol_nboflines($ligne);exit; //print 'e'.$ligne.'t'.dol_nboflines($ligne);exit;
$posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0); $posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0);