如何通过JAVA代码调用网络打印机使其打印接收到的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过JAVA代码调用网络打印机使其打印接收到的文件相关的知识,希望对你有一定的参考价值。

用java实现本地打印:java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。下面代码实现了简单的打印功能: 参考技术A import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class PrintTest4 implements Printable
/**
* @param Graphic指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点)
* @param pageIndex指明页号
*/
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException
System.out.println(">>>>>>>>>>>>>>>>>>>>>>指定页号:"+pageIndex);
Component c = null;
//print string
String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";
//转换成Graphics2D
Graphics2D g2 = (Graphics2D) graphics;
//设置打印颜色为黑色
g2.setColor(Color.black);

//打印起点坐标
double x = pageFormat.getImageableX();
double y = pageFormat.getImageableY();

switch(pageIndex)
case 0:
//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput
Font font = new Font("新宋体", Font.PLAIN, 9);
g2.setFont(font);//设置字体
//BasicStroke bs_3=new BasicStroke(0.5f);
float[] dash1 = 2.0f;
//设置打印线的属性。
//1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));
//g2.setStroke(bs_3);//设置线宽
float heigth = font.getSize2D();//字体高度
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>x="+x);
// -1- 用Graphics2D直接输出
//首字符的基线(右下部)位于用户空间中的 (x, y) 位置处
//g2.drawLine(10,10,200,300);

Image src = Toolkit.getDefaultToolkit().getImage("D:/背景图片/yesorno.jpg");
//D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg
g2.drawImage(src,(int)x,(int)y,c);
int img_Height=src.getHeight(c);
int img_width=src.getWidth(c);
//System.out.println("img_Height="+img_Height+"img_width="+img_width) ;

g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);
g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));

g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);

return PAGE_EXISTS;
default:
return NO_SUCH_PAGE;



public static void main(String[] args)
//通俗理解就是书、文档
Book book = new Book();
//设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);
//通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();
p.setSize(590,840);//纸张大小
p.setImageableArea(10,10, 590,840);//A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72
pf.setPaper(p);
//把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(new PrintTest4(), pf);

//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
//设置打印类
job.setPageable(book);

try
//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
boolean a=job.printDialog();
if(a)
job.print();

catch (PrinterException e)
e.printStackTrace();


如何在 GDB 中打印最后接收到的信号?

【中文标题】如何在 GDB 中打印最后接收到的信号?【英文标题】:How to print the last received signal in GDB? 【发布时间】:2012-01-17 16:01:41 【问题描述】:

将核心转储加载到 GDB 时,会显示它自动崩溃的原因。例如

程序以信号 11 终止,分段错误。

有什么方法可以重新获取信息吗? 问题是,我正在编写一个需要这些信息的脚本。但是如果信号只有在加载核心转储后才可用,我以后就无法访问信息了。

这么重要的功能真的没有命令吗?

【问题讨论】:

【参考方案1】:

打印关于最后一个信号执行的信息

p $_siginfo

【讨论】:

感谢您的选择!看来我只能在程序执行之后或期间执行此命令。每次我尝试使用核心转储时,它都会给我错误Unable to read siginfo 这是预期的。它是 gdb 的内存状态,不会持久化到磁盘。 我可以从核心转储文件中打印 $_siginfo 而无需执行程序。【参考方案2】:

如果你知道核心文件名是什么,你可以发出target core命令重新指定目标核心文件:

(gdb) target core core.8577
[New LWP 8577]
Core was generated by `./fault'.
Program terminated with signal 11, Segmentation fault.
#0  0x080483d5 in main () at fault.c:10
10      *ptr = '\123';
(gdb) 

至于隐含的问题,info last signal 命令是什么?,我不知道。好像没有。


核心文件名可以通过命令info target获取:

(gdb) info target
Symbols from "/home/wally/.bin/fault".
Local core dump file:
    `/home/wally/.bin/core.8577', file type elf32-i386.
    0x00da1000 - 0x00da2000 is load1
    0x08048000 - 0x08049000 is load2
...
    0xbfe8d000 - 0xbfeaf000 is load14
Local exec file:
    `/home/wally/.bin/fault', file type elf32-i386.
    Entry point: 0x8048300
    0x08048134 - 0x08048147 is .interp
    0x08048148 - 0x08048168 is .note.ABI-tag
    0x08048168 - 0x0804818c is .note.gnu.build-id
    0x0804818c - 0x080481ac is .gnu.hash
    0x080481ac - 0x080481fc is .dynsym
    0x080481fc - 0x08048246 is .dynstr
...

【讨论】:

谢谢,那么是否有可能读取给 gdb 本身的参数或将参数传递给我的脚本,例如“gdb executable core --batch -x myscript.py [在此处插入参数] " 因为我也发现了这种可能性,但因此我需要确定核心文件的名称,该名称通常通过 gdb 的参数给出 @Uhlo:命令info target 显示可执行文件和核心文件名,以及更多信息。也许这样可以?

以上是关于如何通过JAVA代码调用网络打印机使其打印接收到的文件的主要内容,如果未能解决你的问题,请参考以下文章

打印机一直在接收数据,通过网络分析软件快速定位有问题的电脑

java调用打印机打印问题求解

php 打印当前执行到的行数--为方便调试

Java如何调用TSC打印机进行打印详解

如何在日志中获取推送通知收到消息

如何设置PDF文档使其禁止打印!急!!