是否有任何常见的 sdk 、库等可以通过 wifi 将手机或标签连接到任何打印机(任何公司)并能够打印出 pdf?我不想使用像 epson iprint 这样的应用程序,因为我必须集成它并且云打印不是一个选项?
问问题
3781 次
2 回答
3
我还从我在 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();
}
}
于 2013-01-29T13:07:51.710 回答
0
我们在从 Android 打印 PDF 时遇到了很大的问题。Android 几乎没有打印机驱动程序。
此代码在您连接打印机的特定套接字上打开流。我们有大而好的 HP 激光打印机,使用此代码 PDF 文件打印效果很好。但是我们的用户没有那么好的打印机:)
现在我们像打印预览一样使用 PDF,但对于打印,我们使用带有打印机序列的文本。这种创建文档的方法可能非常困难。您必须为您的打印机创建带有打印顺序的文本文件,然后,您可以将此代码设置为打印机:
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 可能有助于转换。祝你好运 :)
于 2013-04-19T17:33:42.550 回答