Как читать pdf в моем приложении для Android?

Я делаю приложение, которое требует открытия PDF.

У меня также есть PDF-файл в папке активов, поэтому я не могу открыть его напрямую в веб-просмотре.

По умолчанию андроид не поддерживает pdf.

Есть ли какой-нибудь API, работающий на андроиде (кроме MuPdf)??

На моем устройстве не установлена ​​программа для чтения PDF-файлов, поэтому ACTION VIEW мне не помогает.

Следующее не работает.......

Как отобразить файл PDF в Android

Открыть PDF-файл актива в приложении

Можете ли вы предложить мне какой-нибудь хороший API?


person MAC    schedule 24.04.2012    source источник
comment
Просто попробуйте это   -  person Praveenkumar    schedule 27.04.2012
comment
спасибо, я уже пробовал это... не работает для меня   -  person MAC    schedule 27.04.2012
comment
см. этот stackoverflow.com/a/2916712/985143 или stackoverflow.com/a/6249435/985143   -  person Zaz Gmy    schedule 27.04.2012
comment
Thnx @ZazGmy, но я хочу прочитать pdf из своего собственного приложения. потому что на моем устройстве не установлена ​​​​другая программа для чтения PDF   -  person MAC    schedule 27.04.2012
comment
А PDFBox? Это java-библиотека для взаимодействия с PDF. Не уверен, что вы можете использовать в Android.   -  person MACMAN    schedule 04.05.2012
comment
Почему бы не установить бесплатную программу для чтения PDF-файлов, запрограммировать приложение так, чтобы оно вызывалось через намерение, и выдавать сообщение об ошибке («пожалуйста, установите программу для чтения PDF-файлов») в случае сбоя?   -  person NoBugs    schedule 04.05.2012
comment
stackoverflow.com/questions/17085574 /   -  person Shailendra Madda    schedule 21.04.2015


Ответы (3)


Я просто сделал это с помощью PdfViewer.jar (загрузите его с синяя кнопка) и создайте код, как показано ниже.

First.java

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

    File images = Environment.getExternalStorageDirectory();
    imagelist = images.listFiles(new FilenameFilter()
    {  
            public boolean accept(File dir, String name)  
            {  
                    return ((name.endsWith(".pdf")));
            }  
    }); 
    pdflist = new String[imagelist.length]; 
    for(int i = 0;i<imagelist.length;i++)
    {
            pdflist[i] = imagelist[i].getName();
    }
    this.setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, pdflist));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) 
{
        super.onListItemClick(l, v, position, id);
        String path = imagelist[(int)id].getAbsolutePath();
        openPdfIntent(path);
}

private void openPdfIntent(String path) 
{
    try
    {
      final Intent intent = new Intent(First.this, Second.class);
      intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path);
      startActivity(intent);
    }
    catch (Exception e) 
    {
      e.printStackTrace();
    }
}

Второй.java

public class Second extends PdfViewerActivity 
{

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
}

public int getPreviousPageImageResource() {
    return R.drawable.left_arrow;
}

public int getNextPageImageResource() {
    return R.drawable.right_arrow;
}

public int getZoomInImageResource() {
    return R.drawable.zoom_in;
}

public int getZoomOutImageResource() {
    return R.drawable.zoom_out;
}

public int getPdfPasswordLayoutResource() {
    return R.layout.pdf_file_password;
}

public int getPdfPageNumberResource() {
    return R.layout.dialog_pagenumber;
}

public int getPdfPasswordEditField() {
    return R.id.etPassword;
}

public int getPdfPasswordOkButton() {
    return R.id.btOK;
}

public int getPdfPasswordExitButton() {
    return R.id.btExit;
}

public int getPdfPageNumberEditField() {
    return R.id.pagenum_edit;
}
}

Надеюсь, это поможет вам много. Попробуй это. Не забудьте добавить свой Second.java в свой манифест. Добавьте в second.java несколько рисунков, которые ему нужны, с вашими чертежами. И см. пример из GitHub.

person Praveenkumar    schedule 27.04.2012
comment
Спасибо @SpK, мой файл находится в папке ресурсов, и я хочу прочитать его из ресурсов --- file:///android_asset/test.pdf.... я пробовал это ...... openPdfIntent (file:/ //android_asset/test.pdf); ......logcat.... ST='файл' file:///android_asset/test.pdf' не найден' - person MAC; 27.04.2012
comment
+1, но он также очень медленный и отображает символы JUNK .... - person MAC; 27.04.2012
comment
@spk привет, сэр, я использую упомянутое вами решение, но получаю эту ошибку E/AndroidRuntime (23933): java.lang.NoClassDefFoundError: com.pdf.view.Second, не могли бы вы мне помочь? - person Nitin; 25.05.2012
comment
@Nitin Щелкните свой проект -> щелкните правой кнопкой мыши -> свойства -> путь сборки Java -> вкладка «Заказ и экспорт» -> здесь библиотека должна быть первой и должна быть проверена. - person Praveenkumar; 31.07.2012
comment
Привет, Правин. Я пробовал это, но не работает эффективно. Почти в 80% случаев файл не загружается. Можете ли вы предложить любую другую хорошую библиотеку? - person Chandra Sekhar; 04.12.2012
comment
Я пробовал это, но он просто продолжает загружаться или ничего не показывает. Любая идея, что не так...??? - person Khawar Raza; 27.12.2012
comment
@KhawarRaza, я думаю, проблема с местоположением вашего файла - person Cjames; 08.05.2013
comment
Если у вас проблема с уменьшением масштаба, обратитесь к этому сообщению .com/questions/11259131/ - person Cjames; 08.05.2013
comment
Я не могу заставить этот файл jar работать должным образом. Я импортировал и добавил его в путь. Но когда я пытаюсь создать первый и второй класс, eclipse не может найти ссылку на PdfViewerActivity? - person John Baum; 04.06.2013
comment
@JohnBaum Попробуйте со ссылкой на Github. И перезапустите затмение, а затем попробуйте! - person Praveenkumar; 06.06.2013
comment
Это работает, но проблема с изображениями в pdf и да, обработка медленная ... все еще 1 голос за - person Mohd Mufiz; 13.09.2013
comment
@MohdMufiz Видите, это просто образец. Вы должны реализовать это с вашими требованиями, а повышение скорости - вашими руками :) - person Praveenkumar; 13.09.2013
comment
@Praveen, когда я пробую этот образец, я получаю исключение java.nio.BufferUnderflowException, почему это так? Не могли бы вы мне помочь? - person poojagupta; 04.02.2014
comment
что такое imagelist и pdflist в этом коде? - person JayDeep Nimavat; 19.02.2014
comment
@Praveen Я ценю вашу работу, но до сих пор не получил существенного ответа, так как загрузка страницы Pdf требует времени. Еще одна вещь, которую я поместил в папку с ресурсами. Мне нужно просмотреть файл PDF из папки Asset. Любое решение? - person Abhishek Tamta; 09.09.2014
comment
Я тоже пробовал это, но он просто продолжает загружаться или ничего не показывать. - person Shailendra Madda; 21.04.2015
comment
После того, как я изменю путь к файлу, я смогу его прочитать, но как я могу получить текст из этого PDF-файла? - person Shailendra Madda; 21.04.2015
comment
Пожалуйста, помогите мне решить эту проблему: stackoverflow.com/questions/30045927/ - person SHIDHIN.T.S; 06.05.2015
comment
Привет @Praveen, я использовал ту же библиотеку, но у меня проблема, когда в моем pdf-файле есть отсканированные изображения. Он отображает битые пиксельные изображения. Есть ли решение по этому поводу? или есть какие-либо изменения, которые мне нужно сделать? Спасибо - person Kairi San; 12.04.2016
comment
Привет @KairiSan Это простая и базовая библиотека, которая просто показывает файлы PDF. Возможно, вам придется реализовать эту библиотеку в соответствии с вашими потребностями или вам придется использовать любую другую библиотеку. - person Praveenkumar; 12.04.2016
comment
спасибо @Praveen за ответ. Вместо этого я использовал другую библиотеку. - person Kairi San; 15.04.2016

Некоторые телефоны (например, 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(); 
                    } 
                } 
            } 
        }); 
    } 
} 
person Gautam Vasoya    schedule 23.08.2012
comment
это не выходит за рамки темы? - person MSaudi; 26.02.2014

Мне никогда не приходилось этого делать, но вы, вероятно, могли бы использовать библиотеку, например iText, для программного доступа к файлу PDF. , а затем отобразите PDF-файл.

person glen3b    schedule 27.04.2012
comment
iText поддерживает Android???? - person MAC; 30.04.2012
comment
Да, версию JAVA можно включить в проект Android. - person glen3b; 01.05.2012
comment
но это не бесплатно - person Fay007; 14.08.2019
comment
Не используйте iText, если вы не готовы платить более высокую цену за лицензию - person Tushar Mate; 27.03.2021