FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF.

Related tags

PDF php pdf fpdf fpdi
Overview

FPDI - Free PDF Document Importer

Latest Stable Version Total Downloads Latest Unstable Version License

This document refers to FPDI 2. Version 1 is deprecated and development is discontinued.

FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF, which was developed by Olivier Plathey. Apart from a copy of FPDF, FPDI does not require any special PHP extensions.

FPDI can also be used as an extension for TCPDF or tFPDF, too.

Installation with Composer

Because FPDI can be used with FPDF, TCPDF or tFPDF we haven't added a fixed dependency in the main composer.json file. You need to add the dependency to the PDF generation library of your choice yourself.

To use FPDI with FPDF include following in your composer.json file:

{
    "require": {
        "setasign/fpdf": "1.8.*",
        "setasign/fpdi": "^2.0"
    }
}

If you want to use TCPDF, you have to update your composer.json to:

{
    "require": {
        "tecnickcom/tcpdf": "6.3.*",
        "setasign/fpdi": "^2.0"
    }
}

If you want to use tFPDF, you have to update your composer.json to:

{
    "require": {
        "setasign/tfpdf": "1.31.*",
        "setasign/fpdi": "^2.3"
    }
}

Manual Installation

If you do not use composer, just require the autoload.php in the /src folder:

require_once('src/autoload.php');

If you have a PSR-4 autoloader implemented, just register the src path as follows:

$loader = new \Example\Psr4AutoloaderClass;
$loader->register();
$loader->addNamespace('setasign\Fpdi', 'path/to/src/');

Changes to Version 1

Version 2 is a complete rewrite from scratch of FPDI which comes with:

  • Namespaced code
  • Clean and up-to-date code base and style
  • PSR-4 compatible autoloading
  • Performance improvements by up to 100%
  • Less memory consumption
  • Native support for reading PDFs from strings or stream-resources
  • Support for documents with "invalid" data before their file-header
  • Optimized page tree resolving
  • Usage of individual exceptions
  • Several test types (unit, functional and visual tests)

We tried to keep the main methods and logical workflow the same as in version 1 but please notice that there were incompatible changes which you should consider when updating to version 2:

  • You need to load the code using the src/autoload.php file instead of classes/FPDI.php.
  • The classes and traits are namespaced now: setasign\Fpdi
  • Page boundaries beginning with a slash, such as /MediaBox, are not supported anymore. Remove the slash or use a constant of PdfReader\PageBoundaries.
  • The parameters $x, $y, $width and $height of the useTemplate() or getTemplateSize() method have more logical correct default values now. Passing 0 as width or height will result in an InvalidArgumentException now.
  • The return value of getTemplateSize() had changed to an array with more speaking keys and reusability: Use width instead of w and height instead of h.
  • If you want to use FPDI with TCPDF you need to refactor your code to use the class Tcpdf\Fpdi (since 2.1; before it was TcpdfFpdi) instead of FPDI.

Example and Documentation

A simple example, that imports a single page and places this onto a new created page:

<?php
use setasign\Fpdi\Fpdi;
// or for usage with TCPDF:
// use setasign\Fpdi\Tcpdf\Fpdi;

// or for usage with tFPDF:
// use setasign\Fpdi\Tfpdf\Fpdi;

// setup the autoload function
require_once('vendor/autoload.php');

// initiate FPDI
$pdf = new Fpdi();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile("Fantastic-Speaker.pdf");
// import page 1
$tplId = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplId, 10, 10, 100);

$pdf->Output();            

A full end-user documentation and API reference is available here.

Comments
  • Fixes fseek past the end-of-file

    Fixes fseek past the end-of-file

    Using FPDI on Google App Engine does not work since at some points it wants to reset the file pointer past the end-of-file. Unfortunately the Google Cloud Storage stream wrapper does not support that.

    From the PHP manual:

    In general, it is allowed to seek past the end-of-file; if data is then written, reads in any unwritten region between the end-of-file and the sought position will yield bytes with value 0. However, certain streams may not support this behavior, especially when they have an underlying fixed size storage.

    This PR contains one possible fix for the problem, since it manifests itself in pdf_parser::resolveObject() when resetting the pointer to $oldPos.

    Another solution would be to determine file size in the constructor of pdf_context and never allow $pos to be greater than $filesize - 1 in reset().

    Any input on this is most welcome. Would be nice if we can get this merged / fixed somehow.

    opened by smottt 14
  • [FPDI + FPDF] Getting ghostscript error when opening generated PDF with Imagick

    [FPDI + FPDF] Getting ghostscript error when opening generated PDF with Imagick

    I am having problems when trying to convert the pdf to png. The pdf looks ok, I can open it with PDF viewers, but Imagick or ghostcript fail when trying to convert it to images. I tried even with a very simple PDF without text, fonts or added images, but it still fails.

    Code to reproduce it:

    $outputPdf = new Fpdi('L', 'pt');
    $outputPdf->Output('/tmp/output.pdf', 'F');
    $pdf = new Imagick('/tmp/output.pdf');
    // The error occurs here
    

    Result when opening it with Imagick:

    Error: /execstackoverflow in --run--
    Operand stack:
       --dict:5/5(L)--   0   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   16   false   20   false   --nostringval--   --nostringval--   --nostringval--
    Execution stack:
       %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1999   1   3   %oparray_pop   1998   1   3   %oparray_pop   1982   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   2   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   4   %dict_continue   --nostringval--   --nostringval--   --dict:7/7(L)--   --nostringval--   8   %dict_continue   --nostringval--   --nostringval--
    Dictionary stack:
       --dict:1216/1684(ro)(G)--   --dict:1/20(G)--   --dict:83/200(L)--   --dict:83/200(L)--   --dict:137/256(ro)(G)--   --dict:298/300(ro)(G)--   --dict:32/32(L)--   --dict:0/6(L)--
    Current allocation mode is local
    Last OS error: No such file or directory
    GPL Ghostscript 9.21: Unrecoverable error, exit code 1
    

    Adobe's site says that this kind of error indicate the file contains unintelligible PostScript code.

    opened by mcustiel 12
  • 502 Gateway Error

    502 Gateway Error

    I am seeing 502 gateway errors when simply instantiating the FPDI class:

    use FPDI;
    // ...
    $pdf = new FPDI();
    

    My environment is as follows:

    • PHP 7.1
    • Ubuntu 16.04
    • Laravel Homestead Vagrant VM
    opened by mikebronner 12
  • setasign\Fpdi\PdfParser\Type\PdfTypeException Dictionary value expected.

    setasign\Fpdi\PdfParser\Type\PdfTypeException Dictionary value expected.

    We are receiving the above error for a few PDF's that are trying to be processed through our system. I assume this means that the PDF isn't in a 'perfect' format so FPDI struggles to open it however is this something that could be worked around as the PDF opens in PDF readers. The stack trace is below.

    We are using FPDI 2.3.3

    setasign\Fpdi\PdfParser\Type\PdfTypeException: Dictionary value expected.
    #5 vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php(63): ensureType
    #4 vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php(132): ensure
    #3 vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php(112): get
    #2 vendor/setasign/fpdi/src/FpdiTrait.php(351): importPage
    

    I can send you two sample PDF's which this occurs on, is it best to email [email protected]?

    It throws the error on:

    if (!($value instanceof $type)) {
                throw new PdfTypeException(
                    $errorMessage,
                    PdfTypeException::INVALID_DATA_TYPE
                );
    }
    

    With $type == setasign\Fpdi\PdfParser\Type\PdfDictionary and $value is equal to below:

    {
    CreationDate: Object setasign\Fpdi\PdfParser\Type\PdfString, 
    Creator: Object setasign\Fpdi\PdfParser\Type\PdfString, 
    ModDate: Object setasign\Fpdi\PdfParser\Type\PdfString, 
    Producer: Object setasign\Fpdi\PdfParser\Type\PdfString
    }
    

    Thanks!

    opened by ollyculverhouse 10
  • output method not  working .Says the connection was reset.

    output method not working .Says the connection was reset.

    hi, i installed this package in my laravel app.This is my controller method.It seems Output method not working.

    <?php
    
    namespace App\Http\Controllers;
    
    
    use setasign\Fpdi\Fpdi;
    
    //use setasign\Fpdi\Tfpdf;
           
    use setasign\Fpdi\PdfReader;
    
    use Illuminate\Http\Request;
    
    class FileController extends Controller
    {
        //
    
        public function sendquotation()
        {
            $hii = new Fpdi();
    
            $hii->setSourceFile(__DIR__."\quotation.pdf");
            $pageId = $hii->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX); 
            $hii->addPage();
            $hii->useImportedPage($pageId, 10, 10, 90);
            
            // return 123 // all is good here 
            echo $hii->Output();  // this line says the connection was reset.
            
            die();
        }
             
           
        
    }
    
    
    

    i am trying to solve this dd each value but it is not working.Please help me to set this.

    opened by 3ubeen3 10
  • Broken PDF after merging

    Broken PDF after merging

    I used Word 16 on W10 to generate a PDF (with save as, print, print with win2pdf). Then I use FPDF to generate another PDF.

    Now I try to merge the two PDFs with FPDI (I can detail how if it is necessary). The PDF generated by Word end broken, all special chars are replaced, some string appears. And here is the strange stuff :

    • when I display the PDF using Chrome, the string "VHUD FpGp DX FOLHQW" (etc.) appears instead of the text
    • when I select this string, copy it and paste it in notepad, I got "FDWLRQHQ France Métropolitaine ±Dans tous les cas se renseigner auprès de son opérateur. Date Indicative de mise en service : Le numéro "

    And the PDF generated by FPDF is properly merged.

    Do you have any idea how to solve this ? I can provide the document for analysis if you need (but in private due to personnal data in it)

    Thanks a lot

    opened by captainSviridian 10
  • Stream value expected

    Stream value expected

    I keep getting this error

    Caused by: setasign\Fpdi\PdfParser\Type\PdfTypeException Stream value expected. vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php:61 setasign\Fpdi\PdfParser\Type\PdfType::ensureType vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php:101 setasign\Fpdi\PdfParser\Type\PdfStream::ensure vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php:216 setasign\Fpdi\PdfParser\CrossReference\CrossReference::initReaderInstance vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php:188 setasign\Fpdi\PdfParser\CrossReference\CrossReference::readXref vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php:64 setasign\Fpdi\PdfParser\CrossReference\CrossReference::__construct vendor/setasign/fpdi/src/PdfParser/PdfParser.php:155 setasign\Fpdi\PdfParser\PdfParser::getCrossReference vendor/setasign/fpdi/src/PdfParser/PdfParser.php:197 setasign\Fpdi\PdfParser\PdfParser::getCatalog vendor/setasign/fpdi/src/PdfParser/PdfParser.php:179 setasign\Fpdi\PdfParser\PdfParser::getPdfVersion vendor/setasign/fpdi/src/PdfReader/PdfReader.php:82 setasign\Fpdi\PdfReader\PdfReader::getPdfVersion vendor/setasign/fpdi/src/FpdiTrait.php:182 setasign\Fpdi\Fpdi::setSourceFile vendor/iio/libmergepdf/src/Merger.php:136 iio\libmergepdf\Merger::merge

    Any ideas?

    opened by joachimVT 10
  • Get Pagebox sizes without importing pages multiple times

    Get Pagebox sizes without importing pages multiple times

    Hello,

    currently it seems I can only get the size of different page boxes this way:

    $media = $pdf->importPage(1, PageBoundaries::MEDIA_BOX);
    $bleed = $pdf->importPage(1, PageBoundaries::BLEED_BOX);
    $trim = $pdf->importPage(1, PageBoundaries::TRIM_BOX);
    $mediaSize = $pdf->getImportedPageSize($media);
    $bleedSize = $pdf->getImportedPageSize($bleed);
    $trimSize = $pdf->getImportedPageSize($trim);
    

    This will however load and process more stuff than needed and the data will not be garbage collected, since refs are inside FPDI instance and there is no clear API.

    What I actually need is, access to the PdfReader to retrieve the Page and then get the box.

    $reader = $this->getPdfReader($this->currentReaderId);
    $page = $reader->getPage($pageNumber);
    $bbox = $page->getBoundary($box);
    

    This could keep internal, with an additional public API on FPDI via FpdiTrait:

    public FpdiTrait::getPageBox($pageNumber, $boxName): bool|Rectangle;

    Or instead of page number, via imported page id - but this would require to import the page before.

    This would enable importing a page and also take the defined boxes.

    I would like to avoid working with internals and instantiating Reader,Stream, etc. manually outside FDPI

    opened by akomm 9
  • FDPI scale instead of crop

    FDPI scale instead of crop

    Hello

    I am currently using FDPI to merge PDFs together and the size of the PDF that I get should be in A4. This works fine so far, however when the PDF that I am importing are bigger than A4, it is cropped. I would like it to become A4 but not cropped and instead scaled down.

    Is there a possibility for this?

    Here is my code:

                                        // Merging of the existing PDF pages to the final PDF
                                        $pageCount = $tcpdfObject->setSourceFile($fileUniqueName);
                                        for ($i = 1; $i <= $pageCount; $i++) {
                                              $tplIdx = $tcpdfObject->importPage($i, '');
                                              $specs = $tcpdfObject->getTemplateSize($tplIdx);
                                              $tcpdfObject->addPage($specs['h'] > $specs['w'] ? 'P' : 'L');
                                              $tcpdfObject->useTemplate($tplIdx, null, null, 0, 0, false);
                                        }
    
    opened by Lagily 9
  • PHP 7.1 compatibility

    PHP 7.1 compatibility

    Hi, we currently use this library on moodle core.

    Doing some compatibility tests on the new php version (7.1) we noticed a error on this line.

    _Exception - Call to undefined method FPDF_TPL::prepareValue()

    Apparently there were some changes on the way php handles inheritance, probably that's why this works fine on PHP7 but not on 7.1

    opened by lameze 8
  • FPDI Setup using CodeIgniter 3

    FPDI Setup using CodeIgniter 3

    I am learning PHP using CodeIgniter 3. I am able to setup and reference to the php folder as per instruction, but FPDI not able to work. Need some of your guidance to make it work. I have tried to enable debug printing but not able to catch any errors. So far FPDF is working fine as in Test2() but for FPDI seems not working in Test().

    Thank you in advance.

    use setasign\Fpdi\Fpdi;
    define('FPDF_FONTPATH', 'font/');
    require_once APPPATH.'third_party/fpdf/fpdf.php';
    require_once APPPATH.'third_party/fpdi/src/autoload.php';
    
    ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 
    
    class EvpPDF
    {
        function Test2(){
            $pdf = new FPDF();
            $pdf->AddPage();
            $pdf->SetFont('Arial', 'B', '24'); 
            $pdf->SetXY(50,100);
            $pdf->Write(10,'www.test.com','https://www.test.com');
            $pdf->Output(DOC_ROOT.'assets/sample.pdf', 'F');
        }
    
        function Test(){
            if (11==1)
                //FPDF tested working
                $this -> Test2();
            else
            {
                $pdf = new FPDI(); // Stuck at this line and loaded php white blank page
                $pdf->AddPage();
                $pageCount = $pdf->setSourceFile(DOC_ROOT.'assets/test.pdf');
                 // // $pageId = $pdf->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);
                $tplIdx = $pdf->importPage(1); 
                $pdf->useTemplate($tplIdx); 
                $pdf->SetFont('Arial', 'B', '24'); 
                $pdf->SetXY(50,100);
                $pdf->Write(10,'www.ApnaCode.com','https://www.apnacode.com');
                $pdf->Output(DOC_ROOT.'assets/sample_updated.pdf', 'F');   
            }
        
        }
    
    opened by hon-rp 7
  • Cant open generated file in chrome android and ios devices

    Cant open generated file in chrome android and ios devices

    I notice when outputting my PDF either via Output() or Output("I") the document properly displays on the screen both on my PC and iOS device. However, when viewing the PDF on the iOS device it doesn't seem to realize that it's a PDF so it doesn't give the options to open with or send-to PDF-related applications. Then today while running the developer tools on Chrome on my PC, I noticed the following error when trying to view the generated PDF "Resource interpreted as Document but transferred with MIME type application/pdf". So it would seem that while FPDI is sending it with the correct MIME headers, for some reason Chrome (and apparently my iOS device both Safari and Chrome) are also seeing it as a "document" instead of a "PDF. Any clues as to the settings that need to be changed so that the browsers properly see the Outputted code as a real PDF instead of a generic Document type? Thanks.

    opened by codieslabdev 1
  • PHP 8.1 - Deprecated error in setasign\Fpdi\Tcpdf\Fpdi

    PHP 8.1 - Deprecated error in setasign\Fpdi\Tcpdf\Fpdi

    In my project under symfony 6.1 (php 8.1), I have the error message below that appears:

    Method "TCPDF::_getxobjectdict()" might add "string" as a native return type declaration in the future. Do the same in child class "setasign\Fpdi\Tcpdf\Fpdi" now to avoid errors or add an explicit @return annotation to suppress this message.

    opened by flavou45 3
  • Unable to find PDF file header

    Unable to find PDF file header

    Hello I get this error when I try to load a pdf file from AWS S3. The file itself has public access and is loading fine.

    $s3Client->registerStreamWrapper();
    $fpdi->setSourceFile('s3://bucket/file.pdf');
    

    But when I load the same file from local storage it works just fine

    $fpdi->setSourceFile('./images/file.pdf');
    

    Can you please explain what I'm doing wrong?

    opened by KonstantinKolodnitsky 14
  • Validate $filename in StreamReader::createByFile()

    Validate $filename in StreamReader::createByFile()

    Actually there's no validation before the parameter is passed to fopen(). This could end in a warning.

    We could fix this by something like:

    if (!(\file_exists($filename) || \is_readable($filename))) {
        throw new \InvalidArgumentException("File does not exists or is not readable.");
    }
    

    But this would break usage with stream-wrappers which do not implement url_stat() completely (without mode(2)).

    So implementing this check would be a BC break.

    Any needs to "fix" this or is the current E_WARNING enough? Ideas?

    opened by JanSlabon 0
  • Add handling of PDF documents with direct pages

    Add handling of PDF documents with direct pages

    Such object structures are invalid but sadly there are some PDF creators on the road which produces them...

    We need to simulate indirect objects in this case. We could use the trailer object to get the size entry + an offset for the new entries. We will "repair" the page tree at runtime.

    A public test document needs to be created manually.

    enhancement 
    opened by JanSlabon 0
Releases(v2.3.6)
  • v2.3.6(Feb 11, 2021)

  • v2.3.5(Dec 3, 2020)

  • v2.3.4(Aug 27, 2020)

    Fixes

    • Fixed fallback in Filter\Flate::decode().
    • Fixed minor documentation errors in doc blocks.
    • Supressed notice in flate filter for PHP 8.0.

    Tweaks

    • Micro optimization of LineReader::extract().
    • Added visual tests to testsuite.
    • Added PHP_CodeSniffer and PHPStan inspections.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.3(Apr 28, 2020)

  • v2.3.2(Mar 23, 2020)

  • v2.3.1(Mar 10, 2020)

  • v2.3.0(Feb 19, 2020)

    Fixes

    • Optimized decoding in Ascii85 filter class.
    • Fixed PHP 7.4 compatibility issue when calling hexdec() with invalid characters.

    Features

    • Added support for tFPDF 1.31 which is based on FPDF 1.82.

    Tweaks

    • Updated copyright information.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jan 30, 2019)

    Fixes

    • Added cleanUp() method in FpdiTrait and StreamReader to close open file handles when they are not used anymore (#70).

    Features

    • Added support for handling FlateDecode streams that uses CRC32 checksum.
    • Added support for indirect references in /Length values of stream dictionaries.
    • Added support for reading streams with an invalid /Length value.

    Tweaks

    • Use fully-qualified function calls.
    • Fixed wording in various DocBlocks.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Nov 6, 2018)

  • v2.1.0(Sep 13, 2018)

    Fixes

    • Save colors in FpdfTpl state. (#51)
    • Ignore cross-reference pointers to byte offset 0. (#55 / #58)

    Features

    • Added support for tFPDF.
    • Optimized PdfParser::readValue() to handle an expected object type and implemented this on various calls. (#22)

    Tweaks

    • Moved Fpdi\TcpdfFpdi to Fpdi\Tcpdf\Fpdi (the old class still exists but is marked as deprecated).
    • Optimized DocBlocks and code style.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Apr 18, 2018)

    Fixes

    • Prohibit calling of AddPage() or setPageFormat() if a template is active. (#45)
    • Save "underline" property in FpdfTpl. (#44)

    Features

    • Added $groupXObject parameter to FpdfTpl::beginTemplate() method. (#25)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Feb 22, 2018)

    Fixes

    • Added support for escaped version numbers in Version (name) entry in document catalog.
    • Check parser instance in destruct method.

    Tweaks

    • Fixed interchanged parameters in doc-block (#40).
    • Added .gitattributes to remove irrelevant files from release package.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Nov 14, 2017)

    Fixes

    • Optimize closing of file handle in StreamReader class. (#30)

    Tweaks

    • All internal function calls are FQN calls now.
    • Added @noinspection annotations.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Oct 12, 2017)

    Final release of FPDI 2:

    • Namespaced code
    • Clean and up-to-date code base and style
    • PSR-4 compatible autoloading
    • Performance improvements by up to 100%
    • Less memory consumption
    • Native support for reading PDFs from strings or stream-resources
    • Support for documents with "invalid" data before their file-header
    • Optimized page tree resolving
    • Usage of individual exceptions
    • Several test types (unit, functional and visual tests)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.2(May 11, 2017)

    Bugfixes:

    • Clean-up properties if a parser instance throws an exception at construction time.
    • Ignore invalid object references/types in a pages content array.
    • Throw an exception if a page object isn't an indirect object.
    • Optimized pdf_context::getPos() method if stream position is beyond end of file.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Oct 12, 2015)

    Switch from Apache Software License, Version 2.0 to MIT License. Bugfix: Added integer cast in ASCII85 filter for PHP 7 compatibility reason.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.4(May 18, 2015)

    No new features or bugfixes. This release includes only changes to the composer.json which allows us to create packages with fixed dependencies:

    • https://github.com/Setasign/FPDI-FPDF
    • https://github.com/Setasign/FPDI-TCPDF
    Source code(tar.gz)
    Source code(zip)
Owner
Setasign
PDF solutions in pure PHP
Setasign
Magento 2 Invoice PDF Generator - helps you to customize the pdf templates for Magento 2

Magento 2 Invoice PDF Generator - helps you to customize the pdf templates for Magento 2. If you have an enabled template and a default template for the store you need your template the system will print the pdf template.

EAdesign 64 Oct 18, 2021
Official clone of PHP library to generate PDF documents and barcodes

TCPDF PHP PDF Library Please consider supporting this project by making a donation via PayPal category Library author Nicola Asuni [email protected] co

Tecnick.com LTD 3.6k Jan 6, 2023
Official clone of PHP library to generate PDF documents and barcodes

TCPDF PHP PDF Library Please consider supporting this project by making a donation via PayPal category Library author Nicola Asuni [email protected] co

Tecnick.com LTD 3.6k Dec 26, 2022
Pdf and graphic files generator library written in php

Information Examples Sample documents are in the "examples" directory. "index.php" file is the web interface to browse examples, "cli.php" is a consol

Piotr Śliwa 335 Nov 26, 2022
A PHP tool that helps you write eBooks in markdown and convert to PDF.

Artwork by Eric L. Barnes and Caneco from Laravel News ❤️ . This PHP tool helps you write eBooks in markdown. Run ibis build and an eBook will be gene

Mohamed Said 1.6k Jan 2, 2023
A PDF conversion and form utility based on pdftk

php-pdftk A PDF conversion and form utility based on pdftk. Features php-pdftk brings the full power of pdftk to PHP - and more. Fill forms, either fr

Michael Härtl 800 Jan 9, 2023
HTML to PDF converter for PHP

Dompdf Dompdf is an HTML to PDF converter At its heart, dompdf is (mostly) a CSS 2.1 compliant HTML layout and rendering engine written in PHP. It is

null 9.3k Jan 1, 2023
PHP library generating PDF files from UTF-8 encoded HTML

mPDF is a PHP library which generates PDF files from UTF-8 encoded HTML. It is based on FPDF and HTML2FPDF (see CREDITS), with a number of enhancement

null 3.8k Jan 2, 2023
PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage

Snappy Snappy is a PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. It uses the excellent webkit-based wkhtmltopd

KNP Labs 4.1k Dec 30, 2022
TCPDF - PHP PDF Library - https://tcpdf.org

tc-lib-pdf PHP PDF Library UNDER DEVELOPMENT (NOT READY) UPDATE: CURRENTLY ALL THE DEPENDENCY LIBRARIES ARE ALMOST COMPLETE BUT THE CORE LIBRARY STILL

Tecnick.com LTD 1.3k Dec 30, 2022
PdfParser, a standalone PHP library, provides various tools to extract data from a PDF file.

PdfParser Pdf Parser, a standalone PHP library, provides various tools to extract data from a PDF file. Website : https://www.pdfparser.org Test the A

Sebastien MALOT 1.9k Jan 2, 2023
Generate simple PDF invoices with PHP

InvoiScript Generate simple PDF invoices with PHP. Installation Run: composer require mzur/invoiscript Usage Example use Mzur\InvoiScript\Invoice; re

Martin Zurowietz 16 Aug 24, 2022
PHP library allowing PDF generation or snapshot from an URL or an HTML page. Wrapper for Kozea/WeasyPrint

PhpWeasyPrint PhpWeasyPrint is a PHP library allowing PDF generation from an URL or an HTML page. It's a wrapper for WeasyPrint, a smart solution help

Pontedilana 23 Oct 28, 2022
PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page.

Snappy Snappy is a PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. It uses the excellent webkit-based wkhtmltopd

KNP Labs 4.1k Dec 30, 2022
Convert HTML to PDF using Webkit (QtWebKit)

wkhtmltopdf and wkhtmltoimage wkhtmltopdf and wkhtmltoimage are command line tools to render HTML into PDF and various image formats using the QT Webk

wkhtmltopdf 13k Jan 4, 2023
Convert html to an image, pdf or string

Convert a webpage to an image or pdf using headless Chrome The package can convert a webpage to an image or pdf. The conversion is done behind the sce

Spatie 4.1k Jan 1, 2023
Laravel Snappy PDF

Snappy PDF/Image Wrapper for Laravel 5 and Lumen 5.1 This package is a ServiceProvider for Snappy: https://github.com/KnpLabs/snappy. Wkhtmltopdf Inst

Barry vd. Heuvel 2.3k Jan 2, 2023
Sign PDF files with valid x509 certificate

Sign PDF files with valid x509 certificate Require this package in your composer.json and update composer. This will download the package and the depe

Lucas Nepomuceno 175 Jan 2, 2023
Convert a pdf to an image

Convert a pdf to an image This package provides an easy to work with class to convert PDF's to images. Spatie is a webdesign agency in Antwerp, Belgiu

Spatie 1.1k Dec 29, 2022