Как написать код Java для печати PDF, созданного с помощью iText - PullRequest
2 голосов
/ 28 декабря 2011

Я написал код Java, который создает PDF с библиотекой iText, проблема в том, что я не могу использовать iText для печати этого PDF, поэтому я начал поискать в Google библиотеку Java PDF под названием PDFrenderer.Вопрос в том, как я могу использовать библиотеку PDFrenderer для написания программы, которая поможет мне распечатать мой файл PDF?Предполагая, что код pdfwriter создан с использованием iText.Я разрабатываю приложение (для настольных ПК), где клиенты могут создавать PDF-файлы и отправлять их непосредственно на принтер.

Любая помощь приветствуется

Муад

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011
1 голос
/ 10 сентября 2016

Я использую это для печати PDF-файлов ...

public class PDFPrinter {

public PDFPrinter(File file) {
    try {
        FileInputStream fis = new FileInputStream(file);
        FileChannel fc = fis.getChannel();
        ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
        fis.close();
        fc.close();
        PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
        PDFPrintPage pages = new PDFPrintPage(pdfFile);

        // Create Print Job
        PrinterJob pjob = PrinterJob.getPrinterJob();
        PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
        Paper a4paper = new Paper();
        double paperWidth = 8.26;
        double paperHeight = 11.69;
        a4paper.setSize(paperWidth * 72.0, paperHeight * 72.0);

        /*
         * set the margins respectively the imageable area
         */
        double leftMargin = 0.3;
        double rightMargin = 0.3;
        double topMargin = 0.5;
        double bottomMargin = 0.5;

        a4paper.setImageableArea(leftMargin * 72.0, topMargin * 72.0,
                (paperWidth - leftMargin - rightMargin) * 72.0,
                (paperHeight - topMargin - bottomMargin) * 72.0);
        pf.setPaper(a4paper);

        pjob.setJobName(file.getName());
        Book book = new Book();
        book.append(pages, pf, pdfFile.getNumPages());
        pjob.setPageable(book);

        // Send print job to default printer
        if (pjob.printDialog()) {
            pjob.print();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (PrinterException e) {
        JOptionPane.showMessageDialog(null, "Printing Error: "
                + e.getMessage(), "Print Aborted",
                JOptionPane.ERROR_MESSAGE);
        e.printStackTrace();
    }
}

class PDFPrintPage implements Printable {
    private PDFFile file;

    PDFPrintPage(PDFFile file) {
        this.file = file;
    }

    public int print(Graphics g, PageFormat format, int index)
            throws PrinterException {
        int pagenum = index + 1;

        // don't bother if the page number is out of range.
        if ((pagenum >= 1) && (pagenum <= file.getNumPages())) {
            // fit the PDFPage into the printing area
            Graphics2D g2 = (Graphics2D) g;
            PDFPage page = file.getPage(pagenum);
            double pwidth = format.getImageableWidth();
            double pheight = format.getImageableHeight();

            double aspect = page.getAspectRatio();
            double paperaspect = pwidth / pheight;

            Rectangle imgbounds;

            if (aspect > paperaspect) {
                // paper is too tall / pdfpage is too wide
                int height = (int) (pwidth / aspect);
                imgbounds = new Rectangle(
                        (int) format.getImageableX(),
                        (int) (format.getImageableY() + ((pheight - height) / 2)),
                        (int) pwidth, height);
            } else {
                // paper is too wide / pdfpage is too tall
                int width = (int) (pheight * aspect);
                imgbounds = new Rectangle(
                        (int) (format.getImageableX() + ((pwidth - width) / 2)),
                        (int) format.getImageableY(), width, (int) pheight);
            }

            // render the page
            PDFRenderer pgs = new PDFRenderer(page, g2, imgbounds, null,
                    null);
            try {
                page.waitForFinish();
                pgs.run();
            } catch (InterruptedException ie) {
            }

            return PAGE_EXISTS;
        } else {
            return NO_SUCH_PAGE;
        }
    }
}
}

Я называю это с:

new PDFPrinter(file);

PS: Вам нужен PDFRender.jar

1 голос
/ 28 декабря 2011

Java Desktop API позволяет делегировать такие задачи, как отправка электронной почты и печать операционной системе.http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...