Haben Sie eine seltsame Frage für Sie. Kürzlich verbesserte mein altes Projekt von Java 7 (jdk1.7.0_10) zu Java 8 (1.8.0.91.x86_64). In Java 7 druckte es die Postscript-Datei ohne Probleme und jetzt wird die Postscript-Datei als einfacher Text gedruckt, anstatt die Datei zu konvertieren. Dies ist in einer Redhat-Linux-Umgebung. Ich versuche einfach eine Zeichenfolge zu drucken, die eine Post-Script-Datei einer Datei selbst enthält.Java 8 Probleme PS zu Netzwerkdrucker drucken
Hier ist meine Original-Code ist
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintService pService = PrintServiceLookup.lookupDefaultPrintService();
// In a field environment, send to the printer
if (System.getenv("USER_DEFINED_RELTOP") == null || pfr.exists()) {
if (pService.getName().isEmpty()) {
LOGGER.error("No printer selected");
} else {
LOGGER.info("Printing to " + pService.getName());
DocPrintJob pj = pService.createPrintJob();
try {
InputStream is = new ByteArrayInputStream(data.getBytes("UTF8"));
Doc doc = new SimpleDoc(is, flavor, null);
PrintJobWatcher pjw = new PrintJobWatcher(pj);
pj.print(doc, null);
pjw.waitForDone();
is.close();
} catch (PrintException | IOException e) {
LOGGER.error(e);
} // try block
} // no printer selected
// Otherwise, send to a file
} else {
, die in fein gearbeitet Java 7, ich es dem Orakel spec hier für Java 8. https://docs.oracle.com/javase/8/docs/api/javax/print/PrintService.html#createPrintJob--
https://docs.oracle.com/javase/8/docs/technotes/guides/jps/spec/printing.fm6.html
DocFlavor psFlavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(MediaSizeName.ISO_A4);
PrintService[] pservices = PrintServiceLookup.lookupPrintServices(psFlavor,
attrs);
File pfr = new File(PFR_INDICATOR);
// In a field environment, send to the printer
if (System.getenv("USER_DEFINED_RELTOP") == null || pfr.exists()) {
//Check we have a printer capable of post script
if (pservices.length > 0) {
LOGGER.info("Printing to " + pservices[0].getName());
DocPrintJob pj = pservices[0].createPrintJob();
try {
InputStream fis = new ByteArrayInputStream(data.getBytes("UTF8"));
//byte[] ba =data.getBytes("UTF8");
Doc doc = new SimpleDoc(fis, psFlavor, null);
LOGGER.info("Doc Flavor " + doc.getDocFlavor());
PrintJobWatcher pjw = new PrintJobWatcher(pj);
LOGGER.info("PrintJob Attributes : " + pj.getAttributes());
pj.print(doc, attrs);
pjw.waitForDone();
fis.close();
} catch (IOException e) {
LOGGER.error(e);
NotificationDialog.show(NotificationDialog.NOTICE_TYPE.ERROR, PRINT_ERROR);
} catch (PrintException e) {
LOGGER.error(e);
}
} else { // no printer selected
gefunden aktualisiert Dies gibt mir einen Fehler java.awt.print.PrinterIOException: java.io.IOException:/usr/bin/lpr: wo es aussieht, um lpr nicht zu finden .
Wenn ich es so behalte, wie es ursprünglich war (nicht in Datei schreiben), wird das PostScript als einfacher Text gedruckt, auch wenn die Prüfung hinzugefügt wird, um zu prüfen, ob der Drucker postskriptfähig ist. Wenn ich die neue Art der Druckdatei verwende, bekomme ich einen lpr nicht gefunden Fehler. Wenn ich das PS-Dokument mit dem Befehl lpr drucke, konvertiert es es wie erwartet und druckt gut. Wenn ich lpr -l verwende, das nicht formatiert, druckt es das Dokument auch als einfachen Text.
Jeder Vorschlag/Hilfe wäre großartig. Ich bin verloren, was ich tun soll. Ich möchte es wirklich nicht in ein Bild umwandeln und das ausdrucken.
so arbeitete Ihr Vorschlag. Ich kann mit lpr -l ein schön formatiertes Papier drucken. Beim Drucken aus Java wird jedoch immer noch die Textdarstellung gedruckt. Ich habe sogar versucht, den FileInputStream in den ByteArrayInputStream zu konvertieren, habe aber dieselbe Textdarstellung erhalten. Irgendwelche anderen Vorschläge? – jonnysteals
Entschuldigung, Java ist nicht mein Fachgebiet. Ich kann nur annehmen, dass es zu Beginn die zusätzliche PJL wegwirft und nicht seine eigene Version hineinstellt, aber ich kann Ihnen keine Hinweise geben warum. Ich denke, das wird wirklich nur eine Java-Frage sein müssen. – KenS
Entschuldigung Ken, das Team hat letzte Nacht meinen Code falsch gepatcht. Ich habe es korrekt gepatcht und es korrekt gedruckt. Danke für die Hilfe. – jonnysteals