【问题标题】:Print a PDF file to a printer using PrintWriter via Socket connection使用 PrintWriter 通过 Socket 连接将 PDF 文件打印到打印机
【发布时间】:2016-09-19 10:21:24
【问题描述】:

我必须使用具有特定 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?

【问题讨论】:

  • @Techidiot,没有帮助
  • 你在哪里阅读文件?
  • 读取异步任务
  • 您不能简单地阅读 PDF 文件。您需要使用 PDFBox 或 IText 库来执行此操作。

标签: java android sockets


【解决方案1】:

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

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

我还没有完全按照您的要求做,但我认为我上面解释的内容是您的开始。

我很想知道您是否能够做到。告诉我。

【讨论】:

  • 我用谷歌搜索了很多,但我找不到任何可以将 pdf 转换为 PDL 的库,所以如果您知道请分享链接
  • @VishwajitPalankar 恐怕没有 java/android 库可以做到这一点。我使用为android编译的ghostscript将ps转换为pdf。您可以这样做并将pdf转换为ps。这是问题的链接。看看 chrisl stackoverflow.com/questions/37478507/… 的回答。使用此答案为 android 构建 ghostscript。为了完成这项工作,我必须根植我的设备及其漫长的过程
  • @VishwajitPalankar 更简单的方法是将您的pdf文件上传到服务器,然后使用ghostscript for linux将其转换为PS或PCL,然后使用该PS文件。总会有网络延迟。让我知道你在做什么。
  • 帮我看看如何将 pdf 转换为打印机可以理解的原始数据
【解决方案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

【讨论】:

  • 这个库非常适合阅读 pdf 的文本,但我想打印 pdf,因为它就像表格一样,使用这个库显示的所有内容我只能从pdf不是实际的pdf
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2014-07-22
    • 2015-10-19
    • 2013-07-01
    • 2014-12-21
    • 2014-06-23
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多