Java-apache PDFBox deux papiers A3 à un A2?


J'ai une imprimante qui ne prend pas en charge la fonctionnalité dont j'ai besoin.

L'imprimante imprime A2 format de papier. Je voudrais imprimer deux pages de taille A3, ce serait sur un seul papier A2, mais mon imprimante ne le prend pas en charge.

J'ai déjà appelé le support de la société, mais ils m'ont dit que je devais en acheter un plus récent car mon imprimante ne prend pas en charge cette fonction. (C'est très drôle parce qu'une version encore plus ancienne de cette imprimante prend en charge cela fonction).

J'ai donc essayé d'utiliser Apache PDFBox, où je peux charger mon fichier pdf comme ceci:

File pdfFile = new File(path);
PDDocument pdfDocument = load(pdfFile);

Le fichier que j'ai chargé est de taille A3. Je pense que ce serait suffisant si je pouvais obtenir un nouveau PDDocument avec A2 format de papier. Ensuite, mettez mon pdfFile chargé deux fois dans un A2 papier.

Dans l'ensemble, j'ai besoin du fichier que j'y ai chargé deux fois sur une page. Je ne sais pas comment faire.

Meilleures salutations.

Author: Leigh, 2013-05-18

1 answers

Vous voudrez peut-être regarder le PageCombinationSample.java qui, selon son JavaDoc, fait presque ce dont vous avez besoin:

Cet exemple montre comment combiner plusieurs pages en une seule plus grande page (par exemple deux modules A4 en un module A3) en utilisant le formulaire XObjects [PDF:1.6:4.9].

Form XObjects sont un moyen pratique de représenter le contenu plusieurs fois sur plusieurs pages comme modèle.

La centrale code:

// 1. Opening the source PDF file...
File sourceFile = new File(filePath);

// 2. Instantiate the target PDF file!
File file = new File();

// 3. Source page combination into target file.
Document document = file.getDocument();
Pages pages = document.getPages();
int pageIndex = -1;
PrimitiveComposer composer = null;
Dimension2D targetPageSize = PageFormat.getSize(SizeEnum.A4);
for(Page sourcePage : sourceFile.getDocument().getPages())
{
    pageIndex++;
    int pageMod = pageIndex % 2;
    if(pageMod == 0)
    {
        if(composer != null)
        {composer.flush();}

        // Add a page to the target document!
        Page page = new Page(
            document,
            PageFormat.getSize(SizeEnum.A3, OrientationEnum.Landscape)
        ); // Instantiates the page inside the document context.
        pages.add(page); // Puts the page in the pages collection.
        // Create a composer for the target content stream!
        composer = new PrimitiveComposer(page);
    }

    // Add the form to the target page!
    composer.showXObject(
        sourcePage.toXObject(document), // Converts the source page into a form inside the target document.
        new Point2D.Double(targetPageSize.getWidth() * pageMod, 0),
        targetPageSize,
        XAlignmentEnum.Left,
        YAlignmentEnum.Top,
        0
    );
}
composer.flush();

// 4. Serialize the PDF file!
serialize(file, "Page combination", "combining multiple pages into single bigger ones", "page combination");

// 5. Closing the PDF file...
sourceFile.close();
 0
Author: mkl, 2013-05-20 20:29:01