print pdf with java

12,256

I think PDFBox from Apache better suit your need (http://pdfbox.apache.org/).

Here is how it can fit inside your code:

static public void main(String[] args) {
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pf = job.defaultPage();
    Paper paper = new Paper();
    paper.setSize(612.0, 832.0);
    double margin = 10;
    paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
    pf.setPaper(paper);
    pf.setOrientation(PageFormat.LANDSCAPE);

    // PDFBox
    PDDocument document = PDDocument.load("yourfile.pdf");
    job.setPageable(new PDPageable(document, job));

    job.setJobName("funciona?");
    try {
        job.print();
    } catch (PrinterException e) {
        System.out.println(e);
    }
}

You can find more info about this if you look at the source of org.apache.pdfbox.PrintPDF.

Share:
12,256
Ivan
Author by

Ivan

Updated on July 27, 2022

Comments

  • Ivan
    Ivan almost 2 years

    I have tried to print pdf with this code:

    package imprimir;
    
    import java.io.*;
    import java.awt.print.*;
    import java.awt.print.PrinterJob.*;
    import java.awt.print.PageFormat.*;
    
    public class Imprimir {
    
        static public void main(String[] args) {
            PrinterJob job = PrinterJob.getPrinterJob();
            PageFormat pf = job.defaultPage();
            Paper paper = new Paper();
            paper.setSize(612.0, 832.0);
            double margin = 10;
            paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
            pf.setPaper(paper);
            pf.setOrientation(PageFormat.LANDSCAPE);
            job.setPrintable(new ObjetoDeImpresion(), pf);
            job.setJobName("funciona?");
            try {
                job.print();
            } catch (PrinterException e) {
                System.out.println(e);
            }
        }
    }
    
    
    package imprimir;
    
    import java.awt.*;
    import java.awt.print.*;
    
    public class ObjetoDeImpresion implements Printable {
    
        public int print(Graphics g, PageFormat f, int pageIndex) {
            if (pageIndex == 0) {
                g.drawString("Hola ivan", 100, 200);
                return PAGE_EXISTS;
            } else {
                return NO_SUCH_PAGE;
            }
        }
    }
    

    and also from other different ways there on the internet, but with all the ways I've tried, when I print the document, print odd numbers and letters, like this:

    % PDF ||1.6
    endobobj <</linerrized 1/L 20597/O 40/E 14115/N 1/T ............
    xref
    37 34
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    0000000013 00000 n
    ...
    ..
    ..
    trailer
    <</Size...... 
    

    Someone can help me achieve print my document?