在我的Android应用程序中显示Word/PDF文档

在我的Android应用程序中显示Word/PDF文档,android,pdf,ms-word,Android,Pdf,Ms Word,我已经考虑了所有可能的选择。我需要在android应用程序中显示pdf和word文档。出于某些安全原因,我不允许在第三方应用程序中打开文档。但不幸的是,内置android没有内置组件来显示word文档&默认内置组件用于显示API 21及以上版本的pdf支持(我的应用程序从API 19开始)。有谁能解释一下这个问题,因为我找不到任何解决办法。请注意,我正在寻找开源解决方案。在webview中打开pdf/Doc String pdf = "http://www.pc-hardware.hu

我已经考虑了所有可能的选择。我需要在android应用程序中显示pdf和word文档。出于某些安全原因,我不允许在第三方应用程序中打开文档。但不幸的是,内置android没有内置组件来显示word文档&默认内置组件用于显示API 21及以上版本的pdf支持(我的应用程序从API 19开始)。有谁能解释一下这个问题,因为我找不到任何解决办法。请注意,我正在寻找开源解决方案。

在webview中打开pdf/Doc

     String pdf = "http://www.pc-hardware.hu/PDF/konfig.pdf";
   String doc="<iframe src='http://docs.google.com/viewer?url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true' 
              width='100%' height='100%' 
              style='border: none;'></iframe>";
    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setPluginsEnabled(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.loadUrl(doc);
stringpdf=”http://www.pc-hardware.hu/PDF/konfig.pdf";
字符串doc=”“;
webView=(webView)findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.loadUrl(doc);

您可以使用第三方库在视图中显示它 像


main活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    pdfView= (PDFView)findViewById(R.id.pdfView);
    displayFromAsset(SAMPLE_FILE);
}

private void displayFromAsset(String assetFileName) {
    pdfFileName = assetFileName;

    pdfView.fromAsset(SAMPLE_FILE)
            .defaultPage(pageNumber)
            .enableSwipe(true)

            .swipeHorizontal(false)
            .onPageChange(this)
            .enableAnnotationRendering(true)
            .onLoad(this)
            .scrollHandle(new DefaultScrollHandle(this))
            .load();
}


@Override
public void onPageChanged(int page, int pageCount) {
    pageNumber = page;
    setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}


@Override
public void loadComplete(int nbPages) {
    PdfDocument.Meta meta = pdfView.getDocumentMeta();
    printBookmarksTree(pdfView.getTableOfContents(), "-");

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
    for (PdfDocument.Bookmark b : tree) {

        Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

        if (b.hasChildren()) {
            printBookmarksTree(b.getChildren(), sep + "-");
        }
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdfView=(pdfView)findViewById(R.id.pdfView);
displayFromAsset(示例文件);
}
私有void displayFromAsset(字符串assetFileName){
pdfFileName=assetFileName;
pdfView.fromAsset(示例文件)
.defaultPage(页码)
.enableSwipe(真)
.swipeHorizontal(错误)
.onPageChange(此)
.enableAnnotationRendering(真)
.onLoad(此)
.scrollHandle(新的DefaultScrollHandle(此))
.load();
}
@凌驾
公共无效页已更改(整页,整页计数){
页码=页码;
setTitle(String.format(“%s%s/%s”,pdfFileName,第+1页,pageCount));
}
@凌驾
公共无效加载完成(整版){
PdfDocument.Meta=pdfView.getDocumentMeta();
printBookmarksTree(pdfView.getTableOfContents(),“-”;
}
public void printBookmarksTree(列表树,字符串sep){
for(PdfDocument.Bookmark b:树){
Log.e(TAG,String.format(“%s%s,p%d”,sep,b.getTitle(),b.getPageIdx());
if(b.haschilds()){
printBookmarksTree(b.getChildren(),sep+“-”;
}
}
}

这可能是重复的。您确定可以在
webView
中打开一个扩展名为.doc/.docx的文件吗?是的,如果您不想使用任何第三方视图,它可以正常工作,但您没有选择工具,听起来很棒。!感谢您的回复,但对于一些问题,我收到了一个错误,即拒绝加载无效的url。您能通过您的pdf url吗?我猜他已经说过他不想使用任何第三方库。不想在第三方应用程序中打开,但可以使用第三方库在他的应用程序中打开感谢Kashif的回复。我已经查过了。问题是它只支持pdf&我也有word文档。因此,我想到了一个共同的解决方案,在那里我可以同时使用它
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    pdfView= (PDFView)findViewById(R.id.pdfView);
    displayFromAsset(SAMPLE_FILE);
}

private void displayFromAsset(String assetFileName) {
    pdfFileName = assetFileName;

    pdfView.fromAsset(SAMPLE_FILE)
            .defaultPage(pageNumber)
            .enableSwipe(true)

            .swipeHorizontal(false)
            .onPageChange(this)
            .enableAnnotationRendering(true)
            .onLoad(this)
            .scrollHandle(new DefaultScrollHandle(this))
            .load();
}


@Override
public void onPageChanged(int page, int pageCount) {
    pageNumber = page;
    setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}


@Override
public void loadComplete(int nbPages) {
    PdfDocument.Meta meta = pdfView.getDocumentMeta();
    printBookmarksTree(pdfView.getTableOfContents(), "-");

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
    for (PdfDocument.Bookmark b : tree) {

        Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

        if (b.hasChildren()) {
            printBookmarksTree(b.getChildren(), sep + "-");
        }
    }
}