Files
quality_recticel/old code/tray/src/qz/printer/action/pdf/BookBundle.java
Quality System Admin c96039542d updated control access
2025-10-16 02:36:32 +03:00

81 lines
2.2 KiB
Java
Executable File

package qz.printer.action.pdf;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.awt.*;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
/**
* Wrapper of the {@code Book} class as a {@code Printable} type,
* since PrinterJob implementations do not seem to handle the {@code Pageable} interface properly.
*/
public class BookBundle extends Book {
private static final Logger log = LogManager.getLogger(BookBundle.class);
private Printable lastPrint;
private int lastStarted;
public BookBundle() {
super();
}
/**
* Wrapper of the wrapper class so that PrinterJob implementations will handle it as proper pageable
*/
public Book wrapAndPresent() {
Book cover = new Book();
for(int i = 0; i < getNumberOfPages(); i++) {
cover.append(new PrintingPress(), getPageFormat(i));
}
return cover;
}
public Book wrapAndPresent(int offset, int length) {
Book coverSubset = new Book();
for(int i = offset; i < offset + length && i < getNumberOfPages(); i++) {
coverSubset.append(new PrintingPress(offset), getPageFormat(i));
}
return coverSubset;
}
/** Printable wrapper to ensure proper reading of multiple documents across spooling */
private class PrintingPress implements Printable {
private int pageOffset;
public PrintingPress() {
this(0);
}
public PrintingPress(int offset) {
pageOffset = offset;
}
@Override
public int print(Graphics g, PageFormat format, int pageIndex) throws PrinterException {
pageIndex += pageOffset;
log.trace("Requested page {} for printing", pageIndex);
if (pageIndex < getNumberOfPages()) {
Printable printable = getPrintable(pageIndex);
if (printable != lastPrint) {
lastPrint = printable;
lastStarted = pageIndex;
}
return printable.print(g, format, pageIndex - lastStarted);
}
return NO_SUCH_PAGE;
}
}
}