Imprimer vers une imprimante spécifique (IPP URI) en Java
Est-il possible en Java pour l'impression à une imprimante IPP? Tous les exemples de code et des tutoriels que j'ai trouvé à se concentrer sur la façon d'imprimer un type particulier de document, en utilisant quelque chose comme ce qui suit:
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
DocPrintJob pj = pservices[0].createPrintJob();
try {
FileInputStream fis = new FileInputStream("test.ps");
Doc doc = new SimpleDoc(fis, flavor, null);
pj.print(doc, aset);
} catch (FileNotFoundException fe) {
} catch (PrintException e) {
}
}
Cet extrait imprime simplement à la première imprimante trouvé qui est capable d'imprimer le document. Dans mon cas, je veux à la recherche d'une imprimante par son URI, mais PrintServiceLookup
ne semble pas en charge cette fonction. J'ai essayé d'utiliser un PrintServiceAttributeSet
au lieu de PrintRequestAttributeSet
et l'ajout d'un PrinterURI
attribut, mais qui ne retourne pas de toutes les imprimantes. Je soupçonne que le service de recherche est à la recherche d'une imprimante qui peut changer sa destination URI, plutôt que la recherche de l'imprimante avec d'URI.
En dernier recours, je pensais juste l'énumération de tous les PrintService
s retourné par lookupPrintServices
mais l'URI n'est pas dans l'un des attributs. Le nom de l'imprimante est là, mais j'ai besoin de l'URI.
Pour le fond, ma webapp besoin d'imprimer un code à barres sur une imprimante spécifique, basée sur l'utilisateur actuel. Chaque utilisateur est associé à une imprimante URI, qui pointe à une imprimante sur un serveur CUPS. L'URI de l'imprimante est la seule information que j'ai, et je ne peux pas contraindre le nom de l'imprimante pour correspondre à l'URI ou une sous-chaîne de l'URI.
Edit: De clarifier un peu, je n'ai pas besoin de rendre les données, j'ai juste besoin de copier une goutte pour une imprimante donnée. La partie que je ne peux pas savoir comment identifier une imprimante par son IPP URI.
source d'informationauteur Jason Day
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé une façon de le faire, en utilisant
jipsi
:Je dois admettre que je suis déçu de n'avoir à utiliser un 3e partie de la bibliothèque de faire quelque chose d'aussi simple en apparence que l'impression sur une imprimante spécifique.
Mise à JOUR
DR points dans le commentaires que jipsi a une nouvelle la maisonet un nouveau nom.
Cups4J est une bonne alternative, mais comme son nom l'indique, il peut ne pas fonctionner correctement si la destination n'est pas un serveur CUPS. J'ai eu de bons résultats en utilisant Cups4J pour imprimer directement sur une imprimante thermique Zebra.
Je ne pense pas que vous pouvez obtenir une imprimante de la manière que vous souhaitez (je pense que le Java mécanisme d'Impression est antérieure à l'IPP).
Vous pouvez, cependant, si je me souviens bien capable de rendre votre travail d'impression en local puis d'expédier les octets du flux de sortie de la cible du serveur CUPS "à la main". Serait-ce être "assez bon" pour vous?