LibreOffice Module android (master) 1
PDFDocumentAdapter.java
Go to the documentation of this file.
1package org.libreoffice;
2
3import android.annotation.TargetApi;
4import android.content.Context;
5import android.os.Bundle;
6import android.os.CancellationSignal;
7import android.os.ParcelFileDescriptor;
8import android.print.PageRange;
9import android.print.PrintAttributes;
10import android.print.PrintDocumentAdapter;
11import android.print.PrintDocumentInfo;
12
13import java.io.File;
14import java.io.FileInputStream;
15import java.io.FileOutputStream;
16import java.io.IOException;
17import java.io.InputStream;
18import java.io.OutputStream;
19
20@TargetApi(19)
21public class PDFDocumentAdapter extends PrintDocumentAdapter{
22 Context mContext;
23 String pdfFile;
24
25 public PDFDocumentAdapter(Context mContext, String pdfFile) {
26 this.mContext = mContext;
27 this.pdfFile = pdfFile;
28 }
29
30 @Override
31 public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
32 if (cancellationSignal.isCanceled()) {
33 callback.onLayoutCancelled();
34 }
35 else {
36 File f = new File(pdfFile);
37 PrintDocumentInfo.Builder builder=
38 new PrintDocumentInfo.Builder(f.getName());
39 builder.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
40 .setPageCount(PrintDocumentInfo.PAGE_COUNT_UNKNOWN)
41 .build();
42 callback.onLayoutFinished(builder.build(),
43 !newAttributes.equals(oldAttributes));
44 }
45 }
46
47 @Override
48 public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
49 InputStream in=null;
50 OutputStream out=null;
51 try {
52 File file = new File(pdfFile);
53 in = new FileInputStream(file);
54 out=new FileOutputStream(destination.getFileDescriptor());
55
56 byte[] buf=new byte[in.available()];
57 int size;
58
59 while ((size=in.read(buf)) >= 0
60 && !cancellationSignal.isCanceled()) {
61 out.write(buf, 0, size);
62 }
63
64 if (cancellationSignal.isCanceled()) {
65 callback.onWriteCancelled();
66 }
67 else {
68 callback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES });
69 }
70 }
71 catch (Exception e) {
72 callback.onWriteFailed(e.getMessage());
73 e.printStackTrace();
74 }
75 finally {
76 try {
77 in.close();
78 out.close();
79 }
80 catch (IOException e) {
81 e.printStackTrace();
82 }
83 }
84
85 }
86}
void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras)
PDFDocumentAdapter(Context mContext, String pdfFile)
void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback)
size
@ Exception