#!/usr/bin/perl
#
# PDF/X-4 starter:
# Create PDF/X-4 conforming output with layers and transparency
#
# A low-level layer is created for each of several languages, as well
# as an image layer. 
#
# The document contains transparent text which is allowed in
# PDF/X-4, but not earlier PDF/X standards.
#
# Required data: font file, image file, ICC output intent profile
#                (see www.pdflib.com for output intent ICC profiles)

use PDFlib::PDFlib;
use strict;

# This is where the data files are. Adjust as necessary.
use constant searchpath => "../data";
use constant imagefile => "zebra.tif";

my $p = new PDFlib::PDFlib;

eval {
    # This means we must check return values of load_font() etc.
    $p->set_option("errorpolicy=return");

    $p->set_option("SearchPath={{" . searchpath ."}}");

    if ($p->begin_document("starter_pdfx4.pdf", "pdfx=PDF/X-4")
            == -1) {
        printf("Error: %s\n", $p->get_errmsg());
        exit(2);
    }

    $p->set_info("Creator", "PDFlib starter sample");
    $p->set_info("Title", "starter_pdfx4");

    if ($p->load_iccprofile("ISOcoated_v2_eci.icc", "usage=outputintent") == -1)
    {
        printf("Error: %s\n", $p->get_errmsg());
        printf("See www.pdflib.com for output intent ICC profiles.\n");
        exit(2);
    }

    # Define the layers; "defaultstate" specifies whether or not
    # the layer is visible when the page is opened.

    my $layer_english = $p->define_layer("English text", "defaultstate=true");
    my $layer_german  = $p->define_layer("German text", "defaultstate=false");
    my $layer_french  = $p->define_layer("French text", "defaultstate=false");

    # Define a radio button relationship for the language layers.
 
    my $optlist = sprintf
            "group={%d %d %d}",
            $layer_english, $layer_german, $layer_french;
    $p->set_layer_dependency("Radiobtn", $optlist);

    my $layer_image   = $p->define_layer("Images", "defaultstate=true");

    $p->begin_page_ext(0,0, "width=a4.width height=a4.height");

    my $font = $p->load_font("NotoSerif-Regular", "unicode", "");

    if ($font == -1) {
        printf("Error: %s\n", $p->get_errmsg());
        exit(2);
    }

    $p->setfont($font, 24);

    $p->begin_layer($layer_english);

    $p->fit_textline("PDF/X-4 starter sample with layers", 50, 700, "");

    $p->begin_layer($layer_german);
    $p->fit_textline("PDF/X-4 Starter-Beispiel mit Ebenen", 50, 700, "");

    $p->begin_layer($layer_french);
    $p->fit_textline("PDF/X-4 Starter exemple avec des calques", 50, 700, "");

    $p->begin_layer($layer_image);

    my $image = $p->load_image("auto", imagefile, "");
    if ($image == -1) {
        printf("Error: %s\n", $p->get_errmsg());
        exit(2);
    }
    # Place the image on the page
    $p->fit_image($image, 0.0, 0.0, "");

    # Place a diagonal stamp across the image area
    my $width = $p->info_image($image, "width", "");
    my $height = $p->info_image($image, "height", "");

    $optlist = sprintf "boxsize={%f %f} font=%d stamp=ll2ur " .
        "fillcolor={lab 100 0 0} gstate={opacityfill=0.5}", $width, $height, $font;
    $p->fit_textline("Zebra", 0, 0, $optlist);

    $p->close_image($image);

    # Close all layers
    $p->end_layer();

    $p->end_page_ext("");

    $p->end_document("");
};

if ($@) {
    die("$0: PDFlib Exception occurred:\n$@");
}
