Как сделать PDF в Android - PullRequest
       44

Как сделать PDF в Android

77 голосов
/ 21 мая 2010

В моем приложении я получу поток байтов и преобразую его в файл PDF в памяти телефона. Как я могу сделать это в PDF? И показать это на деятельности?

Ответы [ 6 ]

114 голосов
/ 22 мая 2010

Некоторые телефоны (например, Nexus One) поставляются с предустановленной версией Quickoffice , так что это может быть так же просто, как отправка соответствующего намерения после сохранения файла на SD-карту.

public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File("/sdcard/example.pdf");

                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) {
                        Toast.makeText(OpenPdf.this, 
                            "No Application Available to View PDF", 
                            Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}
16 голосов
/ 02 июня 2012

Открыть pdf-файл в веб-просмотре .

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);
  }
}
7 голосов
/ 08 ноября 2014

Android-Lollipop (API 21) представляет новый API: PdfRenderer

Этот API-интерфейс позволяет создавать растровые изображения на странице в документе PDF.

Вскоре:

  • получите доступный дескриптор файла из вашего pdf документа:

    ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
    
  • создать PdfRenderer

    PdfRenderer renderer = new PdfRenderer(fd);
    
  • подготовить растровое изображение

    Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
    
  • получить PdfRenderer.Page для рендеринга

    PdfRenderer.Page page = renderer.openPage(pageIndex);
    
  • визуализация страницы на подготовленном растровом изображении

    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    
  • теперь вы можете делать то, что вы хотите с растровым изображением.

  • обратите внимание, что 2 пустых аргумента могут позволить вам вырезать некоторую часть страницы и выполнить преобразование (используя Matrix ) клипа
  • существует другой режим рендеринга: RENDER_MODE_FOR_PRINT . Если вам нужен этот режим, есть некоторые рекомендации по его правильному использованию: вот подробности .

Вот полный пример того, как использовать этот новый API

5 голосов
/ 14 ноября 2014

Эта библиотека проста и хорошо работает: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer

Старый ответ ...

Я думаю, что Джоан Сапата предложит нам лучшее и простое решение:

https://github.com/JoanZapata/android-pdfview

Уверяю вас, что это работает!

1 : https://github.com/JoanZapata/android-pdfview

3 голосов
/ 26 мая 2014

Для локальных файлов pdf вы можете отображать их через сторонние библиотеки. например, используйте библиотеку MuPDF , поддерживаемые типы файлов включают PDF, PNG и JPEG.

Одним из недостатков MuPDF является то, что он использует встроенную библиотеку для достижения цели, поэтому портировать приложение на платформу BlackBerry будет непросто.

0 голосов
/ 21 ноября 2014

Чтобы открыть PDF-файл из байтового массива, вы можете использовать RadaeePDF, вы можете выполнить следующие действия в своей деятельности:

private PDFReader m_vPDF = null;
private Document doc = new Document();

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Global.Init(this);

    m_vPDF = new PDFReader(this);
    doc.Close();

    int ret = m_doc.OpenMem(data, password);
        switch( ret )
        {
            case -1://need input password
                finish();
                break;
            case -2://unknown encryption
                finish();
                break;
            case -3://damaged or invalid format
                finish();
                break;
            case -10://access denied or invalid file path
                finish();
                break;
            case 0://succeeded, and continue
                break;
            default://unknown error
                finish();
                break;
        }

    m_vPDF.open(doc);

    setContentView( m_vPDF );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...