Impression de fichiers pdf à l'aide de java


Je veux imprimer un document en utilisant java cependant, le programme réussit mais mon imprimante n'imprime rien. Pourquoi est-il comme ça? Avez-vous des solutions pour cela? Si mon imprimante n'est pas prise en charge au format pdf, existe-t-il un moyen d'imprimer le fichier pdf ou même les fichiers docx?

package useprintingserviceinjava;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;
public class UsePrintingServiceInJava {

    private static boolean jobRunning = true;

    public static void main(String[] args) throws Exception {


  InputStream is;
   is = new BufferedInputStream(new FileInputStream("PAPER_SENSOR.pdf"));

  DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

  PrintService service = PrintServiceLookup.lookupDefaultPrintService();

  DocPrintJob printJob = service.createPrintJob();

  printJob.addPrintJobListener(new JobCompleteMonitor());

  Doc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);

  printJob.print(doc, null);

  while (jobRunning) {
        Thread.sleep(1000);
  }

  System.out.println("Exiting app");

  is.close();

    }

    private static class JobCompleteMonitor extends PrintJobAdapter {
        @Override
        public void printJobCompleted(PrintJobEvent jobEvent) {
            System.out.println("Job completed");
            jobRunning = false;
        }
    }

}

C'est le code que j'ai recherché mais il n'imprime toujours pas. Voici un autre code basé sur mes recherches:

package javaapplication24;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;
public class HandlePrintJobEvents {

public static void main(String[] args) throws Exception {

        // create a PDF doc flavor
        try ( // Open the image file
                InputStream is = new BufferedInputStream(new FileInputStream("C:\\Users\\JUSTINE\\Documents\\thesis document\\PAPER_SENSOR.pdf"))) {
            // create a PDF doc flavor

            DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

            // Locate the default print service for this environment.

            PrintService service = PrintServiceLookup.lookupDefaultPrintService();

            // Create and return a PrintJob capable of handling data from

            // any of the supported document flavors.

            DocPrintJob printJob = service.createPrintJob();

            // register a listener to get notified when the job is complete

            printJob.addPrintJobListener(new PrintJobMonitor());

            // Construct a SimpleDoc with the specified

            // print data, doc flavor and doc attribute set.

            Doc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);

            // Print a document with the specified job attributes.

            printJob.print(doc, null);
        }

}

private static class PrintJobMonitor implements PrintJobListener {

    @Override
    public void printDataTransferCompleted(PrintJobEvent pje) {
        // Called to notify the client that data has been successfully
        // transferred to the print service, and the client may free
        // local resources allocated for that data.
    }

    @Override
    public void printJobCanceled(PrintJobEvent pje) {
        // Called to notify the client that the job was canceled
        // by a user or a program.
    }

    @Override
    public void printJobCompleted(PrintJobEvent pje) {
        // Called to notify the client that the job completed successfully.
    }

    @Override
    public void printJobFailed(PrintJobEvent pje) {
        // Called to notify the client that the job failed to complete
        // successfully and will have to be resubmitted.
    }

    @Override
    public void printJobNoMoreEvents(PrintJobEvent pje) {
        // Called to notify the client that no more events will be delivered.
    }

    @Override
    public void printJobRequiresAttention(PrintJobEvent pje) {
        // Called to notify the client that an error has occurred that the
        // user might be able to fix.
    }

}

}

Merci:) * J'ai déjà essayé 2 imprimantes mais je ne peux toujours pas imprimer.

Author: JustOnce, 2016-01-07

1 answers

Je viens de vérifier votre code ici chez moi. Je ne peux pas imprimer car je n'ai pas d'imprimante, cependant, je peux ajouter quelque chose à la file d'attente de l'imprimante sans imprimer (il commence simplement à chercher l'imprimante à l'infini).

D'autant plus que vous avez dit que vous avez obtenu l'exception sun.print.PrintJobFlavorException, il semble logique que votre imprimante ne supporte pas l'impression PDF. Pour vérifier que c'est le cas, essayez ce qui suit:

    PrintService service = PrintServiceLookup.lookupDefaultPrintService();
    int count = 0;
    for (DocFlavor docFlavor : service.getSupportedDocFlavors()) {
        if (docFlavor.toString().contains("pdf")) {
            count++;
        }
    }
    if (count == 0) {
        System.err.println("PDF not supported by printer: " + service.getName());
        System.exit(1);
    } else {
        System.out.println("PDF is supported by printer: " + service.getName());
    }

MODIFIER:

J'ai utilisé le Brother DCP-J552DW. Le code suivant a fonctionné parfaitement pour moi, sauf pour une marge de page (qui est bien sûr peut être ajustée):

public static void main(String[] args) throws IOException {
    FileInputStream in = new FileInputStream("test.pdf");
    Doc doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
    PrintService service = PrintServiceLookup.lookupDefaultPrintService();

    try {
        service.createPrintJob().print(doc, null);
    } catch (PrintException e) {
        e.printStackTrace();
    }
}

L'imprimante n'a pas répondu immédiatement, la mise en place de la connexion a pris environ 20 secondes.

 2
Author: pietv8x, 2016-01-08 14:34:42