0

是否有任何常见的 sdk 、库等可以通过 wifi 将手机或标签连接到任何打印机(任何公司)并能够打印出 pdf?我不想使用像 epson iprint 这样的应用程序,因为我必须集成它并且云打印不是一个选项?

4

2 回答 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 回答