2017-05-26 2 views
1

Je ne sais vraiment pas comment aborder cela. Je suis nouveau dans cette bibliothèque (PDFBox) et j'ai réussi à mettre en œuvre du code (en utilisant Java), qui imprime tout fichier PDF sélectionné.PDFBox: Comment imprimer une série de pages à partir d'un PDF

Maintenant, je dois permettre aux utilisateurs de spécifier une plage de pages à imprimer, si nécessaire. Voici la partie de mon code qui gère l'impression ...

  try 
      { 
        // TODO add your handling code here: 
        PrintService myPrintService = findPrintService(printerCmb.getSelectedItem().toString()); 
        PrinterJob job = PrinterJob.getPrinterJob(); 
        job.setPageable(doc); 

        job.setPrintService(myPrintService); 
        job.print(); 
      } 
      catch (PrinterException ex) 
      {    
        Logger.getLogger(PrintDialog.class.getName()).log(Level.SEVERE, null, ex); 

      } 

Que dois-je faire?

Voici comment j'ai créé "doc".

public Pageable doc; JFileChooser getPDF = new JFileChooser(); 
      FileFilter filter = new FileNameExtensionFilter("PDF File", "pdf"); 
      getPDF.setFileFilter(filter); 
      getPDF.setDialogTitle("Select a PDF file"); 
      getPDF.showOpenDialog(getPDF); 
      try 
      { 
        Connection conn = null; 
        conn = DriverManager.getConnection(urlDist); 
        //SQLiteConnection new2 = new SQLiteConnection(urlDist, filename); 
        File selPdf = getPDF.getSelectedFile(); 
        doc = PDDocument.load(selPdf); 

        if (doc != null) 
        { 
           count = doc.getNumberOfPages(); 
           noPagestxt.setText(String.valueOf(count)); 
           filename = selPdf.getName(); 
           fileNametxt.setText(filename); 
           pagesPrint.setEnabled(true); 
        } 
        // cleaning memory 

        // cleaning memory 
      } 
      catch (Exception ex) 
      { 
        Logger.getLogger(BioProject.class.getName()).log(Level.SEVERE, null, ex); 
      } 
+0

D'où vient "doc"? –

+0

'public Pageable doc;' et 'doc = PDDocument.load (selPdf);' ne fonctionneraient pas. En attendant, j'ai trouvé quelque chose qui pourrait marcher, la classe 'PageRanges'. C'est un attribut de travail d'impression, donc utilisez 'PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); attr.add (nouveau PageRanges (1, 1)); job.print (attr); ' –

+0

@TilmanHausherr, je vais essayer ça maintenant. –

Répondre

1

Donc, je résolu le problème en utilisant la suggestion de l'utilisateur TilmanHausherr. J'ai spécifié la plage en utilisant la fonction PageRanges() Voici le code.

... 
job.setPageable(doc); 
job.setPrintService(myPrintService); 
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); 
PageRanges pageRng = new PageRanges(lower , upper); 
attr.add(pageRng); 
job.print(attr); 

REMARQUE:upper et lower sont des variables Integer obtenu à partir de l'utilisateur.

-1
Below is the code which can be helpful for printing data from specific pages in the whole PDF file hope this would solve your issue. 

    PDDocument doc = PDDocument.load("Your PDF path"); 
    PDFTextStripper stripper = new PDFTextStripper(); 
    stripper.setStartPage(1); 
    stripper.setEndPage(Integer.MAX_VALUE); 
    List<String> ans= Arrays.asList(changeText.split(",\n")); 
    System.out.println(ans); 
+0

Si vous êtes satisfait de la réponse, cochez la case – VRJ

+0

Votre code n'imprime rien à l'imprimante. Il extrait juste le texte et le sort. –

+0

Oui, il lit les données et imprime – VRJ