kandi background
Explore Kits

AndroidPdfViewer | Android view for displaying PDFs rendered with PdfiumAndroid | Document Editor library

 by   barteksc Java Version: Current License: Apache-2.0

 by   barteksc Java Version: Current License: Apache-2.0

Download this library from

kandi X-RAY | AndroidPdfViewer Summary

AndroidPdfViewer is a Java library typically used in Editor, Document Editor applications. AndroidPdfViewer has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has medium support. You can download it from GitHub.
Android view for displaying PDFs rendered with PdfiumAndroid
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • AndroidPdfViewer has a medium active ecosystem.
  • It has 6713 star(s) with 1451 fork(s). There are 207 watchers for this library.
  • It had no major release in the last 12 months.
  • There are 541 open issues and 422 have been closed. On average issues are closed in 20 days. There are 24 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of AndroidPdfViewer is current.
AndroidPdfViewer Support
Best in #Document Editor
Average in #Document Editor
AndroidPdfViewer Support
Best in #Document Editor
Average in #Document Editor

quality kandi Quality

  • AndroidPdfViewer has 0 bugs and 0 code smells.
AndroidPdfViewer Quality
Best in #Document Editor
Average in #Document Editor
AndroidPdfViewer Quality
Best in #Document Editor
Average in #Document Editor

securitySecurity

  • AndroidPdfViewer has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • AndroidPdfViewer code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
AndroidPdfViewer Security
Best in #Document Editor
Average in #Document Editor
AndroidPdfViewer Security
Best in #Document Editor
Average in #Document Editor

license License

  • AndroidPdfViewer is licensed under the Apache-2.0 License. This license is Permissive.
  • Permissive licenses have the least restrictions, and you can use them in most projects.
AndroidPdfViewer License
Best in #Document Editor
Average in #Document Editor
AndroidPdfViewer License
Best in #Document Editor
Average in #Document Editor

buildReuse

  • AndroidPdfViewer releases are not available. You will need to build from source code and install.
  • Build file is available. You can build the component from source.
  • Installation instructions, examples and code snippets are available.
  • AndroidPdfViewer saves you 1538 person hours of effort in developing the same functionality from scratch.
  • It has 3425 lines of code, 370 functions and 52 files.
  • It has medium code complexity. Code complexity directly impacts maintainability of the code.
AndroidPdfViewer Reuse
Best in #Document Editor
Average in #Document Editor
AndroidPdfViewer Reuse
Best in #Document Editor
Average in #Document Editor
Top functions reviewed by kandi - BETA

kandi has reviewed AndroidPdfViewer and discovered the below as its top functions. This is intended to give you an instant insight into AndroidPdfViewer implemented functionality, and help decide if they suit your requirements.

  • Gets the render range list .
  • Implementation of the onDraw method .
  • Setup the layout for the view
  • Called when a page is bound .
  • Executes the specified rendering task .
  • Calculates the optimal maximum width and height of the view .
  • Calculate the offset of the pages
  • Copies an input stream to a file .
  • Returns the file name of the file .
  • This method is called by the background thread

AndroidPdfViewer Key Features

Android view for displaying PDFs rendered with PdfiumAndroid

ProGuard

copy iconCopydownload iconDownload
-keep class com.shockwave.**

Include PDFView in your layout

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

Load a PDF file

copy iconCopydownload iconDownload
pdfView.fromUri(Uri)
or
pdfView.fromFile(File)
or
pdfView.fromBytes(byte[])
or
pdfView.fromStream(InputStream) // stream is written to bytearray - native code cannot use Java Streams
or
pdfView.fromSource(DocumentSource)
or
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();

Document sources

copy iconCopydownload iconDownload
pdfView.fromUri(Uri)
pdfView.fromFile(File)
pdfView.fromBytes(byte[])
pdfView.fromStream(InputStream)
pdfView.fromAsset(String)

Double tap zooming

copy iconCopydownload iconDownload
void setMinZoom(float zoom);
void setMidZoom(float zoom);
void setMaxZoom(float zoom);

How can I fit document to screen width (eg. on orientation change)?

copy iconCopydownload iconDownload
Configurator.onRender(new OnRenderListener() {
    @Override
    public void onInitiallyRendered(int pages, float pageWidth, float pageHeight) {
        pdfView.fitToWidth(pageIndex);
    }
});

How can I scroll through single pages like a ViewPager?

copy iconCopydownload iconDownload
    .swipeHorizontal(true)
    .pageSnap(true)
    .autoSpacing(true)
    .pageFling(true)

License

copy iconCopydownload iconDownload
Copyright 2017 Bartosz Schiller

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

How to open pdf files in webview in pdfactivity?

copy iconCopydownload iconDownload
   final String pdfurl = view.getHitTestResult().getExtra();
         Intent intent = new Intent(PdfActivity.this,PdfViewer.class);
         intent.putExtra("PDFURL",pdfurl);
         startActivity(intent);
package ak.wp.meto.activity;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;
import com.github.barteksc.pdfviewer.PDFView;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import ak.wp.meto.R;

public class PdfViewer extends Activity {
    private TextView txt; // You can remove if you don't want this
    private PDFView pdf;
    String value = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_pdf);
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            value = bundle.getString("PDFURL");
        }
        System.out.println("PRINT PDFVIEWER DATA" +value);
        pdf = (PDFView) findViewById(R.id.pdfView); //github.barteksc
        txt = findViewById(R.id.txtPdf);
        String pdfUrl = value;
        try{
            new RetrievePdfStream().execute(pdfUrl);
        }
        catch (Exception e){
            Toast.makeText(this, "Failed to load Url :" + e.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    class RetrievePdfStream extends AsyncTask<String, Void, InputStream> {
        @Override
        protected InputStream doInBackground(String... strings) {
            InputStream inputStream = null;
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                if (urlConnection.getResponseCode() == 200) {
                    inputStream = new BufferedInputStream(urlConnection.getInputStream());
                }
            } catch (IOException e) {
                return null;
            }
            return inputStream;
        }
        @Override
        protected void onPostExecute(InputStream inputStream) {
            pdf.fromStream(inputStream).load();
        }
    }

}
-----------------------
   final String pdfurl = view.getHitTestResult().getExtra();
         Intent intent = new Intent(PdfActivity.this,PdfViewer.class);
         intent.putExtra("PDFURL",pdfurl);
         startActivity(intent);
package ak.wp.meto.activity;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;
import com.github.barteksc.pdfviewer.PDFView;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import ak.wp.meto.R;

public class PdfViewer extends Activity {
    private TextView txt; // You can remove if you don't want this
    private PDFView pdf;
    String value = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_pdf);
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            value = bundle.getString("PDFURL");
        }
        System.out.println("PRINT PDFVIEWER DATA" +value);
        pdf = (PDFView) findViewById(R.id.pdfView); //github.barteksc
        txt = findViewById(R.id.txtPdf);
        String pdfUrl = value;
        try{
            new RetrievePdfStream().execute(pdfUrl);
        }
        catch (Exception e){
            Toast.makeText(this, "Failed to load Url :" + e.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    class RetrievePdfStream extends AsyncTask<String, Void, InputStream> {
        @Override
        protected InputStream doInBackground(String... strings) {
            InputStream inputStream = null;
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                if (urlConnection.getResponseCode() == 200) {
                    inputStream = new BufferedInputStream(urlConnection.getInputStream());
                }
            } catch (IOException e) {
                return null;
            }
            return inputStream;
        }
        @Override
        protected void onPostExecute(InputStream inputStream) {
            pdf.fromStream(inputStream).load();
        }
    }

}

Background color of barteksc/AndroidPdfViewer

copy iconCopydownload iconDownload
factory = { context ->
    PDFView(
        context,
        null
    ).also {
        it.setBackgroundColor(Color.Transparent.toArgb())
    }
},
AndroidView(
    factory = { context ->
        PDFView(
            context,
            null
        ).also {
            it.setBackgroundColor(Color.Transparent.toArgb())
        }
    },
    update = { pdfView ->
        pdfView
            .fromStream(pdfView.context.resources.openRawResource(R.raw.sample))
            .autoSpacing(false)
            .spacing(25)
            .pageFitPolicy(FitPolicy.BOTH)
            .load()
    },
    modifier = Modifier
        .fillMaxSize()
        .background(Color.Red)
)
-----------------------
factory = { context ->
    PDFView(
        context,
        null
    ).also {
        it.setBackgroundColor(Color.Transparent.toArgb())
    }
},
AndroidView(
    factory = { context ->
        PDFView(
            context,
            null
        ).also {
            it.setBackgroundColor(Color.Transparent.toArgb())
        }
    },
    update = { pdfView ->
        pdfView
            .fromStream(pdfView.context.resources.openRawResource(R.raw.sample))
            .autoSpacing(false)
            .spacing(25)
            .pageFitPolicy(FitPolicy.BOTH)
            .load()
    },
    modifier = Modifier
        .fillMaxSize()
        .background(Color.Red)
)

Adding Text/Annotations into existing PDF file and View/Rendering the output in android

copy iconCopydownload iconDownload
PdfReader reader = new PdfReader("original.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("original-stamped.pdf"));

PdfContentByte cb = stamper.getOverContent(1);
cb.beginText();
cb.setTextMatrix(100, 400);
cb.showText("Text at position 100,400.");
cb.endText();

stamper.close();
reader.close();

How to convert a string containing numbers separated by comma to Integer in java?

copy iconCopydownload iconDownload
int[] pages = {1, 5, 10, 12, 15};
i.putExtra("pages", pages);
int[] pages = intent.getIntArrayExtra("pages");
pdfView.fromAsset(result)
       .pages(pages)
-----------------------
int[] pages = {1, 5, 10, 12, 15};
i.putExtra("pages", pages);
int[] pages = intent.getIntArrayExtra("pages");
pdfView.fromAsset(result)
       .pages(pages)

kotlin androidpdfviewer lib doesn't seem to load

copy iconCopydownload iconDownload
<androidx.constraintlayout.widget.ConstraintLayout
//....
<com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="@dimen/zeroDp"
            android:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/tvFeedback"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />
//...
</androidx.constraintlayout.widget.ConstraintLayout>
private fun downloadFile(responseBody: ResponseBody) {// get responseBody after making Http req . I'm using retrofit 
        binding?.let {
            //it.pdfView.removeAllViews()
            it.pdfView.fromBytes(responseBody.bytes())
                    .defaultPage(pageNumber)
                    .onPageChange(this@PdfReaderFragment)
                    .enableAnnotationRendering(true)
                    .onLoad(this@PdfReaderFragment)
                    .spacing(10) // in dp
                    .onPageError(this@PdfReaderFragment)
                    .onError { onError("File not in PDF format or corrupted") }
                    .load()
        }


    }
OnPageChangeListener
OnLoadCompleteListener
OnPageErrorListener
override fun loadComplete(nbPages: Int) {
        binding?.let {
            printBookmarksTree(it.pdfView.tableOfContents, "-")
        }

    }

override fun onPageError(page: Int, t: Throwable?) {
        Log.d("PDF", t?.message)
    }
override fun onPageChanged(page: Int, pageCount: Int) {
        pageNumber = page
        Log.d("PDF", "Page number $pageNumber $pageCount")
        setTitleMessageBackArrow(String.format("%s %s / %s", "your fragment title", page + 1, pageCount))
    }

    private fun printBookmarksTree(tree: List<Bookmark>, sep: String) {
        for (b in tree) {
            Log.e("PDF", String.format("%s %s, p %d", sep, b.title, b.pageIdx))
            if (b.hasChildren()) {
                printBookmarksTree(b.children, "$sep-")
            }
        }
    }
-----------------------
<androidx.constraintlayout.widget.ConstraintLayout
//....
<com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="@dimen/zeroDp"
            android:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/tvFeedback"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />
//...
</androidx.constraintlayout.widget.ConstraintLayout>
private fun downloadFile(responseBody: ResponseBody) {// get responseBody after making Http req . I'm using retrofit 
        binding?.let {
            //it.pdfView.removeAllViews()
            it.pdfView.fromBytes(responseBody.bytes())
                    .defaultPage(pageNumber)
                    .onPageChange(this@PdfReaderFragment)
                    .enableAnnotationRendering(true)
                    .onLoad(this@PdfReaderFragment)
                    .spacing(10) // in dp
                    .onPageError(this@PdfReaderFragment)
                    .onError { onError("File not in PDF format or corrupted") }
                    .load()
        }


    }
OnPageChangeListener
OnLoadCompleteListener
OnPageErrorListener
override fun loadComplete(nbPages: Int) {
        binding?.let {
            printBookmarksTree(it.pdfView.tableOfContents, "-")
        }

    }

override fun onPageError(page: Int, t: Throwable?) {
        Log.d("PDF", t?.message)
    }
override fun onPageChanged(page: Int, pageCount: Int) {
        pageNumber = page
        Log.d("PDF", "Page number $pageNumber $pageCount")
        setTitleMessageBackArrow(String.format("%s %s / %s", "your fragment title", page + 1, pageCount))
    }

    private fun printBookmarksTree(tree: List<Bookmark>, sep: String) {
        for (b in tree) {
            Log.e("PDF", String.format("%s %s, p %d", sep, b.title, b.pageIdx))
            if (b.hasChildren()) {
                printBookmarksTree(b.children, "$sep-")
            }
        }
    }
-----------------------
<androidx.constraintlayout.widget.ConstraintLayout
//....
<com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="@dimen/zeroDp"
            android:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/tvFeedback"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />
//...
</androidx.constraintlayout.widget.ConstraintLayout>
private fun downloadFile(responseBody: ResponseBody) {// get responseBody after making Http req . I'm using retrofit 
        binding?.let {
            //it.pdfView.removeAllViews()
            it.pdfView.fromBytes(responseBody.bytes())
                    .defaultPage(pageNumber)
                    .onPageChange(this@PdfReaderFragment)
                    .enableAnnotationRendering(true)
                    .onLoad(this@PdfReaderFragment)
                    .spacing(10) // in dp
                    .onPageError(this@PdfReaderFragment)
                    .onError { onError("File not in PDF format or corrupted") }
                    .load()
        }


    }
OnPageChangeListener
OnLoadCompleteListener
OnPageErrorListener
override fun loadComplete(nbPages: Int) {
        binding?.let {
            printBookmarksTree(it.pdfView.tableOfContents, "-")
        }

    }

override fun onPageError(page: Int, t: Throwable?) {
        Log.d("PDF", t?.message)
    }
override fun onPageChanged(page: Int, pageCount: Int) {
        pageNumber = page
        Log.d("PDF", "Page number $pageNumber $pageCount")
        setTitleMessageBackArrow(String.format("%s %s / %s", "your fragment title", page + 1, pageCount))
    }

    private fun printBookmarksTree(tree: List<Bookmark>, sep: String) {
        for (b in tree) {
            Log.e("PDF", String.format("%s %s, p %d", sep, b.title, b.pageIdx))
            if (b.hasChildren()) {
                printBookmarksTree(b.children, "$sep-")
            }
        }
    }
-----------------------
<androidx.constraintlayout.widget.ConstraintLayout
//....
<com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="@dimen/zeroDp"
            android:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/tvFeedback"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />
//...
</androidx.constraintlayout.widget.ConstraintLayout>
private fun downloadFile(responseBody: ResponseBody) {// get responseBody after making Http req . I'm using retrofit 
        binding?.let {
            //it.pdfView.removeAllViews()
            it.pdfView.fromBytes(responseBody.bytes())
                    .defaultPage(pageNumber)
                    .onPageChange(this@PdfReaderFragment)
                    .enableAnnotationRendering(true)
                    .onLoad(this@PdfReaderFragment)
                    .spacing(10) // in dp
                    .onPageError(this@PdfReaderFragment)
                    .onError { onError("File not in PDF format or corrupted") }
                    .load()
        }


    }
OnPageChangeListener
OnLoadCompleteListener
OnPageErrorListener
override fun loadComplete(nbPages: Int) {
        binding?.let {
            printBookmarksTree(it.pdfView.tableOfContents, "-")
        }

    }

override fun onPageError(page: Int, t: Throwable?) {
        Log.d("PDF", t?.message)
    }
override fun onPageChanged(page: Int, pageCount: Int) {
        pageNumber = page
        Log.d("PDF", "Page number $pageNumber $pageCount")
        setTitleMessageBackArrow(String.format("%s %s / %s", "your fragment title", page + 1, pageCount))
    }

    private fun printBookmarksTree(tree: List<Bookmark>, sep: String) {
        for (b in tree) {
            Log.e("PDF", String.format("%s %s, p %d", sep, b.title, b.pageIdx))
            if (b.hasChildren()) {
                printBookmarksTree(b.children, "$sep-")
            }
        }
    }

Community Discussions

Trending Discussions on AndroidPdfViewer
  • How to open pdf files in webview in pdfactivity?
  • Background color of barteksc/AndroidPdfViewer
  • Adding Text/Annotations into existing PDF file and View/Rendering the output in android
  • How to convert a string containing numbers separated by comma to Integer in java?
  • kotlin androidpdfviewer lib doesn't seem to load
Trending Discussions on AndroidPdfViewer

QUESTION

How to open pdf files in webview in pdfactivity?

Asked 2022-Feb-26 at 00:46

Hello I'm developing app to open pdf files in webview in pdfactivity. I tried opening through intent its redirecting to system inbuilt apps but not pdfactivity.java. find the code below, I declared this in my webview activity,

 private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Uri uri = WebvActivity.this.getIntent().getData();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(uri, "application/pdf");
                intent.putExtra(PdfActivity.EXTRA_PDFFILENAME, "url");
                startActivity(intent);
            return super.shouldOverrideUrlLoading(view, url);
        }

I'm using PdfViewer.jar library, In README text it is mentioned use

Intent intent = new Intent(this, WebviewActivity.class);
     intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, "PATH TO PDF GOES HERE");
     startActivity(intent);

How can I get URL of pdf files from the webpage in webview & load them in PdfActivity. See below link for your reference, https://sourceforge.net/p/andpdf/code/HEAD/tree/tag/Beta_0_1_11/AndroidPdfViewer/activitysrc/net/sf/andpdf/

ANSWER

Answered 2022-Jan-18 at 02:33

Maybe this link could be very helpful for you How to display a PDF via Android web browser without "downloading" first

You can open a pdf using Google Docs Viewer.

Source https://stackoverflow.com/questions/70749149

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install AndroidPdfViewer

or if you want to use more stable version:. Library is available in jcenter repository, probably it'll be in Maven Central soon.

Support

Version 3.0.0 introduced support for links in PDF documents. By default, DefaultLinkHandler is used and clicking on link that references page in same document causes jump to destination page and clicking on link that targets some URI causes opening it in default application. You can also create custom link handlers, just implement LinkHandler interface and set it using Configurator#linkHandler(LinkHandler) method. Take a look at DefaultLinkHandler source to implement custom behavior.

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Explore Related Topics

Share this Page

share link
Consider Popular Document Editor Libraries
Compare Document Editor Libraries with Highest Support
Compare Document Editor Libraries with Permissive License
Compare Document Editor Libraries with Highest Reuse
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.