2013-06-18 5 views
3

J'ai essayé d'imprimer pdf avec ce code:print pdf avec java

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; 
     } 
    } 
} 

et aussi d'autres façons différentes là-bas sur Internet, mais avec tous les moyens que j'ai essayé, quand j'imprimer le document , imprime les nombres impairs et les lettres, comme ceci:

% 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...... 

Quelqu'un peut m'aider à imprimer mon document?

+2

Avez-vous essayé d'utiliser iText: http://itextpdf.com/itext.php – blackpanther

+0

Où est-ce que vous obtenez la sortie décrite? – Polygnome

Répondre

4

Je pense que PDFBox d'Apache mieux répondre à vos besoins (http://pdfbox.apache.org/).

Voici comment il peut adapter à l'intérieur de votre 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); 
    } 
} 

Vous pouvez trouver plus d'informations à ce sujet si vous regardez la source de org.apache.pdfbox.PrintPDF.

+0

Bonjour, j'ai fait ce que vous m'avez dit. Téléchargez le fichier PDFBOx.jar et copiez votre code ... Même si l'imprimante n'imprime pas ce qui doit être imprimé. Le fichier que j'ai est "test.pdf" est une feuille contenant du texte et une image. Mais ce qui est imprimé sur la feuille ne sont que des nombres comme il est en train d'imprimer en hexadécimal – Ivan

+0

Vous pourriez vouloir ouvrir un problème dans PDFBox JIRA. Ou envoyez-moi le fichier PDF, s'il n'est pas confidentiel. –

0

Nous avons aussi essayé PDFBox, aussi PDFView et IText, mais ce qui fonctionnait le mieux pour nous, c'était d'utiliser les systèmes ghostscript pour convertir le PDF en image - sinon dans notre PDF avec quelques images et champs de formulaire, rendu pas parfaitement.

d'abord écrire votre pdf dans un fichier temporaire, puis appelez 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(); 
    }