অ্যান্ড্রয়েডে পিডিএফ ফাইল কীভাবে রেন্ডার করবেন


213

অ্যান্ড্রয়েডের তার লাইব্রেরিতে পিডিএফ সমর্থন নেই। অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে পিডিএফ ফাইলগুলি রেন্ডার করার কোনও উপায় আছে কি?


5
এটি পিডিএফ ফাইল দেখানোর জন্য ভাল উদাহরণ। এটি ব্যবহারের জন্য নীচের লিঙ্কে Readme.txt ফাইলটি উল্লেখ করতে হবে। github.com/jblough/Android-Pdf- ভিউয়ার- লাইব্রেরি
রমেশ আকুল

1
এখানে সেই লাইব্রেরিটি ব্যবহার করার উদাহরণ রয়েছে: stackoverflow.com/a/16294833/2027232
নিকোলাস টাইলার

আপনি তাকান করতে hva stackoverflow.com/questions/22498937/...
Samet ÖZTOPRAK

উত্তর:


68

যেহেতু API স্তর 21 (ললিপপ) অ্যান্ড্রয়েড একটি পিডিএফেন্ডেন্ডার ক্লাস সরবরাহ করে :

// create a new renderer
 PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());

 // let us just render all pages
 final int pageCount = renderer.getPageCount();
 for (int i = 0; i < pageCount; i++) {
     Page page = renderer.openPage(i);

     // say we render for showing on the screen
     page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);

     // do stuff with the bitmap

     // close the page
     page.close();
 }

 // close the renderer
 renderer.close();

আরও তথ্যের জন্য স্যাম্পল অ্যাপটি দেখুন

পুরানো এপিআইগুলির জন্য আমি অ্যান্ড্রয়েড পিডিএফভিউয়ের লাইব্রেরির প্রস্তাব দিই , এটি খুব দ্রুত এবং সহজেই ব্যবহারযোগ্য, অ্যাপাচি লাইসেন্স ২.০ এর আওতায় লাইসেন্সযুক্ত:

pdfView.fromAsset(String)
  .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
  .enableSwipe(true)
  .swipeHorizontal(false)
  .enableDoubletap(true)
  .defaultPage(0)
  .onDraw(onDrawListener)
  .onLoad(onLoadCompleteListener)
  .onPageChange(onPageChangeListener)
  .onPageScroll(onPageScrollListener)
  .onError(onErrorListener)
  .enableAnnotationRendering(false)
  .password(null)
  .scrollHandle(null)
  .load();

12
পিডিএফভিউ লাইব্রেরি দুর্দান্ত, তবে মনে রাখবেন যে এটি জিএনইউ জেনারেল পাবলিকের অধীনে, কম জিপিএল নয়। এই হতে পারে এটা কঠিন বাণিজ্যিক সফ্টওয়্যার অন্তর্ভুক্ত করতে ভুলবেন না।
স্যাম

হ্যাঁ, @ স্যাম ঠিক বলেছেন। পুরানো অ্যান্ড্রয়েড সংস্করণগুলিতে লাইসেন্স সংক্রান্ত সমস্যার কারণে ব্যক্তিগতভাবে আমাকে পিডিএফ.জেগুলি ব্যবহার করতে হয়েছিল তবে রেন্ডারিং অত্যন্ত ধীর এবং জাভা-জাভাস্ক্রিপ্ট যোগাযোগের কারণে এটি কার্যকর করা কঠিন।
মিলো আর্নিলোভস্ক

1
পুরানো সংস্করণগুলির জন্য, অ্যাপটিতে কোথাও ফাইলটি ডাউনলোড এবং সঞ্চয় না করে সেগুলি দেখানোর কোনও উপায় আছে কি?
গোখন আরিক

1
আপনি ব্যবহার করে আরও বিস্তারিত উদাহরণ তৈরি করতে পারেন PDFView Library? আমাদের কী রাখা উচিত pdfName? ফাংশনগুলি onDraw, onLoadএবং onPageChangeশ্রোতাগুলি দেখতে কেমন? আপনার সহায়তার জন্য ধন্যবাদ :)
ট্রায়াট দোয়ান

2
উত্তরে অ্যাপাচি লাইসেন্স 2.0 এর আওতায় লাইসেন্সযুক্ত একটি নতুন পিডিএফ লাইব্রেরি যুক্ত করা হয়েছে।
মিলো আর্নিলোভস্কে

61

আমার ব্লগ থেকে নেওয়া:

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}

69
এটি আসলে খুব পরিষ্কার নয়। একটির জন্য, যদি গুগল কখনও তাদের গুগল ডক্স ইউআরএল পরিবর্তন করার সিদ্ধান্ত নেয়, আপনার অ্যাপ্লিকেশনটি ভেঙে যাবে এবং ব্যবহারকারীদের আবার দস্তাবেজগুলি দেখতে সক্ষম হতে আপনাকে একটি আপডেট চাপতে হবে।
চিহ্নিত করুন

3
এটি কেবল আমাকে প্রথম পৃষ্ঠাটি দেখার অনুমতি দিচ্ছে এবং নীচে "ডাউনলোড" লিঙ্কটি সক্রিয় নয় ... কোনও ধারণা? এছাড়াও, দেখে মনে হচ্ছে সেট প্লাগইনসনবল এখন আর ওয়েবভিউ ক্লাসের অংশ নয়।
হিজোজ

7
ইন্টারনেট সংযোগ না থাকলে এটি কাজ করবে না এবং এর জন্য ইন্টারনেটের অনুমতি প্রয়োজন
মণি

4
এটি কাজ করত। তবে সম্প্রতি, এটি দেখায় "ওফস! এই দস্তাবেজটির পূর্বরূপ দেখার ক্ষেত্রে একটি সমস্যা ছিল" আমি অনুমান করি যে গুগল তাদের পাশে কিছু জিনিস পরিবর্তিত করেছে যার ফলে এই সমস্যা দেখা দিয়েছে।
লি ইয়ি হং

1
আমার জন্য এটি দস্তাবেজের মাধ্যমে ধীরে ধীরে লোডিং এবং স্ক্রোলিং ছিল।
নীলসি

33

আমি এই এবং অন্যান্য অনুরূপ পোস্টগুলিতে প্রদত্ত কয়েকটি উত্তর থেকে একটি সংকর পদ্ধতি গ্রহণ করেছি:

এই সমাধানটি পিডিএফ রিডার অ্যাপ্লিকেশন ইনস্টল করা আছে এবং নিম্নলিখিতগুলি এটি করে কিনা তা যাচাই করে: - কোনও পাঠক ইনস্টল করা থাকলে ডিভাইসে পিডিএফ ফাইলটি ডাউনলোড করুন এবং একটি পিডিএফ রিডার অ্যাপ্লিকেশন শুরু করুন - কোনও পাঠক ইনস্টল না থাকলে ব্যবহারকারীকে জিজ্ঞাসা করুন যদি সে দেখতে চায় গুগল ড্রাইভের মাধ্যমে অনলাইনে পিডিএফ ফাইল

বিঃদ্রঃ! এই সমাধানটিতে অ্যান্ড্রয়েড DownloadManagerশ্রেণি ব্যবহার করা হয় , যা এপিআই 9 (অ্যান্ড্রয়েড 2.3 বা জিনজারব্রেড) এ চালু হয়েছিল। এর অর্থ এটি অ্যান্ড্রয়েড ২.২ বা তার আগের কাজ করে না।

আমি এটি সম্পর্কে এখানে একটি ব্লগ পোস্ট লিখেছি , তবে আমি সম্পূর্ণতার জন্য নীচের পুরো কোডটি সরবরাহ করেছি:

public class PDFTools {
    private static final String GOOGLE_DRIVE_PDF_READER_PREFIX = "http://drive.google.com/viewer?url=";
    private static final String PDF_MIME_TYPE = "application/pdf";
    private static final String HTML_MIME_TYPE = "text/html";

    /**
     * If a PDF reader is installed, download the PDF file and open it in a reader. 
     * Otherwise ask the user if he/she wants to view it in the Google Drive online PDF reader.<br />
     * <br />
     * <b>BEWARE:</b> This method
     * @param context
     * @param pdfUrl
     * @return
     */
    public static void showPDFUrl( final Context context, final String pdfUrl ) {
        if ( isPDFSupported( context ) ) {
            downloadAndOpenPDF(context, pdfUrl);
        } else {
            askToOpenPDFThroughGoogleDrive( context, pdfUrl );
        }
    }

    /**
     * Downloads a PDF with the Android DownloadManager and opens it with an installed PDF reader app.
     * @param context
     * @param pdfUrl
     */
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public static void downloadAndOpenPDF(final Context context, final String pdfUrl) {
        // Get filename
        final String filename = pdfUrl.substring( pdfUrl.lastIndexOf( "/" ) + 1 );
        // The place where the downloaded PDF file will be put
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), filename );
        if ( tempFile.exists() ) {
            // If we have downloaded the file before, just go ahead and show it.
            openPDF( context, Uri.fromFile( tempFile ) );
            return;
        }

        // Show progress dialog while downloading
        final ProgressDialog progress = ProgressDialog.show( context, context.getString( R.string.pdf_show_local_progress_title ), context.getString( R.string.pdf_show_local_progress_content ), true );

        // Create the download request
        DownloadManager.Request r = new DownloadManager.Request( Uri.parse( pdfUrl ) );
        r.setDestinationInExternalFilesDir( context, Environment.DIRECTORY_DOWNLOADS, filename );
        final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE );
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if ( !progress.isShowing() ) {
                    return;
                }
                context.unregisterReceiver( this );

                progress.dismiss();
                long downloadId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1 );
                Cursor c = dm.query( new DownloadManager.Query().setFilterById( downloadId ) );

                if ( c.moveToFirst() ) {
                    int status = c.getInt( c.getColumnIndex( DownloadManager.COLUMN_STATUS ) );
                    if ( status == DownloadManager.STATUS_SUCCESSFUL ) {
                        openPDF( context, Uri.fromFile( tempFile ) );
                    }
                }
                c.close();
            }
        };
        context.registerReceiver( onComplete, new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE ) );

        // Enqueue the request
        dm.enqueue( r );
    }

    /**
     * Show a dialog asking the user if he wants to open the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void askToOpenPDFThroughGoogleDrive( final Context context, final String pdfUrl ) {
        new AlertDialog.Builder( context )
            .setTitle( R.string.pdf_show_online_dialog_title )
            .setMessage( R.string.pdf_show_online_dialog_question )
            .setNegativeButton( R.string.pdf_show_online_dialog_button_no, null )
            .setPositiveButton( R.string.pdf_show_online_dialog_button_yes, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    openPDFThroughGoogleDrive(context, pdfUrl); 
                }
            })
            .show();
    }

    /**
     * Launches a browser to view the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void openPDFThroughGoogleDrive(final Context context, final String pdfUrl) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType(Uri.parse(GOOGLE_DRIVE_PDF_READER_PREFIX + pdfUrl ), HTML_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Open a local PDF file with an installed reader
     * @param context
     * @param localUri
     */
    public static final void openPDF(Context context, Uri localUri ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType( localUri, PDF_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Checks if any apps are installed that supports reading of PDF files.
     * @param context
     * @return
     */
    public static boolean isPDFSupported( Context context ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), "test.pdf" );
        i.setDataAndType( Uri.fromFile( tempFile ), PDF_MIME_TYPE );
        return context.getPackageManager().queryIntentActivities( i, PackageManager.MATCH_DEFAULT_ONLY ).size() > 0;
    }

}

8

সোর্স কোডটি এখানে ডাউনলোড করুন ( আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির ভিতরে পিডিএফ ফাইলটি প্রদর্শন করুন )

আপনার গ্রেডে এই নির্ভরতা যুক্ত করুন: '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

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

}

ইঙ্গিত: assetFileNameপিডিএফ ফাইলটি assetsফোল্ডারে উপস্থিত থাকতে হবে
আহমাদেবিলাব্বী

7

আমি অবশেষে অ্যান্ড্রয়েড ফাইল সিস্টেমে কোনও পিডিএফ ফাইল ব্যবহার করে বুটেলো কোডটি সংশোধন করতে সক্ষম হয়েছিpdf.js । কোডটি আমার গিটহাবে পাওয়া যাবে

আমি যা করেছি তা pdffile.jsএইচটিএমএল যুক্তিটি পড়ার জন্য সংশোধিত হয়েছিল file:

var url = getURLParameter('file');

function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null}

সুতরাং আপনার যা করা দরকার তা হ'ল ফাইল পাথটি এর পরে যুক্ত করুন index.html:

Uri path = Uri.parse(Environment.getExternalStorageDirectory().toString() + "/data/test.pdf");
webView.loadUrl("file:///android_asset/pdfviewer/index.html?file=" + path);

pathঅ্যাড্রয়েড ফাইল সিস্টেমে একটি বৈধ পিডিএফ নির্দেশ করতে ভেরিয়েবল আপডেট করুন ।


হাই পল, আমিও এই উদাহরণটি ব্যবহার করেছি, তবে এটি এপিআই লেভেল 16 এ ওয়েবভিউতে ফাঁকা স্ক্রিন দেখাচ্ছে, আপনি কি এই সমস্যা সম্পর্কে কিছু জানতে পারেন ??
hদ্ধিশ.চৌধারি

পিডিএফ ফাইলটি কোথায় জমা আছে? আপনি সম্পদ ফোল্ডার থেকে একটি পিডিএফ লোড করতে পারবেন না। আপনি এসডি কার্ড বা আপনার অ্যাপ্লিকেশনটির সুরক্ষিত অভ্যন্তরীণ সঞ্চয়স্থান থেকে লোড করতে পারেন। ওয়েবভিউ সম্পর্কিত কোনও ত্রুটির জন্য আপনার লগক্যাটটিও পরীক্ষা করুন।
শান্তনু পল

উরি পাথ = ইউরি.পারস (পরিবেশ। webView.loadUrl ( "ফাইল: ///android_asset/pdfviewer/index.html ফাইল =?" + + পথ);
hদ্ধিশ.চৌধারি

@ পল আমি উপরের কোডটি ব্যবহার করছি এটি এপিআই 19 এর সাথে দুর্দান্ত কাজ করছে তবে নীচে এটি কাজ করছে না। কেন ??
iddদ্ধিশ.চৌধারি

অ্যান্ড্রয়েডের পুরানো সংস্করণগুলির সাথে সামঞ্জস্যের জন্য দয়া করে এটি দেখুন: github.com/pauldmps/Android-pdf.js/issues/1 github.com/pauldmps/Android-pdf.js/issues/2
শান্তনু পল

4

আপনি আমদানি করে একটি সহজ পদ্ধতি ব্যবহার করতে পারেন

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

এবং এক্সএমএল কোডটি

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

এবং কেবল সম্পদ ফোল্ডারে কোনও ফাইল ঘোষণা করুন এবং যুক্ত করুন এবং কেবল নামটি দিন

   PDFView  pdfView=findViewById(R.id.pdfv);       
    pdfView.fromAsset("agl.pdf").load();

আপনি কীভাবে কোটলিনে পিডিএফভিউ ঘোষণা করবেন?
নিকোলাস কৃষক

এই লিঙ্কে চেক @NicholasFarmer stackoverflow.com/questions/56613766/...
অক্ষয় শিল্পার

5
শুধু সাবধান হন, এটি আপনার অ্যাপ্লিকেশনটির উপরে 16 ~ 18MB যুক্ত করতে পারে। এই গ্রন্থাগারটি PdfiumAndroidযা ইতিমধ্যে 18.4MB
পিয়ের

ইঙ্গিত: agl.pdfফাইলটি assetsফোল্ডারের মধ্যে থাকা উচিত
আহমাদেবিলাব্বী

1

এতে সামান্য আলো যোগ করার জন্য, আমাকে মজিলা থেকে পিডিএফ.জেস সমাধান সহ যেতে হবে। ইতিমধ্যে এটির একটি ভাল লিখিত বাস্তবায়নের লিঙ্কটি এখানে রয়েছে: https://bitbucket.org/butelo/pdfviewer/

আমার এন্ড্রয়েড ক্রিয়াকলাপে আমি যে সম্পাদনাগুলি যুক্ত করেছি তা এখানে রয়েছে:

private String getInternalPDFURL(String interalPDFName){
    return "file:///android_asset/pdfviewer/index.html?pdf=" + interalPDFName + ".pdf";
}

আমি সম্পাদিত সম্পাদনাগুলি এখানে pdffile.js:

var url = '../' + getPDFURL();

function getPDFURL(){
    var query = window.location.search.substring(1);
    var vars = query.split("=");
    var pdfPage = vars[1];
    return pdfPage;
}

1

আমি Wi-Fi ব্যবহার করে পিডিএফটি খুলতে এবং মুদ্রণের জন্য নীচের কোডটি ব্যবহার করেছি। আমি আমার পুরো কোডটি প্রেরণ করছি, এবং আমি আশা করি এটি সহায়ক।

public class MainActivity extends Activity {

    int Result_code = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = (Button)findViewById(R.id.button1);

        mButton.setOnClickListener(new View.OnClickListener() {

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

                 PrintManager printManager = (PrintManager)getSystemService(Context.PRINT_SERVICE);
                String jobName =  " Document";
                printManager.print(jobName, pda, null);
            }
        });
    }


    public void openDocument(String name) {

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        File file = new File(name);
        String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
        String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        if (extension.equalsIgnoreCase("") || mimetype == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            intent.setDataAndType(Uri.fromFile(file), "text/*");
        }
        else {
            intent.setDataAndType(Uri.fromFile(file), mimetype);
        }

        // custom message for the intent
        startActivityForResult((Intent.createChooser(intent, "Choose an Application:")), Result_code);
        //startActivityForResult(intent, Result_code);
        //Toast.makeText(getApplicationContext(),"There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }


    @SuppressLint("NewApi")
    PrintDocumentAdapter pda = new PrintDocumentAdapter(){

        @Override
        public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
            InputStream input = null;
            OutputStream output = null;

            try {
                String filename = Environment.getExternalStorageDirectory()    + "/" + "Holiday.pdf";
                File file = new File(filename);
                input = new FileInputStream(file);
                output = new FileOutputStream(destination.getFileDescriptor());

                byte[] buf = new byte[1024];
                int bytesRead;

                while ((bytesRead = input.read(buf)) > 0) {
                     output.write(buf, 0, bytesRead);
                }

                callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
            }
            catch (FileNotFoundException ee){
                //Catch exception
            }
            catch (Exception e) {
                //Catch exception
            }
            finally {
                try {
                    input.close();
                    output.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){

            if (cancellationSignal.isCanceled()) {
                callback.onLayoutCancelled();
                return;
            }

           // int pages = computePageCount(newAttributes);

            PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();

            callback.onLayoutFinished(pdi, true);
        }
    };
}

0

অ্যান্ড্রয়েড ওয়েবভিউতে পিডিএফ ডকুমেন্টের পূর্বরূপ দেওয়ার কোনও উপায় নেই f আপনি যদি বেস64 পিডিএফের পূর্বরূপ দেখতে চান। এটি তৃতীয় পক্ষের লাইব্রেরি করতে হবে।

build.Gradle

compile 'com.github.barteksc:android-pdf-viewer:2.7.0'

dialog_pdf_viewer

<?xml version="1.0" encoding="utf-8"?>

<!--
  ~ Copyright (c) 2017.
  ~ Samet Öztoprak
  ~ All rights reserved.
  -->

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

    <ImageView
        android:id="@+id/dialog_pdf_viewer_close"
        style="@style/ExitButtonImageViewStyle"
        android:src="@drawable/popup_exit" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:orientation="vertical">

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

    </LinearLayout>

    <View style="@style/HorizontalLine" />

    <com.pozitron.commons.customviews.ButtonFont
        android:id="@+id/dialog_pdf_viewer_button"
        style="@style/ButtonPrimary2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="@string/agreed" />

</LinearLayout>

DailogPDFViewer.java

public class DialogPdfViewer extends Dialog {
    PDFView pdfView;
    byte[] decodedString;

    public interface OnDialogPdfViewerListener {
        void onAgreeClick(DialogPdfViewer dialogFullEula);

        void onCloseClick(DialogPdfViewer dialogFullEula);
    }

    public DialogPdfViewer(Context context, String base64, final DialogPdfViewer.OnDialogPdfViewerListener onDialogPdfViewerListener) {
        super(context);

        setContentView(R.layout.dialog_pdf_viewer);
        findViewById(R.id.dialog_pdf_viewer_close).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
            }
        });

        findViewById(R.id.dialog_pdf_viewer_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onAgreeClick(DialogPdfViewer.this);
            }
        });

        decodedString = Base64.decode(base64.toString(), Base64.DEFAULT);

        pdfView = ((PDFView) findViewById(R.id.pdfView));
        pdfView.fromBytes(decodedString).load();

        setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                    onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
                }
                return true;
            }
        });

    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.