Печать через Java непосредственно на сетевой принтер Postscript - PullRequest
9 голосов
/ 24 ноября 2008

У меня есть код / ​​данные Postscript (?) В памяти (в веб-приложении Java Tomcat), которые я хотел бы отправить непосредственно на сетевой принтер PS. Есть ли простой способ (то есть просто открыть порт и отправить текст), чтобы напечатать это, минуя все специфичные для O / S драйверы и прочее (и, надеюсь, даже не требуя дополнительных jar-файлов)? Ссылка на пример кода, показывающий, как это сделать?

Спасибо, Dave

Ответы [ 4 ]

7 голосов
/ 26 ноября 2008

открыть сокет TCP для порта LPR на целевом принтере.

отправить ваши данные; пока принтер это понимает, ты крут.

не забывайте перевод строки, когда закончите.

(затем закройте порт.)

2 голосов
/ 27 января 2011

Вы можете отправить его напрямую на сетевой принтер через порт 9100. Я написал в блоге об этом здесь:

http://frank.zinepal.com/printing-directly-to-a-network-printer

Проблема в том, что большинство лазерных принтеров не поддерживают PostScript. Обычно вам нужно получить надстройку для принтера.

0 голосов
/ 26 ноября 2008

Проверьте java.awt.print. Это общий API печати в Java.

К сожалению, он не ориентирован на работу с постскрипт-контентом, который у вас уже есть. Он предназначен для того, чтобы вы могли «рисовать» на листе бумаги с помощью графических API Java 2d.

0 голосов
/ 24 ноября 2008

Я не уверен, что вы можете сделать это без дополнительной библиотеки.

Этот пример показывает, как отправить файл на сетевой принтер, но требует библиотеки Adobe (основанной на коммерческой J2EE Livecycle ES , поэтому не является универсальным "free" решение ...).

import com.adobe.livecycle.output.client.*;
import java.util.*;    
import java.io.File;    
import java.io.FileInputStream;    
import com.adobe.idp.Document;    
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;

public class SendToPrinter {

    public static void main(String[] args) {
        try{
            //Set LiveCycle ES service connection properties                            
            Properties ConnectionProps = new Properties();
            ConnectionProps.setProperty("DSC_DEFAULT_EJB_ENDPOINT", "jnp://localhost:1099");
            ConnectionProps.setProperty("DSC_TRANSPORT_PROTOCOL","EJB");          
            ConnectionProps.setProperty("DSC_SERVER_TYPE", "JBoss");
            ConnectionProps.setProperty("DSC_CREDENTIAL_USERNAME", "administrator");
            ConnectionProps.setProperty("DSC_CREDENTIAL_PASSWORD", "password");
            //Create a ServiceClientFactory object
            ServiceClientFactory myFactory = ServiceClientFactory.createInstance(ConnectionProps);
            //Create an OutputClient object
            OutputClient outClient = new OutputClient(myFactory); 
            //Reference XML data that represents form data
            FileInputStream fileInputStream = new FileInputStream("C:\\Adobe\\Loan_data.xml"); 
            Document inputXML = new Document(fileInputStream);
            //Set print run-time options
            PrintedOutputOptionsSpec printOptions = new PrintedOutputOptionsSpec(); 
            printOptions.setPrinterURI("\\\\Printer1\\Printer");
            printOptions.setCopies(2);

            //Send a PostScript print stream to printer
            OutputResult outputDocument = outClient.generatePrintedOutput(
                    PrintFormat.PostScript,
                    "Loan.xdp",
                    "C:\\Adobe",
                    "C:\\Adobe",
                    printOptions,
                    inputXML); 

            //Write the results of the operation to OutputLog.xml
            Document resultData = outputDocument.getStatusDoc();
            File myFile = new File("C:\\Adobe\\OutputLog.xml");
            resultData.copyToFile(myFile);
        }
        catch (Exception ee)
        {
            ee.printStackTrace();
        }
    }
}
...