2016-04-22 12 views
1

Ich habe Daten in einem Array und ich kann die Daten in ein PDF-Format schreiben mit PDF :: API2. Aber das Problem ist während des Schreibprozesses der Einzug (Leerzeichen) nicht genau gleich wie in der Anordnung istEindruck falsch beim Erstellen PDF mit Perl-Modul PDF :: API2

in Array-Format:

ATOM  1 N MET A 0  24.277 8.374 -9.854 1.00 38.41   N 0.174 

ATOM  38 OE2 GLU A 4  37.711 19.692 -12.684 1.00 28.70   O 0.150 

im PDF-Format:

ATOM 1 N MET A 0 24.277 8.374-9.8541.0038.41 N 0.174 

ATOM 38 OE2 GLU A 4 37.71119.692-12.684 1.00 28.70 O 0.150 

Mein Code:

my $pdf = PDF::API2->new(-file => "/home/httpd/cgi-bin/new.pdf"); 
$pdf->mediabox("A4"); 
my $page = $pdf->page; 
my $fnt = $pdf->corefont('Arial',-encoding => 'latin1'); 
my $txt = $page->text; 
$txt->textstart; 
$txt->font($fnt, 8); 
$txt->translate(100,800); 
$j1=0; 
for($i=0;$i<=scalar(@ar_velz);$i++) #Data input to write in PDF 
{ 
$txt->lead(10); 
$txt->section("$ar_velz[$i]", 500, 800); #writing each array index 
if($j1 == 75)     #To create a page for every 75 lines 
{ 
$page = $pdf->page; 
$fnt = $pdf->corefont('Arial',-encoding => 'latin1'); 
$txt = $page->text; 
$txt->textstart; 
$txt->font($fnt, 8); 
$txt->lead(10); 
$txt->translate(100,800); 
$j1=0; 
} 
$j1++; 
} 
$txt->textend; 
$pdf->save; 
$pdf->end(); 

} 

Antwort

4

Das passiert, weil Arial kein mono-spaced font ist. Die Zeichen haben alle unterschiedliche Breiten. Vor allem eine Leerstelle ist normalerweise nicht sehr breit. Wenn der Abstand intakt bleiben soll, müssen Sie einen Mono-Abstand font verwenden, z. B. Courier.

$fnt = $pdf->corefont('Courier',-encoding => 'latin1'); 

Diese Tatsache ist auch, warum PDF :: API2 includes a method advancewidth in seinem PDF :: API2 :: Inhalt Klasse. Sie können damit prüfen, ob ein Textblock zu breit ist, um in eine Zeile zu passen, und ihn bei Bedarf manuell umbrechen. Natürlich hilft das für deinen Tisch nicht.


Eine Alternative zum Mono-Abstand Schriftart könnte sein PDF::Table zu verwenden, welche Tabellen innerhalb einer PDF-Datei erstellen können :: API2 Dokument.

+1

Danke, es hat perfekt funktioniert. –

+1

@simbabque: Ich glaube nicht, dass PDF-Dokumente Tabulatoren haben, aber zu diesem Thema nichts finden konnten. Weißt du etwas darüber? Wie werden Zeichenketten, die horizontale Registerkarten enthalten, von PDF gerendert? – Borodin