2014-11-19 3 views
1

펄의 PDF::API2 다음에 예를하는 것처럼, 한 페이지에 텍스트를 넣을 수 있습니다 :줄 바꿈 및 Linespace :: API2

$pdf = PDF::API2->new(); 
$page = $pdf->page(); 
$page->mediabox('A4');  
$page->gfx->textlabel(50, 50, $pdf->corefont('Helvetica'), 10, "Hello world"); 
$pdf->saveas('test.pdf'); 

을하지만 직관적 같은 멀티 라인 텍스트에 대한 모든 문서를 찾을 수 있지만, 작동하지 않는 문자열 "Hello\nworld".

PDF에서 개행의 올바른 기호는 무엇입니까?

줄 간격을 늘리거나 줄일 수있는 방법이 있습니까?

답변

2

모듈의 POD가 손상되었을 수 있습니다. 소스를 확인하십시오. 그러면, 예를 들어.

use strict; 
use warnings; 
use PDF::API2; 

my $pdf = PDF::API2->new(); 
my $page = $pdf->page(); 
$page->mediabox('A4'); 

my $content = $page->text(); 
$content->translate(50, 750); 
$content->font($pdf->corefont('Helvetica'), 24); 
$content->lead(30); 
$content->section("What is the proper symbol for a newline in the PDF?\nIs there a method to increase/decrease line spacing?\n" x 5, 400, 500); 
$pdf->saveas('test.pdf'); 

이 예제는 긴 줄 자동 줄 바꿈, 줄 바꿈 처리 및 줄 바꿈 (줄 간격) 설정을 보여줍니다.


의견을 요청하는대로 업데이트 :). Borodin이 제안한대로 그것을 할 수 있습니다. '표준'textlabel을 개행 문자로 분리하고 수동으로 텍스트 위치를 업데이트하는 것은 어렵지 않습니다. 하지만, TMTOWTDI, 그리고 당신은 아래의 내 빠른 (그리고 더러운) 솔루션을 사용할 수 있습니다 - section는 '무한'텍스트 상자로 방지 자동 줄 바꿈을 처리하는 데 사용됩니다. 내 sub 호출 의미는 textlabel과 비슷합니다. 또는 색상, 정렬 등의 지원을 추가하고 클래스에서 적절한 방법으로 만들 수 있습니다.

use strict; 
use warnings; 
use PDF::API2; 

my $s = <<'END'; 
What is the proper symbol for a newline in the PDF? 
Is there a method to increase/decrease line spacing? 
END 

sub super_textlabel { 
    my ($page, $x, $y, $font, $size, $text, $rotate, $lead) = @_; 
    my $BIG = 1_000_000; 
    $page->gfx()->save(); 
    my $txt = $page->text(); 
    $txt->font($font, $size); 
    $txt->lead($lead); 
    $txt->transform(-translate => [$x, $y], -rotate => $rotate); 
    $txt->section($text, $BIG, $BIG); 
    $page->gfx()->restore(); 
} 

my $pdf = PDF::API2->new(); 
my $page = $pdf->page(); 
$page->mediabox('A4'); 

super_textlabel($page, 50, 750, $pdf->corefont('Helvetica'), 12, $s, 0, 16); 
super_textlabel($page, 200, 200, $pdf->corefont('Times'),  16, $s, 45, 24); 
super_textlabel($page, 500, 400, $pdf->corefont('Courier'), 10, $s, 90, 50); 

$pdf->saveas('test.pdf'); 
+0

힌트를 보내 주셔서 감사합니다. 원본에는 실제로 더 많은 정보가 포함되어 있습니다. 당신의 예제는 잘 작동하지만'-rotate'와 같은 옵션이 필요하고 자동 줄 바꿈을 허용하지 않기 때문에'section' 메소드의 기능을'textlabel'에 적용하는 방법을 찾아야합니다. – Martin

+0

당신은 내 하루를 보냈습니다, 정말 고마워요! – Martin

1

PDF에는 "선"개념이 없습니다. 지정된 폰트와 크기로 주어진 시작 좌표에 텍스트를 놓습니다. 문자열을 분할해야하는 위치와 각 후속 행의 좌표를 계산하는 것은 사용자의 책임입니다.

PDF::API2::Content 클래스는 단순히 이전의 시작점 플러스 주어진 오프셋에 펜을 이동 distance, crnl 방법을 가지고있다.

+1

예에서 'textlabel'객체에이 메소드를 적용하는 방법을 알 수 없으므로 힌트를 주시겠습니까? – Martin