1
+ package org .artoolkitx .utilities .cameracalibration ;
2
+
3
+ import android .content .Context ;
4
+ import android .os .Bundle ;
5
+ import android .os .CancellationSignal ;
6
+ import android .os .ParcelFileDescriptor ;
7
+ import android .print .PageRange ;
8
+ import android .print .PrintAttributes ;
9
+ import android .print .PrintDocumentAdapter ;
10
+ import android .print .PrintDocumentInfo ;
11
+ import android .util .Log ;
12
+
13
+ import java .io .File ;
14
+ import java .io .FileInputStream ;
15
+ import java .io .FileOutputStream ;
16
+ import java .io .IOException ;
17
+ import java .io .InputStream ;
18
+ import java .io .OutputStream ;
19
+ import java .nio .file .Paths ;
20
+
21
+ public class PdfDocumentAdapter extends PrintDocumentAdapter {
22
+
23
+ static final String LOGTAG = "PdfDocumentAdapter" ;
24
+ Context context = null ;
25
+ String pathName = null ;
26
+ String name = null ;
27
+ int resID = 0 ;
28
+ int pageCount = 0 ;
29
+
30
+ public PdfDocumentAdapter (Context ctxt , String pathName , String name , int pageCount ) {
31
+ context = ctxt ;
32
+ this .pathName = pathName ;
33
+ this .name = name ;
34
+ this .resID = 0 ;
35
+ this .pageCount = pageCount ;
36
+ }
37
+
38
+ // Use e.g. new PdfDocumentAdapter(getApplicationContext, R.raw.myfile.pdf, 0);
39
+ public PdfDocumentAdapter (Context ctxt , int resID , String name , int pageCount ) {
40
+ context = ctxt ;
41
+ this .pathName = null ;
42
+ this .name = name ;
43
+ this .resID = resID ;
44
+ this .pageCount = pageCount ;
45
+ }
46
+
47
+ @ Override
48
+ public void onLayout (PrintAttributes printAttributes , PrintAttributes printAttributes1 , CancellationSignal cancellationSignal , LayoutResultCallback layoutResultCallback , Bundle bundle ) {
49
+ if (cancellationSignal .isCanceled ()) {
50
+ layoutResultCallback .onLayoutCancelled ();
51
+ } else {
52
+ PrintDocumentInfo .Builder builder = new PrintDocumentInfo .Builder (name );
53
+ builder .setContentType (PrintDocumentInfo .CONTENT_TYPE_DOCUMENT )
54
+ .setPageCount (pageCount > 0 ? pageCount : PrintDocumentInfo .PAGE_COUNT_UNKNOWN )
55
+ .build ();
56
+ layoutResultCallback .onLayoutFinished (builder .build (),
57
+ !printAttributes1 .equals (printAttributes ));
58
+ }
59
+ }
60
+
61
+ @ Override
62
+ public void onWrite (PageRange [] pageRanges , ParcelFileDescriptor parcelFileDescriptor , CancellationSignal cancellationSignal , WriteResultCallback writeResultCallback ) {
63
+ InputStream in = null ;
64
+ OutputStream out = null ;
65
+ try {
66
+ if (resID != 0 ) {
67
+ in = context .getResources ().openRawResource (resID );
68
+ } else if (pathName != null ) {
69
+ File file = new File (pathName );
70
+ in = new FileInputStream (file );
71
+ } else {
72
+ writeResultCallback .onWriteFailed ("Nothing to print" );
73
+ return ;
74
+ }
75
+ out = new FileOutputStream (parcelFileDescriptor .getFileDescriptor ());
76
+
77
+ byte [] buf = new byte [16384 ];
78
+ int size ;
79
+
80
+ while ((size = in .read (buf )) >= 0 && !cancellationSignal .isCanceled ()) {
81
+ out .write (buf , 0 , size );
82
+ }
83
+
84
+ if (cancellationSignal .isCanceled ()) {
85
+ writeResultCallback .onWriteCancelled ();
86
+ } else {
87
+ writeResultCallback .onWriteFinished (new PageRange [] { PageRange .ALL_PAGES });
88
+ }
89
+ }
90
+ catch (Exception e ) {
91
+ writeResultCallback .onWriteFailed (e .getMessage ());
92
+ Log .e (LOGTAG , "onWrite: " + e );
93
+ }
94
+ finally {
95
+ try {
96
+ in .close ();
97
+ out .close ();
98
+ }
99
+ catch (IOException e ) {
100
+ Log .e (LOGTAG , "close: " + e );
101
+ }
102
+ }
103
+ }
104
+ }
0 commit comments