ajaykannan has asked for the wisdom of the Perl Monks concerning the following question:

The code is to fetch data after executing commands from windows machine to network devices.Am getting the result but the problem is have to outfile it as pdf. I done but only first line are printed and other content are not saved in that.I need to put all the content and save it as pdf format. Any help plz.

#!/usr/bin/perl use strict; use warnings; use Net::Ping; use Net::SSH2; use PDF::API2; #************set pdf*************** my $save_pdf_as="mypdf.pdf"; # Create a blank PDF file my $pdf = PDF::API2->new(); # Add a blank page my $page = $pdf->page(); # Set the page size $page->mediabox('Letter'); # Add a built-in font to the PDF my $font = $pdf->corefont('Helvetica-Bold'); #************ssh module*************** my $ssh = Net::SSH2->new(); my $username="username"; my $password="password"; my $ip_address = ("ipaddress"); my $ping= Net::Ping->new(); if($ping->ping($ip_address)) { if($ssh->connect($ip_address)) { if($ssh->auth_password($username,$password)) { my $chan = $ssh->channel(); $chan->blocking(1); $chan->shell(); $chan->write("terminal length 0\n"); $chan->write("show ip interface brief \n"); my $text = $page->text(); $text->font($font, 20); $text->translate(200, 700); while (<$chan>) { if (/\bterminal length\b/i .. /^\n*$/) { print; $text->text($_); } } $pdf->saveas($save_pdf_as); } else { print "auth failed"; } } } else { print "not pinging"; }

Replies are listed 'Best First'.
Re: download an array of text as pdf
by hippo (Archbishop) on Dec 02, 2016 at 09:26 UTC

    There is no line in your code where you append each of the data points to the PDF object. Therefore it is no surprise that the resulting PDF doesn't contain the data.

Re: download an array of text as pdf
by poj (Abbot) on Dec 02, 2016 at 12:12 UTC

    Try setting the line spacing (leading) and adding newlines. You can also set the line spacing within the cr method. For example

    #!perl use strict; use warnings; use PDF::API2; my $save_pdf_as = "mypdf.pdf"; my $pdf = PDF::API2->new(); my $page = $pdf->page() ->mediabox('Letter'); my $font = $pdf->corefont('Helvetica-Bold'); my $text = $page->text(); $text->lead(25); $text->font($font, 20); $text->translate(100, 700); while (<DATA>){ $text->text($_); $text->cr(); #$text->cr(-25); # move down } $pdf->saveas($save_pdf_as); __DATA__ line 1 line 2 line 3 line 4
    poj

      thank you for the help and can you tell me how to increase the width to print the data. Because for now its printing full content but only half are visible.

        Reduce the font size, rotate the page to landscape or try this.

        #!perl use strict; use warnings; use PDF::API2; my $save_pdf_as = "mypdf.pdf"; my $pdf = PDF::API2->new(); my $page = $pdf->page() ->mediabox('Letter'); my $font = $pdf->corefont('Helvetica-Bold'); my $text = $page->text() ->font($font, 20); $text->lead(25); $text->translate(100, 700); while (<DATA>){ $text->paragraph($_, 400, 400, -align => "left" ); # width height $text->cr(-5); } $pdf->saveas($save_pdf_as); __DATA__ line 1 is a very long line that extends past the end of the page line 2 is also very long line that extends past the end of the page line 3 line 4

        The height of the paragraph box needs to be large enough for the text

        If you need to spread the text across multiple pages then it can get complicated !

        poj