Questo è quello che ho scritto fin ora
codice:
public class PrinterTest {
// public static void main(String[] args) {
// PrintRequestAttributeSet attr=new HashPrintRequestAttributeSet();
// attr.add(OrientationRequested.LANDSCAPE);
public void PrintLabel (double dimx, double dimy,String[] m1p, Vector m2p){
PrinterJob pj = PrinterJob.getPrinterJob();
// pj.pageDialog(attr);
if (pj.printDialog()) {
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
// double width = fromCMToPPI(3);
// double height = fromCMToPPI(8.8);
double width = fromCMToPPI(dimx);
double height = fromCMToPPI(dimy);
paper.setSize(width, height);
paper.setImageableArea(
fromCMToPPI(0.25),
fromCMToPPI(0.25),
width - fromCMToPPI(0.35),
height - fromCMToPPI(0.35));
System.out.println("Before- " + dump(paper));
pf.setOrientation(PageFormat.PORTRAIT);
// pf.setOrientation(PageFormat.LANDSCAPE);
pf.setPaper(paper);
System.out.println("After- " + dump(paper));
System.out.println("After- " + dump(pf));
dump(pf);
PageFormat validatePage = pj.validatePage(pf);
System.out.println("Valid- " + dump(validatePage));
//Book book = new Book();
//book.append(new MyPrintable(), pf);
//pj.setPageable(book);
pj.setPrintable(new MyPrintable(m1p,m2p), pf);
try {
pj.print();
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
}
protected static double fromCMToPPI(double cm) {
return toPPI(cm * 0.393700787);
}
protected static double toPPI(double inch) {
return inch * 72d;
}
protected static String dump(Paper paper) {
StringBuilder sb = new StringBuilder(64);
sb.append(paper.getWidth()).append("x").append(paper.getHeight())
.append("/").append(paper.getImageableX()).append("x").
append(paper.getImageableY()).append(" - ").append(paper
.getImageableWidth()).append("x").append(paper.getImageableHeight());
return sb.toString();
}
protected static String dump(PageFormat pf) {
Paper paper = pf.getPaper();
return dump(paper);
}
public static class MyPrintable implements Printable {
private String[] m1;
private Vector m2;
private MyPrintable(String[] m1p, Vector m2p) {
m1 = m1p;
m2 = m2p;
}
@Override
public int print(Graphics graphics, PageFormat pageFormat,
int pageIndex) throws PrinterException {
System.out.println(pageIndex);
int result = NO_SUCH_PAGE;
if (pageIndex < 1) {
Graphics2D g2d = (Graphics2D) graphics;
System.out.println("[Print] " + dump(pageFormat));
double width = pageFormat.getImageableWidth();
double height = pageFormat.getImageableHeight();
g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());
g2d.draw(new Rectangle2D.Double(1, 1, width - 1, height - 1));
FontMetrics fm = g2d.getFontMetrics();
//g2d.drawString("0x0", 0, fm.getAscent());
StringBuilder sb = new StringBuilder();
sb.append("<html>");
sb.append("<body>");
sb.append("<table style=\"border: 1px solid black; border-collapse: collapse;\">");
sb.append("<tr>");
sb.append("<th style=\"border: 1px solid black;\">Tipo Analisi: </th>");
sb.append("<td>Tipo Test</td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("</body>");
sb.append("</html>");
try
{
OutputStream file = new FileOutputStream(new File("./temp/label.pdf"));
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, file);
document.open();
InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);
document.close();
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
//g2d.drawString(sb.toString(), 0, fm.getAscent());
result = PAGE_EXISTS;
}
return result;
}
}
}
praticamente cerco un modo per mandare in stampa quel pdf generato con il PageFormat configurato sopra