#! /usr/bin/perl # text_to_png.pl - Convert a text file into a png format image # James M. Lynes, Jr. - January 15, 2015 # Proof of concept. File names hard coded. Expand to read command line arguments # or move to Wx gui app. # Tab expansion regex from The Perl Cookbook use strict; use warnings; use GD; open INFILE, "<", "text_to_png.pl" || die; my $image = GD::Image->new(700, 700) || die; my $white = $image->colorAllocate(230,230,230); # background color - Lt Gray my $black = $image->colorAllocate(0,0,0); # text color - Black my $x = 5; my $y = 0; while() { chomp; 1 while s/\t+/' ' x (($+[0] - $-[0]) * 8 - $-[0] % 8)/e; # do tab expansion regex here $image->string(gdMediumBoldFont, $x, $y, $_, $black); $y += 14; } my $png_data = $image->png; open OUTFILE, ">", "text_to_image.png" || die; binmode OUTFILE; print OUTFILE $png_data; close OUTFILE; #### #! /usr/bin/perl # Name: wxtext_to_png.pl # Author: James M. Lynes, Jr. # Created: February 11, 2015 # Modified By: James M. Lynes, Jr. # Last Modified: February 11, 2015 # Change Log: 2/11/2015 - Program Created - Wx version using sizers # and filepicker control. # Based on wxtabexpand.pl structure. # Description: Convert a single page text file into a png format image. # Allows conversion of multiple files. # Tab expansion regex from The Perl Cookbook. package main; use strict; use warnings; my $app = App->new(); $app->MainLoop; package App; use strict; use warnings; use base 'Wx::App'; sub OnInit { my $frame = Frame->new(); $frame->Show(1); } package Frame; use strict; use warnings; use Wx qw(:everything); use base qw(Wx::Frame); use GD; use Data::Dumper; sub new { my ($class, $parent) = @_; my $frame = $class->SUPER::new($parent, -1, "Text File to png File Converter", wxDefaultPosition, wxDefaultSize); #Create controls # Fields my $pdfLabel=Wx::StaticText->new($frame, wxID_ANY,"Select a Text File to Convert to png", wxDefaultPosition, wxDefaultSize); my $pdfFilePicker=Wx::FilePickerCtrl->new($frame, wxID_ANY, "", "Select an Input File","*.*", wxDefaultPosition, [400,-1], wxDIRP_DIR_MUST_EXIST| wxDIRP_CHANGE_DIR|wxDIRP_USE_TEXTCTRL); $pdfFilePicker->SetPath("~/"); $frame->{inpath} = "default"; # Buttons my $okButton = Wx::Button->new($frame, wxID_OK, "", wxDefaultPosition, wxDefaultSize); my $exitButton = Wx::Button->new($frame, wxID_EXIT, "", wxDefaultPosition, wxDefaultSize); # Create sizers. my $verticalSizerFrame = Wx::BoxSizer->new(wxVERTICAL); $frame->SetSizer($verticalSizerFrame); my $verticalSizerControls = Wx::BoxSizer->new(wxVERTICAL); my $horizontalSizerButtons = Wx::BoxSizer->new(wxHORIZONTAL); # Lay 'em out. $verticalSizerFrame->Add($verticalSizerControls,0,0,0); $verticalSizerFrame->Add($horizontalSizerButtons,0,0,0); $verticalSizerControls->AddSpacer(15); # Spacer $verticalSizerControls->Add($pdfLabel,0,0,0); $verticalSizerControls->Add($pdfFilePicker,0,0,0); $verticalSizerControls->AddSpacer(15); # Spacer $horizontalSizerButtons->Add($okButton,0,0,0); $horizontalSizerButtons->Add($exitButton,0,0,0); # Event handlers Wx::Event::EVT_BUTTON($frame, $okButton, sub { my ($self, $event) = @_; #print "\nOK Button\n"; open INFILE, "<", $self->{inpath} || die; my $image = GD::Image->new(700, 700) || die; my $white = $image->colorAllocate(230,230,230); # background color - Lt Gray my $black = $image->colorAllocate(0,0,0); # text color - Black my $x = 5; my $y = 0; while() { chomp; 1 while s/\t+/' ' x (($+[0] - $-[0]) * 8 - $-[0] % 8)/e; # do tab expansion regex here $image->string(gdMediumBoldFont, $x, $y, $_, $black); $y += 14; } my $png_data = $image->png; open OUTFILE, ">", $self->{inpath}.".png" || die; binmode OUTFILE; print OUTFILE $png_data; close INFILE; close OUTFILE; }); Wx::Event::EVT_BUTTON($frame, $exitButton, sub { my ($self, $event) = @_; #print "\nEXIT Button\n"; $self->Close; }); Wx::Event::EVT_FILEPICKER_CHANGED($frame, $pdfFilePicker, sub { my ($self, $event) = @_; $self->{inpath} = $pdfFilePicker->GetPath; }); $verticalSizerFrame->Layout(); return $frame; } 1;