您的位置:首页 > 理论基础 > 计算机网络

android网络打印 生成pdf

2016-05-25 15:41 435 查看

android通过局域网连接打印机不是很好实现,最近做了个通过android生成pdf上传到后台,后台调用pc驱动完成打印功能。

Desktop desktop;
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop();
try {
<span style="color:#ff6666;"> desktop.print(new File("d:\\upload\\" + fileName));
</span> map.put("resultId", 1);
map.put("detail", "success print");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
map.put("resultId", 0);
map.put("detail", e.getMessage());
}
} else {
map.put("resultId", -1);
map.put("detail", "not Support print");
}
1:利用Itext插件生成pdf

public int dkzzszyfp() {
// 1:建立Document对象实例
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
FileOutputStream fos;
try {
fos = new FileOutputStream(new File(
Environment.getExternalStorageDirectory()
+ "/kuangtiecheng1.pdf"));
// 2:建立一个PDF 写入器与document对象关联通过书写器(Writer)可以将文档写入到磁盘中
PdfWriter.getInstance(document, fos);

// 3:打开文档
document.open();

// 解决中文不显示问题
BaseFont bfChinese = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChina18 = new Font(bfChinese, 18);
Font fontChina12 = new Font(bfChinese, 12);

// 4:向文档添加内容
// 标题
Paragraph titleParagraph = new Paragraph("业务顾问分析表", fontChina18);
titleParagraph.setAlignment(Element.ALIGN_CENTER);// 居中
document.add(titleParagraph);

// 空格
Paragraph blank1 = new Paragraph(" ");
document.add(blank1);

// 编号
Chunk c1 = new Chunk("编号:", fontChina12);
Chunk c2 = new Chunk("20160531001", fontChina12);
Paragraph snoParagraph = new Paragraph();
snoParagraph.add(c1);
snoParagraph.add(c2);
snoParagraph.setAlignment(Element.ALIGN_RIGHT);
document.add(snoParagraph);

// 填开日期
Chunk c5 = new Chunk("填开日期:2016年05月14日", fontChina12);
Paragraph tkrqParagraph = new Paragraph();
tkrqParagraph.add(c5);
tkrqParagraph.setAlignment(Element.ALIGN_RIGHT);
document.add(tkrqParagraph);

// 空格
document.add(blank1);

// 表格处理
PdfPTable table = new PdfPTable(6);// 八列
table.setWidthPercentage(100);// 表格宽度为100%

InputStream abpath = getClass().getResourceAsStream(
"/assets/bq.png");
// String path = new String(InputStreamToByte(abpath ));

//
// String path = "file:///android_asset/bq.png";
Image image2 = Image.getInstance(InputStreamToByte(abpath));
PdfPCell cell8 = new PdfPCell();

// cell8.setFixedHeight(20);
// cell8.setImage(image2);
//
// cell8.disableBorderSide(1);
// cell8.disableBorderSide(2);
// cell8.disableBorderSide(4);
// cell8.disableBorderSide(8);
// cell8.setHorizontalAlignment(RIGHT);

cell8.setBorderWidth(1);
// cell8.setColspan(2);// 跨2列
cell8.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell8.setHorizontalAlignment(Element.ALIGN_CENTER);
cell8.setImage(image2);
table.addCell(cell8);
PdfPCell cell9 = new PdfPCell();
cell9.setBorderWidth(1);
cell9.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell9.setColspan(4);// 跨两列
cell9.setPhrase(new Paragraph("北汽服务问诊", fontChina12));
table.addCell(cell9);

PdfPCell cell10 = new PdfPCell();
cell10.setBorderWidth(1);
cell10.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell10.setPhrase(new Paragraph("经销商代码001211", fontChina12));
table.addCell(cell10);
// Row1
PdfPCell cell14 = new PdfPCell();
cell14.setBorderWidth(1);
cell14.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell14.setPhrase(new Paragraph("客服姓名", fontChina12));
table.addCell(cell14);
PdfPCell cell15 = new PdfPCell();
cell15.setBorderWidth(1);
cell15.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell15.setPhrase(new Paragraph("旷铁成", fontChina12));
table.addCell(cell15);
PdfPCell cell16 = new PdfPCell();
cell16.setBorderWidth(1);
cell16.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell16.setPhrase(new Paragraph("车牌号", fontChina12));
table.addCell(cell16);
PdfPCell cell17 = new PdfPCell();
cell17.setBorderWidth(1);
cell17.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell17.setPhrase(new Paragraph("京NY2008", fontChina12));
table.addCell(cell17);
PdfPCell cell18 = new PdfPCell();
cell18.setBorderWidth(1);
cell18.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell18.setPhrase(new Paragraph("里程数", fontChina12));
table.addCell(cell18);
PdfPCell cell19 = new PdfPCell();
cell19.setBorderWidth(1);
cell19.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell19.setPhrase(new Paragraph("1098公里", fontChina12));
table.addCell(cell19);
PdfPCell cell22 = new PdfPCell();
cell22.setBorderWidth(1);
cell22.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell22.setPhrase(new Paragraph("联系电话", fontChina12));
table.addCell(cell22);
PdfPCell cell23 = new PdfPCell();
cell23.setBorderWidth(1);
cell23.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell23.setPhrase(new Paragraph(myString + "", fontChina12));
table.addCell(cell23);
PdfPCell cell24 = new PdfPCell();
cell24.setBorderWidth(1);
cell24.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell24.setPhrase(new Paragraph("VNI", fontChina12));
table.addCell(cell24);
PdfPCell cell25 = new PdfPCell();
cell25.setBorderWidth(1);
cell25.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell25.setPhrase(new Paragraph("LSVFA257845", fontChina12));
table.addCell(cell25);
PdfPCell cell26 = new PdfPCell();
cell26.setBorderWidth(1);
cell26.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell26.setPhrase(new Paragraph("进店时间", fontChina12));
table.addCell(cell26);
PdfPCell cell27 = new PdfPCell();
cell27.setBorderWidth(1);
cell27.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell27.setPhrase(new Paragraph("2016/4/15", fontChina12));
table.addCell(cell27);

// 价税合计
PdfPCell cell30 = new PdfPCell();
cell30.setBorderWidth(1);
cell30.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell30.setPhrase(new Paragraph("车型", fontChina12));
table.addCell(cell30);
PdfPCell cell31 = new PdfPCell();
cell31.setBorderWidth(1);
// cell31.setColspan(4);// 跨四列
cell31.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell31.setPhrase(new Paragraph("X65", fontChina12));
table.addCell(cell31);
PdfPCell cell32 = new PdfPCell();
cell32.setBorderWidth(1);
cell32.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell32.setPhrase(new Paragraph("颜色", fontChina12));
table.addCell(cell32);
PdfPCell cell33 = new PdfPCell();
cell33.setBorderWidth(1);
// cell33.setColspan(2);// 跨两列
cell33.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell33.setPhrase(new Paragraph("香槟金", fontChina12));
table.addCell(cell33);
// 备注
PdfPCell cell34 = new PdfPCell();
cell34.setBorderWidth(1);
// cell34.setMinimumHeight(40);
cell34.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell34.setPhrase(new Paragraph("预约客户", fontChina12));
table.addCell(cell34);
PdfPCell cell35 = new PdfPCell();
cell35.setBorderWidth(1);
// cell35.setColspan(7);
cell35.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell35.setPhrase(new Paragraph("是", fontChina12));
table.addCell(cell35);

// 销货单位
PdfPCell cell36 = new PdfPCell();
cell36.setBorderWidth(1);// Border宽度为1
// cell36.setRowspan(3);// 跨三行
cell36.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell36.setPhrase(new Paragraph("是否车检", fontChina12));
table.addCell(cell36);

PdfP
c775
Cell cell37 = new PdfPCell();
cell37.setBorderWidth(1);
cell37.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell37.setPhrase(new Paragraph("是", fontChina12));
table.addCell(cell37);
PdfPCell cell38 = new PdfPCell();
cell38.setBorderWidth(1);
// cell38.setColspan(3);// 跨三列
cell38.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell38.setPhrase(new Paragraph("维修类别", fontChina12));
table.addCell(cell38);

PdfPCell cell39 = new PdfPCell();
cell39.setBorderWidth(1);
cell39.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell39.setPhrase(new Paragraph("板喷", fontChina12));
table.addCell(cell39);
PdfPCell cell40 = new PdfPCell();
cell40.setBorderWidth(1);
// cell40.setColspan(2);// 跨两列
cell40.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell40.setPhrase(new Paragraph("是否洗车", fontChina12));
table.addCell(cell40);

PdfPCell cell41 = new PdfPCell();
cell41.setBorderWidth(1);
cell41.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell41.setPhrase(new Paragraph("是", fontChina12));
table.addCell(cell41);
PdfPCell cell42 = new PdfPCell();
cell42.setBorderWidth(1);
cell42.setColspan(3);// 跨三列存储
cell42.setRowspan(3);
cell42.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell42.setPhrase(new Paragraph("用户表述", fontChina12));
table.addCell(cell42);

PdfPCell cell43 = new PdfPCell();
cell43.setBorderWidth(1);
cell43.setColspan(3);// 跨三列存储
cell43.setRowspan(3);
cell43.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell43.setPhrase(new Paragraph("初步诊断", fontChina12));
table.addCell(cell43);
PdfPCell cell44 = new PdfPCell();
cell44.setBorderWidth(1);
// cell44.setColspan(2);// 跨两列
cell42.setRowspan(5);
cell44.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell44.setPhrase(new Paragraph("问诊", fontChina12));
table.addCell(cell44);

PdfPCell cell45 = new PdfPCell();
cell45.setBorderWidth(1);
cell45.setColspan(5);
cell42.setRowspan(5);
cell45.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
cell45.setPhrase(new Paragraph(
"1:发生时间:3天前\n2:出现频率:3天前\n3:工作状态:p档\n4:何时发生:起步\n5:天气状况:全天",
fontChina12));
table.addCell(cell45);

document.add(table);

document.add(blank1);

// // 底部额外信息
// StringBuilder sb1 = new StringBuilder();
// sb1.append("申请代开发票纳税人(公章)_________");
// sb1.append("法人代表_________");
// sb1.append("财务负责人_________");
// sb1.append("填写人_________");
// Paragraph pE = new Paragraph(sb1.toString(), fontChina12);
// pE.setAlignment(Element.ALIGN_CENTER);
// document.add(pE);
//
// document.add(blank1);
//
// // 注
// StringBuilder sb2 = new StringBuilder();
// sb2.append("注:第一联:税务机关代开发票岗位留存。");
// sb2.append("第二联:税务机关税款征收岗位留存。");
// Paragraph pZ = new Paragraph(sb2.toString(), fontChina12);
// pZ.setAlignment(Element.ALIGN_CENTER);
// document.add(pZ);

// 5:关闭文档
document.close();
fos.flush();
fos.close();
flag = 1;
} catch (FileNotFoundException e) {
e.printStackTrace();
flag = -1;
} catch (DocumentException e) {
e.printStackTrace();
flag = -1;
} catch (IOException e) {
e.printStackTrace();
flag = -1;
}
return flag;
}


2:转换成html文件通过WebView显示打印预览

package com.example.mytabletest;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;

public class ShowWordActivity extends Activity implements OnClickListener {

private WebView webview;
private String htmlPath;
String filePath = Environment.getExternalStorageDirectory()+"/bb.doc";
private String fileUrlpdf;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.showword);
TextView title = (TextView) findViewById(R.id.middle_tv);
title.setText("预览");
TextView right=(TextView) findViewById(R.id.right_tv);
right.setText("打印");
right.setVisibility(View.VISIBLE);
right.setOnClickListener(this);
webview = (WebView) findViewById(R.id.webview);
filePath = this.getIntent().getExtras().getString("filePath");
fileUrlpdf = this.getIntent().getExtras().getString("filePathpdf");

if(!isExists(filePath)) {
try {
Log.e("文件不存在", "HTML路径 :" + htmlPath + "| " + filePath);
WordToHtml.convert2Html(filePath, htmlPath);
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}

WebSettings settings = webview.getSettings();
//settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
settings.setJavaScriptEnabled(true);
webview.loadUrl("file://"+ htmlPath);
}

public boolean isExists(String path) {
htmlPath = path.replace(".doc", ".html");
File file = new File(htmlPath);
if(file.exists()) {
file.delete();
}
return false;
}

public String getHtmlString(String urlString) {

try {
URL url = null;
url = new URL(urlString);
URLConnection ucon = null;
ucon = url.openConnection();
InputStream instr = null;
instr = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(instr);
ByteArrayBuffer baf = new ByteArrayBuffer(500);
int current = 0;
while((current = bis.read()) != -1) {
baf.append((byte) current);
}
return EncodingUtils.getString(baf.toByteArray(), "UTF-8");
}
catch(Exception e) {
return "";

}

}

public void print(File file,String str) {

FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file, false);

bw = new BufferedWriter(fw);
bw.write(str);
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
int resultID = -1;
String result1 = "";
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.right_tv:
showProgressBar();
AsyUpFile upFile = new AsyUpFile(this, fileUrlpdf){
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i("result", "upfile"+result);
if (result.equals("")) {

Toast.makeText(ShowWordActivity.this, "后台出错",
Toast.LENGTH_LONG).show();
return;
}
try {
JSONObject json = new JSONObject(result);
result1 = json.getString("detail");
resultID = json.getInt("resultID");
if (resultID==1) {
printpdfs();
} else {
Toast.makeText(ShowWordActivity.this, "打印失败",
Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};upFile.execute();

break;

default:
break;
}
}

private void printpdfs(){
AsyPrint prinTask = new AsyPrint( this,
fileUrlpdf) {

@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
hideProgressBar();
Log.i("result", "print"+result);
if (result.equals("")) {

Toast.makeText(ShowWordActivity.this, "后台出错",
Toast.LENGTH_LONG).show();
return;
}
try {
JSONObject json = new JSONObject(result);
result1 = json.getString("detail");
resultID = json.getInt("resultId");
if (resultID==1) {
Toast.makeText(ShowWordActivity.this, "打印成功",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ShowWordActivity.this, "打印失败",
Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

};
prinTask.execute();
}
protected Dialog progressDialog;
// 显示载入弹窗
public void showProgressBar() {
hideProgressBar();
// dialogProgress =new CustomProgressDialog(this, "正在加载中");
// dialogProgress.show();
progressDialog = new Dialog(this, R.style.progress_dialog);
progressDialog.setContentView(R.layout.progress_dialog_ios);
progressDialog.setCancelable(true);
progressDialog.getWindow().setBackgroundDrawableResource(
android.R.color.transparent);
TextView msg = (TextView) progressDialog
.findViewById(R.id.id_tv_loadingmsg);
msg.setText("打印文件发送中");
progressDialog.show();
}

// 隐藏载入弹窗
public void hideProgressBar() {
// if(dialogProgress!=null)
// dialogProgress.dismiss();
if (progressDialog != null)
progressDialog.dismiss();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息