Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 77
  1. #1

    [Java] Problemi con la stampa

    Salve a tutti, devo stampare un file pdf. Ho provato cn questo codice:
    codice:
        PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();
    	    DocPrintJob printerJob = defaultPrintService.createPrintJob();
    	    File pdfFile = new File("scheda.pdf");
    	    SimpleDoc simpleDoc = new SimpleDoc(pdfFile.toURL(), DocFlavor.URL.AUTOSENSE, null);
    	    printerJob.print(simpleDoc, null);
    	    
    	    
    		
    		DocFlavor docFlv = DocFlavor.INPUT_STREAM.PDF;
    		
    		PrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
    	    attrSet.add(MediaSizeName.ISO_A4);
    	    attrSet.add(OrientationRequested.LANDSCAPE);
    	    attrSet.add(new Copies(1));
    	    
    	    PrintService[] prServ = PrintServiceLookup.lookupPrintServices(docFlv, attrSet);
            if (prServ.length > 0){
              // Crea il DocPrintJob
              DocPrintJob prJ = prServ[0].createPrintJob();
              
           
              Doc doc = new InputStreamDoc("scheda.pdf", docFlv);
              
           
               try{
            	   prJ.print(doc, attrSet);
               } catch (PrintException ex){
                   System.err.println(ex);
               }
           } else {
               System.err.println("Non ci sono stampanti che supportano le caratteristiche del documento");
           }
    xò mi stampa solo qualke riga di caratteri senza senso...avete qualke idea?ho cercato del materiale sulla stampa in java ma è un argomento assai complesso...almeno x me...

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    Il supporto per la stampa PDF fornito da INPUT_STREAM.PDF è puramente nominale: alla SUN non hanno mai finito di sviluppare lo streamer, per cui, ritieniti fortunato che in stampa ti esca qualcosa, normalmente escono solo errori a video

    Comunque, se cerchi nel forum ci sono un po' di threads che trattano l'argomento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    ah lo so!li ho guardati tutti xò nn riesco a concludere niente... a questo punto mi basterebbe anke qualcosa ke apra il file automaticamente...come si fa? in generale, come si fa ad aprire un file?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    Due soluzioni, ma entrambe aprono l'acrobat.

    scarichi il package

    https://jdic.dev.java.net/

    jdic che offre alcune interessanti funzionalità, e te ne esci così:

    https://jdic.dev.java.net/nonav/docu...top.html#print(java.io.File)

    Oppure implementi qualcosa del genere:

    codice:
    public static void printPDF(String pFile, String pPrinter)
        {
            final String PATH_ADOBE_READER = "D:/Programmi/Adobe/Acrobat Reader 7.0/Reader/AcroRd32.exe";
            final String ADOBE_READER_PRINT_COMMAND = "/p /h";
            final String SLASH = "/";
            final String QUOTE = "\"";
            final String SPACE = " ";
    
            // Command to be executed
            String lCommand = "\"" + PATH_ADOBE_READER +"\" /h /p \"" + pFile + "\" \"" + pPrinter + "\"";
            /*String lCommand = QUOTE + PATH_ADOBE_READER + QUOTE + SPACE +
                               ADOBE_READER_PRINT_COMMAND + SPACE  +
                               QUOTE + pFile + QUOTE + SPACE +
                               QUOTE + pPrinter + QUOTE;*/
    
            System.out.println("[printPDF] Command to be executed : " + lCommand);
    
            Process lAdobeBackGroundProcess = null;
            Process lAdobeProcess = null;
    
            try
            {
                // Must create a background Adobe Reader process (don't ask why, just do it;-)
                lAdobeBackGroundProcess = Runtime.getRuntime().exec(PATH_ADOBE_READER);
    
                // Execute the Adobe Reader command "/t" (print and terminate)
                lAdobeProcess = Runtime.getRuntime().exec(lCommand);
    
                // Wait for Adobe Reader to complete
                int exitVal = lAdobeProcess.waitFor();
                if ( exitVal != 0 )
                {
                    throw new Exception("[printPDF] Adobe Reader process exitVal : " + exitVal);
                }
            }
            catch (Exception e)
            {
                System.err.println("[printPDF] Error printing PDF : " + pFile);
                e.printStackTrace();
            }
            finally
            {
                if (lAdobeBackGroundProcess != null)
                {
                    lAdobeBackGroundProcess.destroy();
                    lAdobeBackGroundProcess = null;
                }
            }
        }
    Dove magari in fase di installazione/configurazione dell'applicazione fai andare a pescare il percorso ad Acrobat all'utente.

    Ciao.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    e la miseria! le mie conoscenze nn sono così avanzate! mi sa ke mi accontenterò del link e proverò quello t ringrazio

  6. #6
    sto pensando di riconsiderare l'altra tua proposta mi daresti qualke indicazione su come posso fargli scegliere la cartella dove c'è acrobat? grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    codice:
    final String PATH_ADOBE_READER = "D:/Programmi/Adobe/Acrobat Reader 7.0/Reader/AcroRd32.exe";
    Qui è dove lo tengo io...

    Per come la vedo io, dovresti provvedere la tua applicazione di un sistema che al primo avvio della stessa richieda all'utente di configurare un po' di variabili d'ambiente (Leggere e scrivere su un file di testo) - ed un eventuale menu per modifiche successive.

    Altrimenti, questo è quanto ho scritto per fare la stampa con il package che ti ho suggerito

    codice:
    import org.jdesktop.jdic.*;
    import java.io.*;
    
    public class newPrint {
    
      private File file;
    
      public boolean isPrintable() {
        return org.jdesktop.jdic.desktop.Desktop.isPrintable(file);
      }
    
      public void print() throws Exception {
        org.jdesktop.jdic.desktop.Desktop.print(file);
      }
    
      public newPrint(String f) {
        file = new File(f);
      }
    
      public static void main (String[] args) {
        newPrint p = new newPrint("C:\\test-doc.pdf");
        System.out.println(p.isPrintable());
        try {
          p.print();
        }
        catch (Exception e) {
          System.out.println(e.toString());
        }
      }
    }
    Niente di trascendentale (anzi, direi più facile che programmare una interfaccia utente per il settaggio di variabili d'ambiente... e soprattutto ti eviti che un utonto non sappia dove andare a trovare AcroRd32.exe - e tali utonti sono molti più di quanto tu possa credere, parlo per esperienza...)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Originariamente inviato da Andrea1979
    e tali utonti sono molti più di quanto tu possa credere, parlo per esperienza...)
    :maLOL: già! hai proprio ragione! cmq t ringrazio x il codice, ho cercato nella documentazione del jdic ma sn un pò TONTO

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,162
    A suo tempo avevo scritto un piccolo programmino in C++ che mi lanciasse la stampa di un documento PDF (tramite opzioni /p /h), catturasse il pid del processo e, alla fine, lo uccidesse, altrimenti Acrobat rimane aperto.
    Il tutto l'ho utilizzato in un programma Java per la stampa di una serie di PDF (quindi da Java lanciavo l'applicazione C++).


    Se ti serve ancora posso provvedere a passarti il codice del programma C++. Lo compili e lo utilizzi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    magari! e se poi mi dici anke come fare a utilizzarlo cn java...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.