it-swarm.com.de

Wie kann ich Dokumente (.pdf, .doc) ohne externe App öffnen/anzeigen?

Ich möchte ein Programm erstellen, das Dokumente ohne externe App öffnet. Ich brauche das, weil ich das Dokument mit der Orientierung des Telefons (Pitch and Roll) scrollen möchte. Ich erstelle eine Schaltfläche am unteren Rand des Bildschirms. Wenn ich die Taste gedrückt halte, kann ich auch das Dokument scrollen. Wenn ich die Taste loslasse, kann ich sie nicht scrollen. Wenn ich also das Dokument mit einer externen App öffne, wird meine Schaltfläche ausgeblendet und der sensorManager funktioniert auch nicht.

Haben Sie eine Idee, um dieses Problem zu lösen. Oder haben Sie eine Idee, wie Sie das in einer externen App geöffnete Dokument mit der Orientierung meines Telefons scrollen können?

(Entschuldigung für mein Englisch)

Das ist mein Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.orientationscrolling"
Android:versionCode="1"
Android:versionName="1.0" >

<uses-sdk
    Android:minSdkVersion="8"
    Android:targetSdkVersion="17" />
<uses-permission Android:name="Android.permission.INTERNET" />

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="com.example.orientationscrolling.MainActivity"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

Das ist mein Layout:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >

<WebView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/webView1"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="bottom"
    Android:orientation="vertical" >

<Button 
   Android:id="@+id/mybutt"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:textSize="25sp"
   Android:text="Scroll!!"
   Android:layout_gravity="right"/>
</LinearLayout>

Das ist mein Code:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    button = (Button) findViewById( R.id.mybutt );

    String pdf = "http://www.pc-hardware.hu/PDF/konfig.pdf";
    String doc="<iframe src='http://docs.google.com/gview?embedded=true&url=http://www.pc-hardware.hu/PDF/konfig.pdf' 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.loadData( doc , "text/html", "UTF-8");
}
18
KhalDrogo

Ich denke, Sie sollten eine benutzerdefinierte Bibliothek verwenden, um dies zu erreichen. Siehe this und this

Es gibt jedoch eine Möglichkeit, PDF anzuzeigen, ohne eine andere Anwendung aufzurufen

Auf diese Weise können Sie PDF in Android App anzeigen, in die das PDF Dokument in Android-Webansicht eingebettet ist mit Unterstützung von http://docs.google.com/viewer

pseudo-

String doc="<iframe src='http://docs.google.com/viewer?url=+location to your PDF File+' 
              width='100%' height='100%' 
              style='border: none;'></iframe>";

ein Beispiel ist unten gezeigt

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

Code

    WebView  wv = (WebView)findViewById(R.id.webView); 
    wv.getSettings().setJavaScriptEnabled(true);
    wv.getSettings().setPluginsEnabled(true);
    wv.getSettings().setAllowFileAccess(true);
    wv.loadUrl(doc);
    //wv.loadData( doc, "text/html",  "UTF-8");

und in Manifest liefern

<uses-permission Android:name="Android.permission.INTERNET"/>

Siehe dies

Achtung: Ich kenne keine Kompatibilitätsprobleme mit verschiedenen Android Versionen

Bei diesem Ansatz besteht der Nachteil darin, dass Sie eine Internetverbindung benötigen. Aber ich denke, es befriedigt Ihr Bedürfnis

BEARBEITEN Versuchen Sie dies als Quelle für Iframe

src="http://docs.google.com/gview?embedded=true&url=http://www.pc-hardware.hu/PDF/konfig.pdf"

versuchen Sie wv.loadData( doc , "text/html", "UTF-8");. Beides funktioniert bei mir

enter image description hereenter image description here

24
edwin

Laden Sie den Quellcode von hier herunter ( Datei PDF in meiner Android-Anwendung anzeigen )

Füge diese Abhängigkeit in deiner Note hinzu:

compile 'com.github.barteksc:Android-pdf-viewer:2.0.3'

activity_main.xml

<RelativeLayout Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#ffffff"
    xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="40dp"
        Android:background="@color/colorPrimaryDark"
        Android:text="View PDF"
        Android:textColor="#ffffff"
        Android:id="@+id/tv_header"
        Android:textSize="18dp"
        Android:gravity="center"></TextView>

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


    </RelativeLayout>

MainActivity.Java

package pdfviewer.pdfviewer;

import Android.app.Activity;
import Android.database.Cursor;
import Android.net.Uri;
import Android.provider.OpenableColumns;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.View;
import Android.widget.ImageView;
import Android.widget.RelativeLayout;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;

import Java.util.List;

public class MainActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener{
    private static final String TAG = MainActivity.class.getSimpleName();
    public static final String SAMPLE_FILE = "Android_tutorial.pdf";
    PDFView pdfView;
    Integer pageNumber = 0;
    String pdfFileName;

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

}

Vielen Dank!

1
Deepshikha Puri

Die oben genannten Antworten, die von Google-Dokumenten abhängen, funktionieren nur, wenn Sie über eine Internetverbindung verfügen. Eine bessere Option wäre die Verwendung von Android PdfRenderer class. 

Sie können die Beispiel-App hier ausprobieren.

0
m__

Nun, ich denke unten ist die Lösung

 String doc="<iframe src='http://docs.google.com/viewer?url=http://www.example.com/yourfile.pdf&embedded=true' width='100%' height='100%'  style='border: none;'></iframe>";


    WebView  wv = (WebView)findViewById(R.id.wv);
    wv.setVisibility(WebView.VISIBLE);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.getSettings().setAllowFileAccess(true);
    wv.getSettings().setPluginState(WebSettings.PluginState.ON);  
    wv.setWebViewClient(new Callback()); 
    wv.loadData(doc, "text/html", "UTF-8");   

Ich hoffe, das hilft dir :)

0
Suresh