android 打印机 编程,Android以编程方式打印PDF

我们可以通过创建自定义PrintDocumentAdapter来实现此目的

PdfDocumentAdapter.java

public class PdfDocumentAdapter extends PrintDocumentAdapter {

Context context = null;

String pathName = "";

public PdfDocumentAdapter(Context ctxt, String pathName) {

context = ctxt;

this.pathName = pathName;

}

@Override

public void onLayout(PrintAttributes printAttributes, PrintAttributes printAttributes1, CancellationSignal cancellationSignal, LayoutResultCallback layoutResultCallback, Bundle bundle) {

if (cancellationSignal.isCanceled()) {

layoutResultCallback.onLayoutCancelled();

}

else {

PrintDocumentInfo.Builder builder=

new PrintDocumentInfo.Builder(" file name");

builder.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)

.setPageCount(PrintDocumentInfo.PAGE_COUNT_UNKNOWN)

.build();

layoutResultCallback.onLayoutFinished(builder.build(),

!printAttributes1.equals(printAttributes));

}

}

@Override

public void onWrite(PageRange[] pageRanges, ParcelFileDescriptor parcelFileDescriptor, CancellationSignal cancellationSignal, WriteResultCallback writeResultCallback) {

InputStream in=null;

OutputStream out=null;

try {

File file = new File(pathName);

in = new FileInputStream(file);

out=new FileOutputStream(parcelFileDescriptor.getFileDescriptor());

byte[] buf=new byte[16384];

int size;

while ((size=in.read(buf)) >= 0

&& !cancellationSignal.isCanceled()) {

out.write(buf, 0, size);

}

if (cancellationSignal.isCanceled()) {

writeResultCallback.onWriteCancelled();

}

else {

writeResultCallback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES });

}

}

catch (Exception e) {

writeResultCallback.onWriteFailed(e.getMessage());

Logger.logError( e);

}

finally {

try {

in.close();

out.close();

}

catch (IOException e) {

Logger.logError( e);

}

}

}}

现在使用PrintManager调用print

PrintManager printManager=(PrintManager) SurefoxBrowserScreen.getActivityContext().getSystemService(Context.PRINT_SERVICE);

try

{

PrintDocumentAdapter printAdapter = new PdfDocumentAdapter(Settings.sharedPref.context,filePath );

}

printManager.print("Document", printAdapter,new PrintAttributes.Builder().build());

}

catch (Exception e)

{

Logger.logError(e);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值