2016-07-29 44 views
2

Ich versuche, eine gestrichelte Linie in fPDF unter Verwendung der Dashes script zu erstellen.FPDF-gestrichelte Linie, die nicht druckt

Wenn ich das PDF erzeuge, wird die gestrichelte Linie richtig dargestellt, aber wenn ich versuche, zu drucken, wird es nicht angezeigt. Ich habe mehrere Drucker mit verschiedenen Einstellungen ausprobiert.

Hier ist mein 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(); 

Und wie es aussieht, wenn gerendert:

Rendered Dashed Line

Beim Drucken der Schere zeigt, aber nicht die gestrichelte Linie.

Jede Hilfe wäre willkommen! Vielen Dank! :)

Antwort

0

Ich hatte dieses Problem bei der Arbeit. Die gestrichelten Linien wurden immer im PDF-Viewer angezeigt, aber auf einigen Druckern (oder einigen Druckertreibern) fehlten die gestrichelten Linien. Fügen Sie diese Funktion zu Ihrer Klasse hinzu, um mehrere Liniensegmente zwischen zwei Koordinaten in einem beliebigen Winkel zu zeichnen. Hinweis: $ dlen ist die Länge des Bindestrichs und $ freq ist die Häufigkeit, mit der sie platziert werden.

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

Ich hatte dieses Problem bei der Arbeit. Die gestrichelten Linien wurden immer im PDF-Viewer angezeigt, aber auf einigen Druckern (oder einigen Druckertreibern) fehlten die gestrichelten Linien. Fügen Sie diese Funktion zu Ihrer Klasse hinzu, um mehrere Liniensegmente zwischen zwei Koordinaten in einem beliebigen Winkel zu zeichnen. Hinweis: $ dlen ist

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); 
     } 
    } 
}