Reputation: 251
I have tried to print pdf with this code:
package imprimir;
import java.io.*;
import java.awt.print.*;
import java.awt.print.PrinterJob.*;
import java.awt.print.PageFormat.*;
public class Imprimir {
static public void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pf = job.defaultPage();
Paper paper = new Paper();
paper.setSize(612.0, 832.0);
double margin = 10;
paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
pf.setPaper(paper);
pf.setOrientation(PageFormat.LANDSCAPE);
job.setPrintable(new ObjetoDeImpresion(), pf);
job.setJobName("funciona?");
try {
job.print();
} catch (PrinterException e) {
System.out.println(e);
}
}
}
package imprimir;
import java.awt.*;
import java.awt.print.*;
public class ObjetoDeImpresion implements Printable {
public int print(Graphics g, PageFormat f, int pageIndex) {
if (pageIndex == 0) {
g.drawString("Hola ivan", 100, 200);
return PAGE_EXISTS;
} else {
return NO_SUCH_PAGE;
}
}
}
and also from other different ways there on the internet, but with all the ways I've tried, when I print the document, print odd numbers and letters, like this:
% PDF ||1.6
endobobj <</linerrized 1/L 20597/O 40/E 14115/N 1/T ............
xref
37 34
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
0000000013 00000 n
...
..
..
trailer
<</Size......
Someone can help me achieve print my document?
Upvotes: 3
Views: 12660
Reputation: 91
We have tried PDFBox too, also PDFView and IText, but what worked best for us was using the systems ghostscript to render the PDF into an image - otherwise in our PDF with a couple of images and form fields, things would get rendered not perfectly.
First write your pdf to an temporary file, then call gs:
String command;
if (System.getProperty("os.name").toLowerCase().contains("windows"))
{
command = "gswin32";
}
else
{
command = "gs";
}
String absolutePath = pngFile.getAbsolutePath();
command = command + " -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE="
+ color.name()
+ " -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dFirstPage="
+ pageNo + " -dLastPage=" + pageNo + " -r" + dpi
+ " -sOutputFile=" + absolutePath + " "
+ pdfFile.getAbsolutePath();
System.out.println(command);
Process p = Runtime.getRuntime().exec(command);
boolean success = false;
for (int i = 0; i < 1200; i++) //wait for completion
{
try
{
p.exitValue();
success = true;
break;
}
catch (Exception e)
{
logger.trace(e.getMessage());
}
Thread.currentThread();
Thread.sleep(200);
}
if (!success)
{
p.destroy();
}
Upvotes: 0
Reputation: 3726
I think PDFBox from Apache better suit your need (http://pdfbox.apache.org/).
Here is how it can fit inside your code:
static public void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pf = job.defaultPage();
Paper paper = new Paper();
paper.setSize(612.0, 832.0);
double margin = 10;
paper.setImageableArea(margin, margin, paper.getWidth() - margin, paper.getHeight() - margin);
pf.setPaper(paper);
pf.setOrientation(PageFormat.LANDSCAPE);
// PDFBox
PDDocument document = PDDocument.load("yourfile.pdf");
job.setPageable(new PDPageable(document, job));
job.setJobName("funciona?");
try {
job.print();
} catch (PrinterException e) {
System.out.println(e);
}
}
You can find more info about this if you look at the source of org.apache.pdfbox.PrintPDF.
Upvotes: 4