将字节数组转换为pdf进行打印

将字节数组转换为pdf进行打印,pdf,bytearray,Pdf,Bytearray,我有一个字节数组,我需要通过打印服务器套接字发送这个字节数组,以便以pdf格式打印。如何将此字节数组转换为pdf字节 基本上,我创建了一个pdf模板,并使用PdfStamper生成pdf PdfStamper压模=新PdfStamper(pdfTemplate,out); 然后将ByteArrayOutStream转换为字节数组(out.toByteArray())。我正在将这个字节数组发送给另一个服务,该服务只是拾取字节数组并通过套接字发送以进行打印。我试着打印这个,但这个只打印一张空白页。

我有一个字节数组,我需要通过打印服务器套接字发送这个字节数组,以便以pdf格式打印。如何将此字节数组转换为pdf字节

基本上,我创建了一个pdf模板,并使用PdfStamper生成pdf
PdfStamper压模=新PdfStamper(pdfTemplate,out); 然后将ByteArrayOutStream转换为字节数组(out.toByteArray())。我正在将这个字节数组发送给另一个服务,该服务只是拾取字节数组并通过套接字发送以进行打印。我试着打印这个,但这个只打印一张空白页。
我猜,打印机没有将其识别为pdf。如何告诉打印机我的字节数组是pdf(如何将字节数组转换为pdf可打印格式)

从传递字节数组和

DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
必须通过如下方式传递flavor和字节数组来调用此方法

new PrintTest().print(byteArray, flavor);




import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Set;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.standard.PrinterStateReason;
import javax.print.attribute.standard.PrinterStateReasons;
import javax.print.attribute.standard.Severity;
import javax.print.event.PrintJobAttributeEvent;
import javax.print.event.PrintJobAttributeListener;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;
import javax.print.event.PrintServiceAttributeEvent;
import javax.print.event.PrintServiceAttributeListener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PrintTest implements PrintServiceAttributeListener,PrintJobListener,Doc, Printable, PrintJobAttributeListener {

    protected Logger logger = LoggerFactory.getLogger(PrintTest.class);

    public void print(final byte[] byteArray, final DocFlavor flavor) {

        Thread newThread = new Thread(new Runnable() {

            public void run() {

                PrintService ps = PrinterJob.getPrinterJob().getPrintService();

                ps.addPrintServiceAttributeListener(PrintTest.this);
                DocPrintJob docJob = ps.createPrintJob();
                docJob.addPrintJobAttributeListener(PrintTest.this, null);
                docJob.addPrintJobListener(PrintTest.this);
                Doc document = new SimpleDoc(byteArray, flavor, null);

                try {
                  docJob.print(document,null);

                }
                catch (PrintException e) {
                  e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }
            } 
         });

         newThread.start();

        /**
        PrintServiceAttributeSet attSet = ps.getAttributes();
        PrinterStateReasons psr = ps.getAttribute(PrinterStateReasons.class);

        if (psr != null) {
          Set<PrinterStateReason> errors = psr.printerStateReasonSet(Severity.REPORT);
          for (PrinterStateReason reason : errors)
            System.out.printf(" Reason : %s",reason.getName());
          logger.info();
        }          */
      }

    public void attributeUpdate(PrintServiceAttributeEvent psae) {
        logger.info("attributeUpdate: "+psae.getAttributes());
      }

      public void printDataTransferCompleted(PrintJobEvent pje) {
        logger.info("Transfer completed");
      }

      public void printJobCompleted(PrintJobEvent pje) {
        logger.info("Completed");
      }

      public void printJobFailed(PrintJobEvent pje) {
            logger.info("Failed");
            PrinterStateReasons psr = pje.getPrintJob().getPrintService().getAttribute(PrinterStateReasons.class);
            if (psr != null) {
              Set<PrinterStateReason> errors = psr.printerStateReasonSet(Severity.REPORT);
              for (PrinterStateReason reason : errors)
                  logger.info(" Reason : %s",reason.getName());
              logger.info("\n");
            }
      }

      public void printJobCanceled(PrintJobEvent pje) {
            logger.info("Canceled");
          }

          public void printJobNoMoreEvents(PrintJobEvent pje) {
            logger.info("No more events");
            logger.info("printJobNoMoreEvents: "+pje.getPrintEventType());
          }

          public void printJobRequiresAttention(PrintJobEvent pje) {
            logger.info("Job requires attention");
            PrinterStateReasons psr = pje.getPrintJob().getPrintService().getAttribute(PrinterStateReasons.class);
            if (psr != null) {
              Set<PrinterStateReason> errors = psr.printerStateReasonSet(Severity.REPORT);
              for (PrinterStateReason reason : errors)
                  logger.info(" Reason : %s",reason.getName());
              logger.info("\n");
            }
          }

          public DocFlavor getDocFlavor() {
            return DocFlavor.SERVICE_FORMATTED.PRINTABLE;  //To change body of implemented methods use File | Settings | File Templates.
          }

          public Object getPrintData() throws IOException {
            return this;
          }

          public DocAttributeSet getAttributes() {
            return null;  //To change body of implemented methods use File | Settings | File Templates.
          }

          public Reader getReaderForText() throws IOException {
            return null; //To change body of implemented methods use File | Settings | File Templates.
          }

          public InputStream getStreamForBytes() throws IOException {
            return null;  //To change body of implemented methods use File | Settings | File Templates.
          }

          public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
            return pageIndex == 0 ? PAGE_EXISTS : NO_SUCH_PAGE;  //To change body of implemented methods use File | Settings | File Templates.
          }

          public void attributeUpdate(PrintJobAttributeEvent pjae) {
            logger.info("Look out");
          }
}
newprintest().print(byteArray,flavor);
导入java.awt.Graphics;
导入java.awt.print.PageFormat;
导入java.awt.print.Printable;
导入java.awt.print.PrinterException;
导入java.awt.print.PrinterJob;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.Reader;
导入java.util.Set;
导入javax.print.Doc;
导入javax.print.DocFlavor;
导入javax.print.DocPrintJob;
导入javax.print.PrintException;
导入javax.print.PrintService;
导入javax.print.SimpleDoc;
导入javax.print.attribute.DocAttributeSet;
导入javax.print.attribute.standard.PrinterStateReason;
导入javax.print.attribute.standard.PrinterStateReasions;
导入javax.print.attribute.standard.Severity;
导入javax.print.event.PrintJobAttributeEvent;
导入javax.print.event.PrintJobAttributeListener;
导入javax.print.event.PrintJobEvent;
导入javax.print.event.PrintJobListener;
导入javax.print.event.PrintServiceAttributeEvent;
导入javax.print.event.PrintServiceAttributeListener;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
公共类PrintTest实现PrintServiceAttributeListener、PrintJobListener、Doc、Printable、PrintJobAttributeListener{
受保护的日志记录器=LoggerFactory.getLogger(PrintTest.class);
公共作废打印(最终字节[]byteArray,最终DocFlavor){
Thread newThread=新线程(new Runnable()){
公开募捐{
PrintService ps=PrinterJob.getPrinterJob().getPrintService();
ps.addPrintServiceAttributeListener(PrintTest.this);
DocPrintJob docJob=ps.createPrintJob();
docJob.addPrintJobAttributeListener(PrintTest.this,null);
addPrintJobListener(PrintTest.this);
Doc document=new SimpleDoc(byteArray,flavor,null);
试一试{
docJob.print(文档,空);
}
捕获(打印例外){
e、 printStackTrace();//要更改catch语句的主体,请使用文件|设置|文件模板。
}
} 
});
newThread.start();
/**
PrintServiceAttributeSet attSet=ps.getAttributes();
PrinterStateReasions psr=ps.getAttribute(PrinterStateReasions.class);
如果(psr!=null){
设置错误=psr.printerStateReasonSet(严重性报告);
原因(PrinterStateReason:错误)
System.out.printf(“原因:%s”,Reason.getName());
logger.info();
}          */
}
公共无效属性更新(PrintServiceAttributeEvent psae){
logger.info(“attributeUpdate:+psae.getAttributes());
}
公共作废printDataTransferCompleted(PrintJobEvent pje){
logger.info(“传输完成”);
}
公共作废打印作业已完成(打印作业事件pje){
logger.info(“已完成”);
}
public void printJobFailed(PrintJobEvent pje){
logger.info(“失败”);
PrinterStateReasions psr=pje.getPrintJob().getPrintService().getAttribute(PrinterStateReasions.class);
如果(psr!=null){
设置错误=psr.printerStateReasonSet(严重性报告);
原因(PrinterStateReason:错误)
logger.info(“原因:%s”,Reason.getName());
logger.info(“\n”);
}
}
公共作废打印作业已取消(打印作业事件pje){
logger.info(“已取消”);
}
public void printJobNoMoreEvents(PrintJobEvent pje){
logger.info(“无更多事件”);
logger.info(“printJobNoMoreEvents:+pje.getPrintEventType());
}
公共作废打印作业要求注意事项(打印作业事件pje){
logger.info(“工作需要注意”);
PrinterStateReasions psr=pje.getPrintJob().getPrintService().getAttribute(PrinterStateReasions.class);
如果(psr!=null){
设置错误=psr.printerStateReasonSet(严重性报告);
原因(PrinterStateReason:错误)
logger.info(“原因:%s”,Reason.getName());
logger.info(“\n”);
}
}
公共DocFlavor getDocFlavor(){
return DocFlavor.SERVICE_FORMATTED.PRINTABLE;//若要更改已实现方法的主体,请使用文件|设置|文件模板。
}
公共对象getPrintData()引发IOException{
归还这个;
}
公共DocAttributeSet getAttributes(){
return null;//若要更改已实现方法的主体,请使用文件|设置|文件模板。
}
公共读取器getReaderForText()引发IOException{
return null;//若要更改已实现方法的主体,请使用文件|设置|文件模板。
}
公共InputStream getStreamForBytes()引发IOException{
return null;//若要更改已实现方法的主体,请使用文件|设置|文件模板。
}
公共整数打印(图形和图形)