PdfiumAndroid icon indicating copy to clipboard operation
PdfiumAndroid copied to clipboard

java.io.IOException: File is empty

Open dedetok opened this issue 9 years ago • 2 comments

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.

dedetok avatar Aug 30 '16 02:08 dedetok

I meet the same question . Can you help me to solve it,please!

MrLeion avatar Aug 21 '17 08:08 MrLeion

I have the same issue with open ParcelFileDescriptor from my ContentProvider. This exception in mainJNILib.cpp

RJSDevel avatar Dec 14 '20 07:12 RJSDevel