1

我必须在我关注的项目中实现 PDF 查看器库https://github.com/bhavyahmehta/Pdf-Reader---Writer/blob/master/Pdf_%20Reader_Writer/README.md 在此示例中,他们正在创建 PDF 并加载在查看器中。实际上我了解库是如何工作的下面是从库中创建和加载 PDF 的代码片段:

            @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());
       }
   }

任何人都可以建议如何从 sdcard 加载 PDF 任何帮助将不胜感激。

4

2 回答 2

0

您在 GitHub 上提到的项目基于MuPDF库。在同一个 GitHub 项目中,您有一个在 Activity 中阅读 pdf 的示例 - MuPDFActivity阅读 PDF 的 Activity部分在开始时 -

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;
}

使用您调用的 MuPDFCore 实例

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

在位图上写入特定页面。要了解更多信息,请查看具有显示 pdf 的工作示例的项目。

于 2013-05-29T09:43:39.823 回答
0

//注释您的 openFile(String path) 函数并替换下面的代码...

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);
        }
于 2013-05-29T12:47:38.217 回答