Skip to content

java.io.IOException: File is empty #8

@dedetok

Description

@dedetok

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions