java.io.IOException: File is empty
I'm writing a print service to convert a pdf document page into image (bitmap). latter its bitmap will be print using esc pos command. Here is method that I use in my print service, most code from your sample. DedetLogger just Android android.util.Log to simplify printing output.
@Override
protected void onPrintJobQueued(PrintJob printJob) {
DedetLogger.Info(LOG_TAG, "onPrintJobQueued");
printJob.start(); // to tell system printing is starting
// https://github.com/barteksc/PdfiumAndroid
ParcelFileDescriptor fd = printJob.getDocument().getData();
fd.parseMode("r");
//PdfiumCore pdfiumCore = new PdfiumCore(this);
PdfiumCore pdfiumCore = new PdfiumCore(getApplicationContext());
try {
DedetLogger.Info(LOG_TAG, "Input Stream");
InputStream fileStream = new FileInputStream(fd.getFileDescriptor());
byte[] tmp = new byte[4];
fileStream.read(tmp,0,4);
//byte[] b = s.getBytes("UTF-8"); // string to byte
String s = new String(tmp); // byte to strint
DedetLogger.Info(LOG_TAG, "4bytes: "+s); // output: /com.dedetok.mypdf I/PS: 4bytes: %PDF i.e. file exist
DedetLogger.Info(LOG_TAG, "#create PDFDocument object");
com.shockwave.pdfium.PdfDocument pdfDocument = pdfiumCore.newDocument(fd);
// Error: /com.dedetok.mypdf W/System.err: java.io.IOException: File is empty
int pageNum=1;
DedetLogger.Info(LOG_TAG, "#open page 1");
pdfiumCore.openPage(pdfDocument, pageNum);
int width = pdfiumCore.getPageWidthPoint(pdfDocument, pageNum);
int targetW = 57;
int height = pdfiumCore.getPageHeightPoint(pdfDocument, pageNum);
int targetH = height*width/57;
DedetLogger.Info(LOG_TAG, "#render page 1 into bitmap");
Bitmap bitmap = Bitmap.createBitmap(targetW, targetH, Bitmap.Config.ARGB_8888);
pdfiumCore.renderPageBitmap(pdfDocument, bitmap, pageNum, 0, 0, targetW, targetH);
DedetLogger.Info(LOG_TAG, "Render pdf to image done no error.");
com.shockwave.pdfium.PdfDocument.Meta meta = pdfiumCore.getDocumentMeta(pdfDocument);
DedetLogger.Info(LOG_TAG, "title = " + meta.getTitle());
DedetLogger.Info(LOG_TAG, "author = " + meta.getAuthor());
DedetLogger.Info(LOG_TAG, "subject = " + meta.getSubject());
DedetLogger.Info(LOG_TAG, "keywords = " + meta.getKeywords());
DedetLogger.Info(LOG_TAG, "creator = " + meta.getCreator());
DedetLogger.Info(LOG_TAG, "producer = " + meta.getProducer());
DedetLogger.Info(LOG_TAG, "creationDate = " + meta.getCreationDate());
DedetLogger.Info(LOG_TAG, "modDate = " + meta.getModDate());
printBookmarksTree(pdfiumCore.getTableOfContents(pdfDocument), "-");
pdfiumCore.closeDocument(pdfDocument); // important!
fd.close();
} catch (IOException e) {
e.printStackTrace();
}
printJob.complete(); // to tell system printing is starting
DedetLogger.Info(LOG_TAG, "Print Job Completed");
}
void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (com.shockwave.pdfium.PdfDocument.Bookmark b : tree) {
DedetLogger.Info(LOG_TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));
if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
This is the error: com.shockwave.pdfium.PdfDocument pdfDocument = pdfiumCore.newDocument(fd); // Error: /com.dedetok.mypdf W/System.err: java.io.IOException: File is empty
59:13.714 4298-4298/com.dedetok.mypdf I/PS: #create PDFDocument object 08-29 21:59:13.778 4298-4298/com.dedetok.mypdf W/System.err: java.io.IOException: File is empty 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(Native Method) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.shockwave.pdfium.PdfiumCore.newDocument(PdfiumCore.java:105) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.shockwave.pdfium.PdfiumCore.newDocument(PdfiumCore.java:98) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.dedetok.mypdf.DedetPrintService.onPrintJobQueued(DedetPrintService.java:86) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at android.printservice.PrintService$ServiceHandler.handleMessage(PrintService.java:516) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at android.os.Looper.loop(Looper.java:136) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5001) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at java.lang.reflect.Method.invoke(Method.java:515) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 08-29 21:59:13.782 4298-4298/com.dedetok.mypdf W/System.err: at dalvik.system.NativeStart.main(Native Method)
Can you help me to solve it, please.
I meet the same question . Can you help me to solve it,please!
I have the same issue with open ParcelFileDescriptor from my ContentProvider. This exception in mainJNILib.cpp