Giter Site home page Giter Site logo

pod-to-pdf-raku's Introduction

TITLE

Pod::To::PDF

SUBTITLE

Render Pod to PDF via Cairo

Usage

From command line:

$ raku --doc=PDF lib/to/class.rakumod --save-as=class.pdf

From Raku:

use Pod::To::PDF;
use Cairo;

=NAME
foobar.pl

=head2 SYNOPSIS
=code foobar.pl <options> files ...

my Cairo::Surface::PDF $pdf = pod2pdf($=pod, :save-as<foobar.pdf>);
$pdf.finish();

Command Line Options:

--save-as=pdf-filename

File-name for the PDF output file. If not given, the output will be saved to a temporary file. The file-name is echoed to stdout.

--width=n

Page width in points (default: 592)

--height=n

Page height in points (default: 792)

--margin=n

Page margin in points (default: 20)

--/toc

Disable table of contents

--/index

Disable index of terms

--page-numbers

Add page numbers (bottom right)

Exports

  • class Pod::To::PDF;

  • sub pod2pdf; # See below

From Raku code, the pod2pdf function returns a Cairo::Surface::PDF object which can be further manipulated, or finished to complete rendering.

Description

This module does simple rendering of Pod to PDF documents via Cairo.

The generated PDF has a table of contents and is tagged for accessibility and testing purposes.

It uses HarfBuzz for font shaping and glyph selection and FontConfig for system font loading.

Subroutines

sub pod2pdf()

sub pod2pdf(
    Pod::Block $pod
) returns Cairo::Surface::PDF;

pod2pdf() Options

Str() :$save-as

A filename for the output PDF file.

Cairo::Surface::PDF :$surface

A surface to render to

UInt:D :$width, UInt:D :$height

The page size in points (there are 72 points per inch).

UInt:D :$margin

The page margin in points (default 20).

Hash :@fonts

By default, Pod::To::PDF loads system fonts via FontConfig. This option can be used to preload selected fonts.

use Pod::To::PDF;
use Cairo;
my @fonts = (
    %(:file<fonts/Raku.ttf>),
    %(:file<fonts/Raku-Bold.ttf>, :bold),
    %(:file<fonts/Raku-Italic.ttf>, :italic),
    %(:file<fonts/Raku-BoldItalic.ttf>, :bold, :italic),
    %(:file<fonts/Raku-Mono.ttf>, :mono),
);

my Cairo::Surface::PDF $pdf = pod2pdf($=pod, :@fonts, :save-as<out.pdf>);
$pdf.finish();

Each font entry should have a file entry and various combinations of bold, italic and mono flags. Note that mono is used to render code blocks and inline code.

Str :%metadata

This can be used to preset values for title, subtitle, name, author or version.

This is an alternative to, and will override =TITLE, =SUBTITLE, =NAME, =AUTHOR or =VERSION directives.

Note: All of these are options are provided for compatibility, however only =TITLE and =AUTHOR are directly supported in PDF metadata.

:!contents

Disables Table of Contents generation.

:!index

Disable writing of a Index section to the table of contents.

:$linker

Provides a class or object to intercept and sanitise or rebase links. The class/object should provide a method resolve-link that accepts the target component of C<L<>> formatting codes and returns the actual link to be embedded in the PDF. The link is omitted, if the method returns an undefined value.

:%replace

Specify replacements for R<> placeholders in the POD. Replacement values should be simple strings (Str), Pod blocks (type Pod::Block), or a List. For example:

use Pod::To::PDF;
my $title = 'Sample Title';
my Str() $date = now.Date;
my $author = 'David Warring';
my $description = "sample Pod with replaced content";
my %replace = :$date, :$title, :$author, :$description;
my $renderer = pod2pdf($=pod, :%replace, :save-as<replace-example.pdf>);
$renderer.finish(); 

=begin pod
=TITLE R<title>
=AUTHOR R<author>
=DATE R<date>
=head2 Description
=para R<description>;
=end pod

Installation

This module's dependencies include HarfBuzz, Font::FreeType, FontConfig and Cairo, which further depend on native harfbuzz, freetype6, fontconfig and cairo libraries.

Please check these module's installation instructions.

Testing

Note that installation of the PDF::Tags::Reader module enables structural testing.

For example, to test this module from source.

$ git clone https://github.com/pod-to-pdf/Pod-To-PDF-raku
$ cd Pod-To-PDF-raku
$ zef install PDF::Tags::Reader # enable structural tests
$ zef APP::Prove6
$ zef --deps-only install .
$ prove6 -I .

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.