Pregunta

I have to implement PDF viewer library in project I am following https://github.com/bhavyahmehta/Pdf-Reader---Writer/blob/master/Pdf_%20Reader_Writer/README.md In this example they are creating PDF and loading in viewer. Actually I understood how library works Here is the below snippet of code for creating and loading PDF from library:

            @Override
    protected Void doInBackground(Void... params)
    {
    String pdfcontent = generateHelloWorldPDF(); //generating pdf content
    outputToFile("PdfSample.pdf",pdfcontent,"ISO-8859-1"); //passing pdf name and content
        return null;
    }

          private String generateHelloWorldPDF() 
          { //function returns pdf content with pages
        PDFWriter mPDFWriter = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT);


    try {
        // all image formates are supported
        Bitmap i1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);   
        mPDFWriter.addImage(40, 60, i1, Transformation.DEGREES_315_ROTATION);
        mPDFWriter.addImage(72, 72, i1);
        mPDFWriter.addImage(200, 400, 135, 75, i1);
        mPDFWriter.addImage(150, 300, 130, 70, i1);
        mPDFWriter.addImageKeepRatio(100, 200, 50, 25, i1);
        mPDFWriter.addImageKeepRatio(50, 100, 30, 25, i1, Transformation.DEGREES_270_ROTATION);
        mPDFWriter.addImageKeepRatio(25, 50, 30, 25, i1);
    } catch (Exception e) {
        e.printStackTrace();
    }

    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.TIMES_ROMAN);
    mPDFWriter.addRawContent("row content \n");
    mPDFWriter.addText(70, 50, 12, "hello world");
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING);
    mPDFWriter.addRawContent("row content rg\n");
    mPDFWriter.addText(30, 90, 10, "� CRL", Transformation.DEGREES_270_ROTATION);

    mPDFWriter.newPage();
    mPDFWriter.addRawContent("[] 0 d\n");
    mPDFWriter.addRawContent("1 w\n");
    mPDFWriter.addRawContent("0 0 1 RG\n");
    mPDFWriter.addRawContent("0 1 0 rg\n");
    mPDFWriter.addRectangle(40, 50, 280, 50);
    mPDFWriter.addText(85, 75, 18, "Android Docs");

    mPDFWriter.newPage();
    mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER_BOLD);
   // mPDFWriter.addText(150, 150, 14, "http://coderesearchlabs.com");
    mPDFWriter.addLine(150, 140, 300, 140);

    String s = mPDFWriter.asString();
    return s;
}


         private void outputToFile(String fileName, String pdfContent, String encoding)        { //function which pushes the file to below path
    //System.out.println("content" +fileName);
   if(isSDPresent)
   {

       try {
                File dir = new File(Environment.getExternalStorageDirectory() + "/pdf_Writer_Reader/");
                if (!dir.exists())
                {
                    dir.mkdirs();
                }

                newFile = new File(dir,fileName);
                if(!newFile.exists())
                {
                    newFile.createNewFile();
                }

               try
               {
                    FileOutputStream pdfFile = new FileOutputStream(newFile);
                    pdfFile.write(pdfContent.getBytes(encoding));               
                    pdfFile.close();
               }
               catch(FileNotFoundException e) {
                Log.e("Ex==",""+e.toString());
               }
       } 
       catch(IOException e)
       {
        Log.e("Ex==",""+e.toString());
       }
   }

can anybody suggest on how to load PDF from sdcard any help will be thankful.

¿Fue útil?

Solución

The project you mentioned on GitHub is based on MuPDF library. In the same GitHub project you have an example of reading a pdf in an Activity - MuPDFActivity The part of the Activity which reads the PDF is at the start -

private MuPDFCore openFile(String path)
{
    int lastSlashPos = path.lastIndexOf('/');
    mFileName = new String(lastSlashPos == -1? path : path.substring(lastSlashPos+1));
    System.out.println("Trying to open "+path);
    try
    {
        core = new MuPDFCore(path);
        // New file: drop the old outline data
        OutlineActivityData.set(null);
    }
    catch (Exception e)
    {
        System.out.println(e);
        return null;
    }
    return core;
}

Using the MuPDFCore instance you call

    public static native void drawPage(Bitmap bitmap, int pageW, int pageH, 
int patchX, int patchY,
int patchW, int patchH);

to write the particular page on the bitmap. To know more check the project which has a working sample to display pdfs.

Otros consejos

//comment your openFile(String path) function and replace below code ...

private MuPDFCore openFile()
{
    String storageState = Environment.getExternalStorageState();
    File path, file;
    MuPDFCore core;

    if (Environment.MEDIA_MOUNTED.equals(storageState))
    {
        System.out.println("Media mounted read/write");
    }
    else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(storageState))
    {
        System.out.println("Media mounted read only");
    }
    else
    {
        System.out.println("No media at all! Bale!\n");
        return null;
    }
    path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    file = new File(path, "TheAccidentalBully.pdf");
    System.out.println("Trying to open "+file.toString());
    try
    {
        core = new MuPDFCore(file.toString());
    }
    catch (Exception e)
    {
        System.out.println(e);
        return null;
    }
    return core;
}

         and onCreate

           if (core == null) {
        Intent intent = getIntent();
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            core = openFile();
            SearchTaskResult.set(null);
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top