2016-07-29 1 views
2

J'essaie de créer une ligne en pointillés dans fPDF en utilisant le Dashes script. Lorsque je génère le fichier PDF, la ligne en pointillés s'affiche correctement, mais lorsque j'essaie d'imprimer, il n'apparaît pas. J'ai essayé sur plusieurs imprimantes avec des paramètres différents.Ligne pointillée FPDF non imprimable

Voici mon code:

$x = $pdf->GetX(); 
$y = $pdf->GetY(); 
$pdf->Image(SCRIPT_ROOT."/images/pdf-cut.png",$x,$y,4,4); 
$pdf->SetDash(4,2); 
$pdf->SetLineWidth(0.2); 
$pdf->Line(17,$y+2,200,$y+2); 
$pdf->SetDash(); 

Et à quoi il ressemble quand rendu:

Rendered Dashed Line

Lors de l'impression, les ciseaux se présente, mais pas la ligne en pointillés.

Toute aide serait appréciée! Merci! :)

Répondre

0

J'ai eu ce problème au travail. Les lignes pointillées apparaissaient toujours sur la visionneuse PDF, mais sur certaines imprimantes (ou à partir de certains pilotes d'imprimantes), les lignes pointillées manquaient. Ajoutez cette fonction à votre classe pour dessiner plusieurs segments de ligne entre deux coordonnées à n'importe quel angle. Note: $ dlen est la longueur du tiret et $ freq est la fréquence à laquelle ils sont placés.

public function SegmentedLine($x,$y,$x2,$y2,$dlen = 1,$freq = 3){ 
    if($x == $x2 and ($y2 - $y) < 0){ // vertical up 
     $angle = M_PI * 1.5; 
    }elseif($x == $x2){     // vertical down 
     $angle = M_PI * 0.5; 
    }else{        // not vertical 
     $angle = ($y2 - $y)/($x2 - $x); 
     $angle = atan($angle); 
    } 
    if($x > $x2){      // NW or SW quadrant from start. 
     $angle = M_PI + $angle; 
    } 
    $sin = sin($angle); 
    $cos = cos($angle); 
    $d  = sqrt(pow(($x2 - $x),2) + pow(($y2 - $y),2)); 
    for($i = 0; $i < ($d/$dlen); $i++){ 
     if($i % $freq == 0){     
      $sx = ($x + ($i * $dlen * $cos)); 
      $sy = ($y + ($i * $dlen * $sin)); 
      $ex = ($x + (($i + 1) * $dlen * $cos)); 
      $ey = ($y + (($i + 1) * $dlen * $sin)); 
      $this->Line($sx,$sy,$ex,$ey); 
     } 
    } 
} 
0

J'ai eu ce problème au travail. Les lignes pointillées apparaissaient toujours sur la visionneuse PDF, mais sur certaines imprimantes (ou à partir de certains pilotes d'imprimantes), les lignes pointillées manquaient. Ajoutez cette fonction à votre classe pour dessiner plusieurs segments de ligne entre deux coordonnées à n'importe quel angle. Note: $ dlen est

public function SegmentedLine($x,$y,$x2,$y2,$dlen = 1,$freq = 3){ 
    if($x == $x2 and ($y2 - $y) < 0){ // vertical up 
     $angle = M_PI * 1.5; 
    }elseif($x == $x2){     // vertical down 
     $angle = M_PI * 0.5; 
    }else{        // not vertical 
     $angle = ($y2 - $y)/($x2 - $x); 
     $angle = atan($angle); 
    } 
    if($x > $x2){      // NW or SW quadrant from start. 
     $angle = M_PI + $angle; 
    } 
    $sin = sin($angle); 
    $cos = cos($angle); 
    $d  = sqrt(pow(($x2 - $x),2) + pow(($y2 - $y),2)); 
    for($i = 0; $i < ($d/$dlen); $i++){ 
     if($i % $freq == 0){     
      $sx = ($x + ($i * $dlen * $cos)); 
      $sy = ($y + ($i * $dlen * $sin)); 
      $ex = ($x + (($i + 1) * $dlen * $cos)); 
      $ey = ($y + (($i + 1) * $dlen * $sin)); 
      $this->Line($sx,$sy,$ex,$ey); 
     } 
    } 
}