import java.awt.Desktop;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.JOptionPane;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPrintPage;
import de.psychometrica.tools.gui.Message;
public class PDFUtils {
/** The page format for printing */
PageFormat pformat = PrinterJob.getPrinterJob().defaultPage();
/** The current page number (starts at 0), or -1 if no page */
int curpage = -1;
public PDFUtils(File file, String jobName) {
PDFFile curFile;
try {
curFile = getPDFFile(file);
} catch (IOException e) {
e.printStackTrace();
Message.displayAlert(null, "Drucken fehlgeschlagen", "Die Datei konnte nicht gedruckt werden.");
return;
}
PrinterJob pjob = PrinterJob.getPrinterJob();
//pformat = pjob.pageDialog(pformat);
PageFormat pageFormat = new PageFormat();
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);
pageFormat.setPaper(a4paper);
pjob.setJobName(jobName);
Book book = new Book();
PDFPrintPage pages = new PDFPrintPage(curFile);
book.append(pages, pageFormat, curFile.getNumPages());
pjob.setPageable(book);
if (pjob.printDialog()) {
new PrintThread(pages, pjob).start();
}
}
}
/**
* A thread for printing in.
*/
class PrintThread extends Thread {
PDFPrintPage ptPages;
PrinterJob ptPjob;
public PrintThread(PDFPrintPage pages, PrinterJob pjob) {
ptPages = pages;
ptPjob = pjob;
}
public void run() {
try {
ptPages.show(ptPjob);
ptPjob.print();
} catch (PrinterException pe) {
JOptionPane.showMessageDialog(null, "Printing Error: "
+ pe.getMessage(), "Print Aborted",
JOptionPane.ERROR_MESSAGE);
}
ptPages.hide();
}
}