#java #printing
#java #печать
Вопрос:
Когда я отлаживаю эту программу, массив служб пуст??
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.Sides;
public class PrintFileWithSpec {
public static void printFile(String filename){
FileInputStream psStream=null;
try {
psStream = new FileInputStream(filename);
} catch (FileNotFoundException ffne) {
}
if (psStream == null) {
return;
}
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
Doc myDoc = new SimpleDoc(psStream, psInFormat, null);
PrintRequestAttributeSet aset =
new HashPrintRequestAttributeSet();
aset.add(new Copies(5));
//aset.add(MediaSize.ISO_A4);
aset.add(Sides.DUPLEX);
PrintService[] services =
PrintServiceLookup.lookupPrintServices(psInFormat, aset);
if (services.length > 0) {
DocPrintJob job = services[0].createPrintJob();
try
{
job.print(myDoc, aset);
} catch (PrintException pe) {}
}
}
public static void main(String [] args){
printFile("D:/Resume.doc");
}
}
Комментарии:
1. Похоже, что атрибуты, указанные в
aset
, немного слишком ограничительны — это работает для меня, когда я передаюnull
вместо этого.2. я передал null вместо aset все та же проблема
3. Что произойдет, если вы передадите оба аргумента как
null
?4. @hippo передав оба значения null, я получил список принтеров в массиве служб, но он не печатает мой документ.
Ответ №1:
Это потому, что не был найден PrintService, соответствующий указанному DocFlavor и набору атрибутов. Может быть сложно найти принтер, поддерживающий PostScript, если оборудование вашего принтера не является достаточно современным. Вы можете проверить, какие документы поддерживаются следующим образом:
DocFlavor[] docFalvor = prnSvc.getSupportedDocFlavors();
for (int i = 0; i < docFalvor.length; i ) {
System.out.println(docFalvor[i].getMimeType());
}
Для определения местоположения конкретной службы печати вы можете сделать что-то вроде этого:
PrintService prnSvc = null;
/* locate a print service that can handle it */
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(null, null);
if (pservices.length > 0) {
int ii=0;
while(ii < pservices.length)
{
System.out.println("Named Printer found: " pservices[ii].getName());
if (pservices[ii].getName().endsWith("YourPrinterName")) {
prnSvc = pservices[ii];
System.out.println("Named Printer selected: " pservices[ii].getName() "*");
break;
}
ii ;
}
Комментарии:
1. Я получил следующий вывод DocFlavor, так будет ли моя печать печатать .txt,.pdf, doc и т.д.?? изображение / gif-изображение /gif-изображение / gif-изображение / jpeg-изображение / jpeg-изображение / png-изображение /png-изображение / png-приложение / x-java-jvm-приложение local-objectref /x-java-jvm-приложение local-objectref / приложение octet-stream / приложение octet-stream