Печать нескольких PDF-файлов из Java как одно задание печати (физическая печать) - PullRequest
3 голосов
/ 22 апреля 2009

Я хотел бы напечатать несколько PDF-файлов из Java (используя службу печати Java) в одном задании на печать.

Я хотел бы отправить несколько файлов PDF в качестве одного задания на принтер. Это сделано для того, чтобы все документы в моей «пакетной» печати печатались вместе и не чередовались с чужими заданиями на печать, когда я беру их с принтера.

Пакет потенциально состоит из 1000 заданий на печать.

Я пробовал jpedal, но он не поддерживает java.awt.print.Book

        Book book = new Book();
        PdfDecoder pdfDecoder = readFileApplyOptions("C:/Temp/singlepagetest.pdf", pageFormat);
        book.append(pdfDecoder, pageFormat);

        PdfDecoder pdfDecoderTwo = readFileApplyOptions("C:/Temp/printfax-test.pdf",pageFormat);
        book.append(pdfDecoderTwo, pageFormat);

        printJob.setPageable(book);
        printJob.print();

распечатывает только первый pdf. Как мне распечатать несколько PDF-файлов за одно задание?

readFileAndApplyOptions () в основном создает новый объект PdfDecoder и возвращает его.

Я также попробовал SunR PDFRenderer PDFRenderer аналогичным образом (с использованием объекта Book), но мой код все еще печатает только первую страницу.

Кто-нибудь сталкивался с подобной проблемой раньше? Есть ли решение, которое я мог бы упустить?

Ответы [ 4 ]

2 голосов
/ 23 ноября 2010

Я столкнулся с такими же трудностями при печати сразу нескольких JPanel JTabbedPane, каждая на отдельной странице Я собираю их в Книгу, но она печатает только первую страницу.

Класс Book работает хорошо (нужное количество страниц), но я полагаю, проблема в setPageable. Так как Книга не для печати, я сделал это, и она работает!

Обход:

  1. Дизайн класса PrintableBook: расширяет книгу, реализует Printable

    public class PrintableBook extends Book implements Printable {
        Vector<Printable> pages;// NB: we assume pages are single
    
        public PrintableBook() {
            super();
            pages = new Vector<Printable>();
        }
    
        public void add(Printable pp) {
            append(pp, pp.getPageFormat());
            pages.add(pp);
        }
    
        public int print(Graphics g, PageFormat pf, int pageIndex) {
            if (pageIndex >= pages.size())
                return NO_SUCH_PAGE;
            else {
                Printable pp = pages.elementAt(pageIndex);
                return pp.print(g, pf, 0);
            }
        }
    }
    
  2. Затем используйте printJob.setPrintable( printableBook ) вместо setPageable

2 голосов
/ 04 августа 2009

Не специфично для Java, но у меня есть опыт этого в C #. Я решил эту проблему, напечатав каждый документ в файл (программно эквивалентный проверке флажка «PrintToFile» в диалоговом окне печати), а затем объединил каждый файл в поток памяти, который я передал в спул принтера Win32 API в формате raw (поскольку вывод в файл уже был правильно отформатирован по умолчанию).

Возможно, вы сможете использовать подобную технику в Java

1 голос
/ 06 сентября 2010

Вы должны объединить все ваши документы в формате PDF в один документ с использованием библиотеки iText , а затем распечатать объединенный документ постранично.

см. Печать PDF-документа на Java

0 голосов
/ 22 апреля 2009

AFAIK, вы не можете, несколько документов будут напечатаны в нескольких заданиях.

В качестве обходного пути можно объединить все PDF в один документ и распечатать их

: - /

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