Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: PDL Book as epub?

by LanX (Saint)
on Aug 09, 2024 at 09:52 UTC ( [id://11160952]=note: print w/replies, xml ) Need Help??


in reply to PDL Book as epub?

I was fiddling with ePUB recently, and it's basically glorified HTML in a zipped directory structure.

The book you mentioned seems to be that one downloadable for free here https://pdl.perl.org/content/pdl-book-toc.html (and I doubt that the fonts are inaccessible)

So you could go and try a PDF to HTML converter and build your own ePUB.

There are even free online services for PDF to ePUB, can't comment on the quality.

I suppose you'll have to adjust some parameters afterwards but I'm confident you have the necessary skills ;)

HTH

Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^2: PDL Book as epub? (POD source)
by LanX (Saint) on Aug 09, 2024 at 10:49 UTC
    I realized that the link I gave is not the newest version, and while investigating I got the impression that the book was created from a POD source.

    Then I stumbled over this

    https://sourceforge.net/p/pdl/pdl-book/ci/master/tree/

    Please note the included scripts to build a PDF and even an all in one HTML.

    See also the sub directories with a POD file per chapter.

    Starting from there it should be easy to write a script to build ePUB from POD. You may even contribute it to the project.

    Disclaimer: no guarantee whatsoever for the actuality of the links given. I'm not part of this community and I find the repository structure kind of confusing.

    Update
    Maybe also of interest App::Pod2Epub

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

Re^2: PDL Book as epub?
by cavac (Parson) on Aug 09, 2024 at 10:49 UTC

    Thanks!

    To be honest, yes i can make something work I was just hoping that someone already did and i was just looking at an old repository instead of the current one or something.

    I already tried a couple of online converters. And the result is crap, to put it mildly.

    Disclaimer: I can neither confirm nor deny that i, as a webdev, have the required skills to fiddle with HTML ;-)

    PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP
    Also check out my sisters artwork and my weekly webcomics
      I've never actually used ePub or one of those new-fangled Kindle etc thingies. Could you try the PDL website's copy (as of a few minutes ago) of the entire book as a large web page, and see if that is a sufficient solution to your problem?

      Otherwise, I'll be extremely grateful if you can have a go with the pod2latex etc stuff suggested elsewhere here and put somewhere here the commands to make such an ePub, and I'll be pleased to generate it and link on the website also.

        I hacked together a first, unfinished, largely untested prototype converter. This goes into the base directory of https://sourceforge.net/p/pdl/pdl-book/ci/master/tree/ as make_epub.pl:

        #!/usr/bin/env perl use v5.36; use strict; use warnings; use Carp; use App::Pod2Epub; #use Archive::Zip; use GD; use MIME::Base64; use English; my $parser = App::Pod2Epub->new(); my @full; my @subfiles; { # Read and parse TOC pod my @lines = _readFile('PDL/Book.pod'); my $istoc = 0; foreach my $line (@lines) { if($line =~ /^\=over/) { $istoc = 1; #push @full, $line; next; } elsif($line =~ /^\=back/) { $istoc = 0; #push @full, $line; next; } elsif($istoc && $line =~ /^\=item/) { my $subfile = ''; if($line =~ /\<(.+?)\|/) { $subfile = $1; $line =~ s/.*\>\ //; $subfile =~ s/\:\:/\//g; $subfile .= '.pod'; if(!-f $subfile) { warn("$subfile does not exist"); } else { push @subfiles, $subfile; } } push @full, $line; next; } push @full, $line; } push @full, ''; } { # Process chapters foreach my $subfile (@subfiles) { my @lines = _readFile($subfile); foreach my $line (@lines) { if($line =~ /^\=for\ html/) { if($line =~ /\<img.*src\=\"(.+?)\"/) { my $img = 'PDL/Book/' . $1; if(-f $img) { my $imgdata = _slurpBinFile($img); $imgdata = encode_base64($imgdata, ''); my $imggd = GD::Image->new($img); my ($width, $height) = $imggd->getBounds(); my $realline = '=for html <img width="' . $wid +th . '" height="' . $height . '" src="data:image/png;base64, ' . $img +data . '"/>'; push @full, $realline; } else { warn("Missing image $img in file $subfile"); push @full, "Missing image: $img"; } next; } else { warn("Unknown 'for html' tag: $line in $subfile"); next; } } push @full, $line; } push @full, ''; } } { # Write complete POD file open(my $ofh, '>', 'complete_book.pod') or croak($!); foreach my $line (@full) { print $ofh $line, "\n"; } close $ofh; } if(0){ # Convert file to epub open(my $ifh, '<', 'complete_book.pod') or croak($!); open(my $ofh, '>', 'complete_book.epub') or croak($!); binmode $ofh; $parser->output_fh($ofh); $parser->parse_file($ifh); close $ifh; close $ofh; } `pod2epub complete_book.pod -o complete_book.epub`; #{ # Add images to ZIP file # my $zip = Archive::Zip->new('complete_book.epub'); # foreach my $img (@images) { # $zip->addFile('PDL/Book/' . $img => $img); # } # $zip->overwrite(); #} sub _readFile($fname) { my @lines; open(my $ifh, '<', $fname) or croak($!); while((my $line = <$ifh>)) { chomp $line; push @lines, $line; } close $ifh; return @lines; } sub _slurpBinFile($fname) { # Read in file in binary mode, slurping it into a single scalar. # We have to make sure we use binmode *and* turn on the line termi +nation variable completly # to work around the multiple idiosynchrasies of Perl on Windows open(my $fh, "<", $fname) or croak("$ERRNO"); local $INPUT_RECORD_SEPARATOR = undef; binmode($fh); my $data = <$fh>; close($fh); return $data; }

        Basically, it concatenates all chapters, and inlines all images. There's a lot more to do to make it pretty and more readable (especially the code sections) and fix some encoding issues. But i do get a mostly usable book with chapters, subchapters, pretty pictures and about 226 pages (default font size on my Boox ereader), including a chapter called "POD ERRORS" at the very end ;-)

        Also, i still need to add all the .pl files as their own chapter at the very end of the book, so it's a COMPLETE reference.

        Edit: Forgot to say, this is a work in progress, and more posts will follow. But it's a good start for what is, for me, equivalent to a "My First Epub generator" picture book ("with simple, large letters for a first forray into the world of written words")...

        PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP
        Also check out my sisters artwork and my weekly webcomics
      See Re^2: PDL Book as epub? (POD source).

      You can even adjust the make_book.pl script to use a larger font in PDF

      > I was just hoping that someone already did

      I know that feeling, especially after waking up and seeing the pile of dishes in the kitchen... (Again!)

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      see Wikisyntax for the Monastery

Re^2: PDL Book as epub?
by etj (Curate) on Aug 10, 2024 at 04:57 UTC
    Warning: the specific link you give there is now gone, because the whole book is now a single web page on the site.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11160952]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2024-09-13 18:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The PerlMonks site front end has:





    Results (21 votes). Check out past polls.

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.