我必须使用具有特定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?
答案 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();
}
}
或使用MuPDF
答案 2 :(得分:0)
如上所述,您可以尝试使用pdfbox提取文本,但您还需要特别保留格式,围绕表格,pdftron似乎是更好的选择。它提供了很多方便的apis来实现同样的目标。您可以参考他们的网站以获取完整的工作示例。
注意:我不是代表pdftron,也不是为他们工作。