2011-02-25 2 views
2

저는 PDF :: API2 모듈을 사용하여 PDF를 프로그래밍했습니다. 나는 창고 회사에서 일하고 있으며 우리는 텍스트 포장 명세서에서 PDF 포장 명세서로 전환을 시도하고 있습니다. 패킹 슬립에는 단일 주문에 필요한 품목 목록이 있습니다. 그것은 훌륭하게 작동하지만 문제가 생겼습니다. 현재 내 프로그램은 하나의 페이지 PDF를 생성하며 정상적으로 작동합니다. 하지만 지금은 주문에 30 개 이상의 항목이있는 경우 PDF가 여러 페이지가되어야한다는 것을 알게되었습니다. 나는 그것을하기 쉬운 (ish) 방법을 생각하려고 노력했지만, 하나를 생각해 낼 수 없었다. 내가 생각할 수있는 유일한 방법은 여러 페이지가있는 경우 다른 페이지를 만들고 로직을 사용하여 광고 항목의 좌표를 재정의하는 것입니다. 그래서 나는 다른 방법이나 뭔가 도움이 될 수없는 것이 있는지 알아 내려고했지만 실제로 CPAN에서 아무것도 발견하지 못했습니다.Perl 및 PDF :: API2를 사용하여 여러 페이지 PDF를 생성하는 가장 좋은 방법은 무엇입니까?

기본적으로 30 개가 넘지 않는 한 단일 페이지 PDF를 만들어야합니다. 그런 다음에는 여러 배가되어야합니다.

프로그래밍에 비교적 익숙하지 않기 때문에 만들어진 의미와 도움이 크게 감사하길 바랍니다.

답변

2

PDF :: API2는 (는) 저수준입니다. 여백, 블록 및 단락과 같은 문서에 필요한 것으로 간주 할 대부분의 내용이 없습니다. 이 때문에, 당신은 어려운 일을해야 할 것 같네요. PDF :: API2 :: Simple을보고 싶을 수도 있습니다. 그것은 귀하의 기준에 부합 할 수 있으며 사용하기 쉽습니다.

1

저는 비슷한 작업을 위해 PDF::FromHTML을 사용합니다. reasonable 선택 인 것으로 보이고, 나는 손으로 위치를 잡을 때 너무 크지 않다.

3

이미 한 페이지 PDF에서 작동하는 코드가 있으므로 여러 페이지 PDF에서 작동하도록 코드를 변경하면 너무 어려워서는 안됩니다. 이 같은

시도 뭔가 :

use PDF::API2; 

sub create_packing_list_pdf { 
    my @items = @_; 
    my $pdf = PDF::API2->new(); 
    my $page = _add_pdf_page($pdf); 

    my $max_items_per_page = 30; 
    my $item_pos = 0; 
    while (my $item = shift(@items)) { 
     $item_pos++; 

     # Create a new page, if needed 
     if ($item_pos > $max_items_per_page) { 
      $page = _add_pdf_page($pdf); 
      $item_pos = 1; 
     } 

     # Add the item at the appropriate height for that position 
     # (you'll need to declare $base_height and $line_height) 
     my $y = $base_height - ($item_pos - 1) * $line_height; 

     # Your code to display the line here, using $y as needed 
     # to get the right coordinates 
    } 

    return $pdf; 
} 

sub _add_pdf_page { 
    my $pdf = shift(); 

    my $page = $pdf->page(); 

    # Your code to display the page template here. 
    # 
    # Note: You can use a different template for additional pages by 
    # looking at e.g. $pdf->pages(), which returns the page count. 
    # 
    # If you need to include a "Page 1 of 2", you can pass the total 
    # number of pages in as an argument: 
    # int(scalar @items/$max_items_per_page) + 1 

    return $page; 
} 

중요한 것은 당신이 쉽게 코드를 복제 할 필요없이 새 페이지를 시작할 수 있도록 개별 항목에서 페이지 템플릿을 분할하는 것입니다.

1

간단한 방법을 사용하는 것이다 PDF-API2-Simple

my @content; 
my $pdf = PDF::API2::Simple->new(file => "$name"); 
$pdf->add_font('Courier'); 
$pdf->add_page(); 
foreach $line (@content) 
{ 
    $pdf->text($line, autoflow => 'on'); 
} 
$pdf->save(); 
관련 문제