.. module:: pdffile
   :synopsis: Native vector inclusion of PDF pages

.. _pdffile:

*****************************************
Module :mod:`pdffile`: PDF file inclusion
*****************************************

The :mod:`pdffile` module embeds pages from external PDF files directly as native
vector PDF Form XObjects when generating PDF output, preserving all vector paths,
embedded fonts, images, and resources:

.. code-block:: python

   from pyx import *

   c = canvas.canvas()
   c.insert(pdffile.pdffile(0, 0, "diagram.pdf", page=1, width=8))
   c.writePDFfile("output")


Class :class:`pdffile`
======================

.. class:: pdffile(x, y, filename, width=None, height=None, scale=None, align="bl", clip=1, translatebbox=True, bbox=None, page=1, kpsearch=False)

   Creates a canvas item representing page *page* of the external PDF file
   *filename* placed at ``(x, y)`` (in user units or PyX lengths).

   +--------------------------+---------------------------------------------------------------+
   | Argument                 | Description                                                   |
   +==========================+===============================================================+
   | ``x``, ``y``             | Coordinates of the reference point at which the PDF page is   |
   |                          | placed.                                                       |
   +--------------------------+---------------------------------------------------------------+
   | ``filename``             | Path to the PDF file, or an open binary file-like object.     |
   +--------------------------+---------------------------------------------------------------+
   | ``width=None``           | Desired width of the graphic, or ``None`` to use its natural  |
   |                          | bounding-box width (or scale proportionally from *height*).   |
   |                          | Cannot be combined with *scale*.                              |
   +--------------------------+---------------------------------------------------------------+
   | ``height=None``          | Desired height of the graphic, or ``None`` to use its natural |
   |                          | bounding-box height (or scale proportionally from *width*).   |
   |                          | Cannot be combined with *scale*.                              |
   +--------------------------+---------------------------------------------------------------+
   | ``scale=None``           | Uniform scaling factor, or ``None`` for no scaling. Cannot be |
   |                          | combined with *width* or *height*.                            |
   +--------------------------+---------------------------------------------------------------+
   | ``align="bl"``           | Two-character alignment string specifying how the PDF page is |
   |                          | aligned relative to ``(x, y)``. The first character sets      |
   |                          | vertical alignment (``"b"`` bottom, ``"c"`` center, ``"t"``   |
   |                          | top) and the second sets horizontal alignment (``"l"`` left,  |
   |                          | ``"c"`` center, ``"r"`` right).                               |
   +--------------------------+---------------------------------------------------------------+
   | ``clip=1``               | When true (default), clips the included page to its bounding  |
   |                          | box.                                                          |
   +--------------------------+---------------------------------------------------------------+
   | ``translatebbox=True``   | When true (default), translates the PDF page so that the      |
   |                          | lower-left corner of its bounding box sits at the reference   |
   |                          | origin before scaling and alignment.                          |
   +--------------------------+---------------------------------------------------------------+
   | ``bbox=None``            | Optional :class:`bbox.bbox` overriding the page's ``CropBox`` |
   |                          | (or ``MediaBox`` if no ``CropBox`` is defined).               |
   +--------------------------+---------------------------------------------------------------+
   | ``page=1``               | 1-based page number of the PDF file to include.               |
   +--------------------------+---------------------------------------------------------------+
   | ``kpsearch=False``       | When true, locates *filename* via the TeX ``kpathsea`` file   |
   |                          | search system (:mod:`config`).                                |
   +--------------------------+---------------------------------------------------------------+

.. note::

   Because :class:`pdffile` embeds the page's content stream and resource
   dictionary directly as a PDF Form XObject, it is supported when writing PDF
   output (:meth:`canvas.canvas.writePDFfile` and
   :meth:`document.document.writePDFfile`).
