【问题标题】:Android-Code to Implement PDF Viewer实现 PDF 查看器的 Android 代码
【发布时间】:2012-07-16 07:37:00
【问题描述】:

在这里我需要在我的应用程序中使用 Pdf-Viewer。我将许多 API 作为参考,但仍然坚持从 SDCARD 查看 Pdf 文件。这是我的代码

`First.java

public class First extends ListActivity {
String[] pdflist;
File[] imagelist;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);

    File images = Environment.getExternalStorageDirectory();
    imagelist = images.listFiles(new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return ((name.endsWith(".pdf")));
        }
    });
    pdflist = new String[imagelist.length];
    for (int i = 0; i < imagelist.length; i++) {
        pdflist[i] = imagelist[i].getName();
    }
    this.setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, pdflist));
}
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    String path = imagelist[(int) id].getAbsolutePath();
    openPdfIntent(path);
}
private void openPdfIntent(String path) {
    try {
        final Intent intent = new Intent(First.this, Second.class);
        intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path);
        startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}}

Second.java

public class Second extends PdfViewerActivity {

@Override
public int getPreviousPageImageResource() {
    // TODO Auto-generated method stub
    return R.drawable.left_arrow;
}

@Override
public int getNextPageImageResource() {
    // TODO Auto-generated method stub
    return R.drawable.right_arrow;
}

@Override
public int getZoomInImageResource() {
    // TODO Auto-generated method stub
     return R.drawable.zoom_in;
}

@Override
public int getZoomOutImageResource() {
    // TODO Auto-generated method stub
    return R.drawable.zoom_out;
}

@Override
public int getPdfPasswordLayoutResource() {
    // TODO Auto-generated method stub
    return R.layout.pdf_file_password;  
    }

@Override
public int getPdfPageNumberResource() {
    // TODO Auto-generated method stub
     return R.layout.dialog_pagenumber;
}

@Override
public int getPdfPasswordEditField() {
    // TODO Auto-generated method stub
    return R.id.etPassword;
}

@Override
public int getPdfPasswordOkButton() {
    // TODO Auto-generated method stub
     return R.id.btOK;
}

@Override
public int getPdfPasswordExitButton() {
    // TODO Auto-generated method stub
     return R.id.btExit;
}

@Override
public int getPdfPageNumberEditField() {
    // TODO Auto-generated method stub
    return R.id.pagenum_edit;
}}

我在模拟器对话中使用了Android-Pdf-Reader-Library project.in,因为单击 Pdf 文件后会出现“正在加载 pdf 文件”。谁能告诉我如何通过手指滑动来更改 Pdf 页面??

【问题讨论】:

  • 你找到使用这个库的卷曲/翻转页面的任何解决方案了吗?!

标签: android pdf


【解决方案1】:

你可以在google doc上打开pdf

    WebView webviewer = new WebView(this);
    webviewer.getSettings().setJavaScriptEnabled(true);
    webviewer.getSettings().setPluginsEnabled(true);
    setContentView(webviewer);

    webviewer.loadUrl("http://docs.google.com/gview?embedded=true&url=PDF_url/fileName.pdf");
    setContentView(webviewer);

要在快速 pdf 或 adobe pdf 阅读器等应用程序中打开 PDF:

    Uri path = Uri.fromFile(file);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(path, "application/pdf");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

【讨论】:

  • 感谢您的即时回复。在我的应用程序中,我不需要在 WebView 中打开 PDF。帮我在上面的代码中打开PDF。
  • 如果你不想在 webview 上打开,只需使用我给你的第二个代码在阅读器上打开。
  • 我也试过了。我想在 Uri 路径中作为参数(文件)提供什么?
  • 您必须提供您的 pdf 文件在 SD 卡中保存的路径。最终文件 file = new File(Environment.getExternalStorageDirectory() +"mypdf.pdf");
  • @furqi...Thnks 完美运行...它会在 PDF 页面中打开超链接吗??
【解决方案2】:

您可以使用AndroidPdfViewer 库。

在您的成绩中添加此依赖项:

implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'

在activity_main.xml中添加PDFView

<com.github.barteksc.pdfviewer.PDFView
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

在 MainActivity.java 中添加加载 PDF 文件

pdfView.fromUri(Uri)

pdfView.fromFile(File)

pdfView.fromBytes(byte[])

pdfView.fromStream(InputStream) // stream is written to bytearray - native code cannot use Java Streams

pdfView.fromSource(DocumentSource)

pdfView.fromAsset(String)
    .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
    .enableSwipe(true) // allows to block changing pages using swipe
    .swipeHorizontal(false)
    .enableDoubletap(true)
    .defaultPage(0)
    // allows to draw something on the current page, usually visible in the middle of the screen
    .onDraw(onDrawListener)
    // allows to draw something on all pages, separately for every page. Called only for visible pages
    .onDrawAll(onDrawListener)
    .onLoad(onLoadCompleteListener) // called after document is loaded and starts to be rendered
    .onPageChange(onPageChangeListener)
    .onPageScroll(onPageScrollListener)
    .onError(onErrorListener)
    .onPageError(onPageErrorListener)
    .onRender(onRenderListener) // called after document is rendered for the first time
    // called on single tap, return true if handled, false to toggle scroll handle visibility
    .onTap(onTapListener)
    .onLongPress(onLongPressListener)
    .enableAnnotationRendering(false) // render annotations (such as comments, colors or forms)
    .password(null)
    .scrollHandle(null)
    .enableAntialiasing(true) // improve rendering a little bit on low-res screens
    // spacing between pages in dp. To define spacing color, set view background
    .spacing(0)
    .autoSpacing(false) // add dynamic spacing to fit each page on its own on the screen
    .linkHandler(DefaultLinkHandler)
    .pageFitPolicy(FitPolicy.WIDTH) // mode to fit pages in the view
    .fitEachPage(false) // fit each page to the view, else smaller pages are scaled relative to largest page.
    .pageSnap(false) // snap pages to screen boundaries
    .pageFling(false) // make a fling change only a single page like ViewPager
    .nightMode(false) // toggle night mode
    .load();

如果您使用 ProGuard,请不要忘记添加以下行:

-keep class com.shockwave.**

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多