Wie öffne ich eine PDF-Datei, die entweder im Ordner „res/raw“ oder „assets“ gespeichert ist?

Lesezeit: 6 Minuten

Ich werde eine PDF-Datei in meiner Bewerbung anzeigen, und die PDF-Datei muss mit der Bewerbung gebündelt werden.

Was ist ein guter Weg, dies zu tun?

Ich habe gelesen, dass dies möglicherweise möglich ist, indem die PDF-Datei zu einem res/raw-Ordner hinzugefügt und von dort gelesen wird, aber ich erhalte Projektfehler, wenn ich die PDF-Datei dort ablege.

Also habe ich versucht, die PDF-Datei in den Asset-Ordner des Projekts zu legen, und es gab keine Fehler.

So habe ich versucht, das pdf anzuzeigen:

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

Irgendwelche Ideen oder Vorschläge?

Vielen Dank im Voraus

Wie offne ich eine PDF Datei die entweder im Ordner „resraw
Deepak Sharma

Sie können die PDF-Datei nicht öffnen direkt von dem Vermögenswerte Ordner. Sie müssen zuerst die Datei aus dem Assets-Ordner auf die SD-Karte schreiben und dann von der SD-Karte lesen. Der Code lautet wie folgt: –

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    File fileBrochure = new File(Environment.getExternalStorageDirectory() + "https://stackoverflow.com/" + "abc.pdf");
    if (!fileBrochure.exists())
    {
         CopyAssetsbrochure();
    } 

    /** PDF reader code */
    File file = new File(Environment.getExternalStorageDirectory() + "https://stackoverflow.com/" + "abc.pdf");      

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(file),"application/pdf");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    try 
    {
        getApplicationContext().startActivity(intent);
    } 
    catch (ActivityNotFoundException e) 
    {
         Toast.makeText(SecondActivity.this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show();
    }
}

//method to write the PDFs file to sd card
    private void CopyAssetsbrochure() {
        AssetManager assetManager = getAssets();
        String[] files = null;
        try 
        {
            files = assetManager.list("");
        } 
        catch (IOException e)
        {
            Log.e("tag", e.getMessage());
        }
        for(int i=0; i<files.length; i++)
        {
            String fStr = files[i];
            if(fStr.equalsIgnoreCase("abc.pdf"))
            {
                InputStream in = null;
                OutputStream out = null;
                try 
                {
                  in = assetManager.open(files[i]);
                  out = new FileOutputStream(Environment.getExternalStorageDirectory() + "https://stackoverflow.com/" + files[i]);
                  copyFile(in, out);
                  in.close();
                  in = null;
                  out.flush();
                  out.close();
                  out = null;
                  break;
                } 
                catch(Exception e)
                {
                    Log.e("tag", e.getMessage());
                } 
            }
        }
    }

 private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1){
          out.write(buffer, 0, read);
        }
    }

Das ist alles..Viel Spaß!! und vergessen Sie bitte nicht, +1 zu geben. Danke

  • Wie Lint in der neuen Version empfiehlt. Nicht hartcodieren /sdcard/; benutzen Environment.getExternalStorageDirectory().getPath() stattdessen

    – Marcel Bruder

    12. März 13 um 23:38 Uhr

  • Environment.getExternalStorageDirectory().getPath() + „/“, damit dieses Beispiel funktioniert

    – max4ever

    18. April 14 um 11:03 Uhr

  • Wie lösche ich das PDF, nachdem der Benutzer es gelesen hat? Ich habe versucht, startActivityForResult zu verwenden, aber kein Glück

    – max4ever

    18. April 14 um 11:21 Uhr

Sie könnten es von zeigen raw/ oder assets/ ob Ihre Anwendung tatsächlich einen PDF-Reader implementiert hat. Da Sie möchten, dass es in einer separaten Anwendung (z. B. Adobe Reader) angezeigt wird, schlage ich Folgendes vor:

  1. Speichern Sie die PDF-Datei im assets/ Verzeichnis.
  2. Wenn der Benutzer es anzeigen möchte, kopieren Sie es irgendwo hin allgemein. Einblick in openFileOutput oder getExternalFilesDir.
  3. Starte den Intent genau wie du es jetzt tust, außer verwenden getAbsolutePath() auf der neu erstellten Datei für die Daten des Intents.

Beachten Sie, dass ein Benutzer möglicherweise keine PDF-Leseanwendung hat. In diesem Fall ist es sinnvoll, die zu fangen ActivityNotFoundException und eine entsprechende Meldung anzeigen.

  • Sie können die des PackageManagers verwenden queryIntentActivities Methode, um zu überprüfen, ob eine Aktivität auf einen bestimmten Intent reagieren kann. Sehen Hier zum Beispiel

    – David Snabel-Caunt

    27. Juni 11 um 10:31 Uhr


  • @David Ich wusste, dass ich etwas vergessen habe! Danke, dass du das hinzugefügt hast.

    – Felix

    27. Juni 11 um 10:48 Uhr

  • 🙂 Ich habe das Gefühl, dass Ihre Antwort die beste Lösung ist, es sei denn, externe Anwendungen können auf Paketressourcen zugreifen.

    – David Snabel-Caunt

    27. Juni 11 um 11:01 Uhr

Wie offne ich eine PDF Datei die entweder im Ordner „resraw
David Snabel-Caunt

Ich habe das folgende Format verwendet, um Rohressourcen aus meiner eigenen Anwendung heraus zu öffnen. Ich habe nicht getestet, ob eine andere Anwendung Ihre Rohressource öffnen kann.

Uri path = Uri.parse("android.resource://" + getPackageName() + "https://stackoverflow.com/" + R.raw.myPdfName);

  • hmm, ich habe adobe reader auf meinem gerät installiert, aber ich erhalte eine ActivitynotFoundException. Irgendwelche Ideen?

    – Ikky

    27. Juni 11 um 10:47 Uhr

  • Entweder der URI oder der MIME-Typ (oder beides) kann nicht abgeglichen werden, leider weiß ich nicht, wie die Reader-Anwendung abgleicht. Möglicherweise müssen Sie es mit und ohne Angabe des MIME-Typs versuchen und versuchen, etwas von der SD-Karte zu öffnen, da es möglicherweise überhaupt nicht von Ihren Rohressourcen geöffnet wird.

    – David Snabel-Caunt

    27. Juni 11 um 10:56 Uhr

Wie offne ich eine PDF Datei die entweder im Ordner „resraw
Snikola

Ihre PDF-Absicht scheint gut zu sein, aber Sie sollten dies versuchen, um den Uri der Datei im Rohordner zu erhalten:

Uri path = Uri.parse("android.resource://<you package>/raw/<you file.pdf>");

(Quelle)

Ich hatte verschiedene Probleme mit den Antworten, also habe ich etwas zusammengestellt, das funktioniert.

LAYOUT

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


    <ImageView
        android:id="@+id/image_pdf"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/btn_okay"
        android:layout_margin="5dp"/>

    <Button
        android:id="@+id/btn_okay"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="10dp"
        android:text="@string/ok"/>

</RelativeLayout>

CODE

/**
 * Render a page of a PDF into ImageView
 * @param targetView
 * @throws IOException
 */
private void openPDF(ImageView targetView) throws IOException {

    //open file in assets

    ParcelFileDescriptor fileDescriptor;

    String FILENAME = "your.pdf";

    // Create file object to read and write on
    File file = new File(getActivity().getCacheDir(), FILENAME);
    if (!file.exists()) {
        AssetManager assetManager = getActivity().getAssets();
        FileUtils.copyAsset(assetManager, FILENAME, file.getAbsolutePath());
    }

    fileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);

    PdfRenderer pdfRenderer = new PdfRenderer(fileDescriptor);

    //Display page 0
    PdfRenderer.Page rendererPage = pdfRenderer.openPage(0);
    int rendererPageWidth = rendererPage.getWidth();
    int rendererPageHeight = rendererPage.getHeight();
    Bitmap bitmap = Bitmap.createBitmap(
            rendererPageWidth,
            rendererPageHeight,
            Bitmap.Config.ARGB_8888);
    rendererPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

    targetView.setImageBitmap(bitmap);
    rendererPage.close();
    pdfRenderer.close();
}


public static boolean copyAsset(AssetManager assetManager, String fromAssetPath, String toPath) {
    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open(fromAssetPath);
        new File(toPath).createNewFile();
        out = new FileOutputStream(toPath);
        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
        return true;
    } catch(Exception e) {
        e.printStackTrace();
        return false;
    }
}

public static void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
        out.write(buffer, 0, read);
    }
}

1643248386 627 Wie offne ich eine PDF Datei die entweder im Ordner „resraw
ilaria dossena

meine apps müssen eine pdf-datei öffnen inhalt in den rohdaten einer externen app … im schreiben:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.OpenPdfButton);
    button.setOnClickListener(new View.OnClickListener() {
        InputStream is = getResources().openRawResource(R.raw.filepdf);

        @Override
        public void onClick(View v) {
           startpdf();
         }
           private void startpdf() {
            // TODO Auto-generated method stub

            File file = new File("R.id.filepdf");

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

                try {
                    startActivity(intent);
                } 
                catch (ActivityNotFoundException e) {

                }
            }
        }


    });
}
}

.

654120cookie-checkWie öffne ich eine PDF-Datei, die entweder im Ordner „res/raw“ oder „assets“ gespeichert ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy