2016-07-29 2 views
2

Я пытаюсь создать пунктирную линию в fPDF, используя Dashes script.FPDF Пунктирная линия не печатается

Когда я создаю PDF-файл, пунктирная линия отображается правильно, но когда я пытаюсь выполнить печать, она не появляется. Я пробовал несколько принтеров с разными настройками.

Вот мой код:

$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(); 

И как это выглядит, когда оказывается:

Rendered Dashed Line

При печати ножничные показывает вверх, но не пунктирная линия.

Любая помощь будет оценена! Благодаря! :)

ответ

0

У меня была эта проблема на работе. Пунктирные линии всегда отображались в средстве просмотра PDF, но на некоторых принтерах (или из некоторых драйверов принтера) пунктирные линии отсутствовали. Добавьте эту функцию в свой класс, чтобы нарисовать несколько сегментов линии между двумя координатами под любым углом. Примечание: $ dlen - это длина тире, а $ freq - это частота, на которую они установлены.

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

У меня была эта проблема на работе. Пунктирные линии всегда отображались в средстве просмотра PDF, но на некоторых принтерах (или из некоторых драйверов принтера) пунктирные линии отсутствовали. Добавьте эту функцию в свой класс, чтобы нарисовать несколько сегментов линии между двумя координатами под любым углом. Примечание: $ dlen составляет

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); 
     } 
    } 
} 
Смежные вопросы