使用PrintWriter通过Socket连接将PDF文件打印到打印机

时间:2016-09-19 10:21:24

标签: java android sockets

我必须使用具有特定IP地址的打印机打印pdf文件。我能够打印一个特定的文本,但我想打印一个文件或一个HTML解析文本。

我的代码:

try {
    Socket sock = new Socket("192.168.0.131", 9100);
    PrintWriter oStream = new PrintWriter(sock.getOutputStream());
    oStream.println("HI,test from Android Device");
    oStream.println("\n\n\n");
    oStream.close();
    sock.close();
} catch (UnknownHostException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

另请说明投票的原因

修改

很多人都建议使用PDL但是如何将pdf转换为PDL?

3 个答案:

答案 0 :(得分:3)

发送到打印机的数据必须是页面描述语言(PDL' s),语言打印机才能理解。 Here你可以找到一些基本的理解。大多数打印机都能理解ASCII字符串,这就是您能够打印字符串的原因。但是当谈到复杂的文档格式(如PDF,Excel,HTML页面等)时,您必须将文档转换为其中一个PDL。我使用过的最常见的PDL是PostScript(PS)和PCL(打印机命令语言)。

现在,为了打印具有精确格式的PDF(您需要解决方案),您必须将PDF文档转换为PCl或Postscript,然后将该PCL或postscript数据发送到打印机。 您可以使用ghostscript将PDF转换为PS或PCL。

我还没有完全按照你要做的去做,但我认为我上面解释的是你的开始。

我很想知道你是否能够做到这一点。让我知道。

答案 1 :(得分:2)

您需要使用也适用于Android的PDFBox库。

您可以使用它来获取PDF文本,然后将其用于您的目的 -

java示例 -

import java.io.File;
import java.io.IOException; 
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

public class myProgram{

    public static void main(String[] args)
    try {
        PDDocument document = null;
        document = PDDocument.load(new File("my_file.pdf"));
        document.getClass();
        if (!document.isEncrypted()) {
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);
        PDFTextStripper Tstripper = new PDFTextStripper();
        String st = Tstripper.getText(document);
        System.out.println("Text:" + st);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

PdfBox-For-Android

或使用MuPDF

答案 2 :(得分:0)

如上所述,您可以尝试使用pdfbox提取文本,但您还需要特别保留格式,围绕表格,pdftron似乎是更好的选择。它提供了很多方便的apis来实现同样的目标。您可以参考他们的网站以获取完整的工作示例。

注意:我不是代表pdftron,也不是为他们工作。