是否有任何常见的sdk,库等可以通过wifi将手机或标签连接到任何打印机(任何组件)并能够打印出pdf?我不想使用像epson iprint这样的应用程序因为我必须集成它并且云打印不是一种选择吗?
答案 0 :(得分:2)
我还在Epson矩阵打印机的应用程序中搜索打印PDF的解决方案。您可以尝试使用此代码,该代码适用于HP网络激光打印机:
File pdfFile = new File (Environment.getExternalStorageDirectory() + "/testPdf.pdf");
Socket clientSocket = null;
FileInputStream fis;
BufferedInputStream bis = null;
try {
clientSocket = new Socket("192.168.101.45", 9100);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
byte [] mybytearray = new byte [(int) pdfFile.length()];
try {
fis = new FileInputStream(pdfFile);
bis = new BufferedInputStream(fis);
bis.read(mybytearray, 0, mybytearray.length);
OutputStream os = clientSocket.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
clientSocket.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
从Android打印PDF有很大问题。 Android几乎没有打印机驱动程序。
此代码在打印机连接的某个套接字上打开流。我们有大而好的HP激光打印机,并且使用此代码PDF文件打印得很好。 但我们的用户没有那么好的打印机:)
现在我们像打印预览一样使用PDF但是对于打印我们使用带打印机序列的文本。这种创建文档的方法非常困难。您必须为打印机创建包含打印顺序的文本文件,然后,您可以将此代码设置为printer:
outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeUTF(stringForPrint);
outToServer.flush();
您可以在文本文件中添加标签(如HTML),在将文本发送到打印机之前,您可以使用序列替换标签:
// bold on
text = text.replaceAll("<B>", Character.toString((char)27) + "E");
// bold off
text = text.replaceAll("</B>", Character.toString((char)27) + "F");
我读过(没试过),如果你的PDF(图像)可以转换为PostScript并在打印机上发送PostScript文件,如果打印机支持PostScript,PDF也可以打印好。 我也认为GhostScript可能有助于转换。祝你好运:)