Visualizar y crear archivos студия андроида PDF

Estoy desarrollando una aplicaciòn que me permite crear y ver archivos .pdf en студия андроида. el problema es que al momento de ejecutar не я muestra el archivo creado. Ya он revisado варьируется недостатки las классы y Лос мето-DOS. Удар рапирой Tamnbièn le he лекция los permisos de escritura y en el manifest.xml. agradezco su ayuda ya que no он podido encontrar el error que me permite visualizar el contenido de mi PDF creado.

Журнал:

2019-12-18 11:04:28.508 19560-19560/com.example.pdfcreator E/PDFView: load pdf error
java.io.FileNotFoundException: No such file or directory
    at android.os.Parcel.openFileDescriptor(Native Method)
    at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:283)
    at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200)
    at com.github.barteksc.pdfviewer.source.FileSource.createDocument(FileSource.java:37)
    at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:53)
    at com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:25)
    at android.os.AsyncTask$2.call(AsyncTask.java:304)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)  

Ми clase templatePDF.class:

public class templatePDF {

private Context context;
private File pdfFile;
private Document document;
private PdfWriter pdfwriter;
private Paragraph paragraph;
private Font ftittle = new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLD);
private Font fSubtittle = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD);
private Font fText = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD);
private Font fHightittle = new Font(Font.FontFamily.TIMES_ROMAN, 15, Font.BOLD, BaseColor.RED);


public templatePDF(Context context) {

    this.context = context;
}

public void openDocument() {

    createPDF();
    try {

        document = new Document(PageSize.A4);
        pdfwriter = PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
        document.open();


    } catch (Exception e) {
        Log.e("openDocument", e.toString());
    }

}

private void createPDF() {

    File folder = new File(Environment.getExternalStorageDirectory().toString(), "PDF");

    if (!folder.exists())
        folder.mkdirs();
    pdfFile = new File(folder, "templatePDF.pdf");

}

public void closeDocument() {

    document.close();

}

public void addMetaData(String tittle, String subject, String author) {

    document.addTitle(tittle);
    document.addSubject(subject);
    document.addAuthor(author);


}

public void addTittles(String tittle, String subtittle, String date) {

    try {

        paragraph = new Paragraph();
        addChildP(new Paragraph(tittle, ftittle));
        addChildP(new Paragraph(subtittle, fSubtittle));
        addChildP(new Paragraph("generado: " + date, fHightittle));
        paragraph.setSpacingAfter(30);
        document.add(paragraph);

    } catch (Exception e) {
        Log.e("addTittles", e.toString());
    }

}

private void addChildP(Paragraph childParagraph) {

    childParagraph.setAlignment(Element.ALIGN_CENTER);
    paragraph.add(childParagraph);


}

public void addParagraph(String text) {

    try {
        paragraph = new Paragraph(text, fText);
        paragraph.setSpacingAfter(5);
        paragraph.setSpacingBefore(5);
        document.add(paragraph);
    } catch (Exception e) {

        Log.e("addParagraph", e.toString());

    }


}

public void createTable(String[] header, ArrayList<String[]> clients) {

    try {
        paragraph = new Paragraph();
        paragraph.setFont(fText);
        PdfPTable pdfPTable = new PdfPTable(header.length);
        pdfPTable.setWidthPercentage(100);
        PdfPCell pdfPCell;
        int indexC = 0;
        while (indexC < header.length) {

            pdfPCell = new PdfPCell(new Phrase(header[indexC++], fSubtittle));
            pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
            pdfPCell.setBackgroundColor(BaseColor.GREEN);
            pdfPTable.addCell(pdfPCell);
        }
        for (int indexR = 0; indexR < clients.size(); indexR++) {
            String[] row = clients.get(indexR);
            for (indexC = 0; indexC < header.length; indexC++) {

                pdfPCell = new PdfPCell(new Phrase(row[indexC]));
                pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                pdfPCell.setFixedHeight(40);
                pdfPTable.addCell(pdfPCell);


            }

        }

        paragraph.add(pdfPTable);
        document.add(paragraph);

    } catch (Exception e) {

        Log.e("createTable", e.toString());

    }


}

public void viewPDF() {

    Intent intent = new Intent(context, ViewPdfActivity.class);
    intent.putExtra("patch", pdfFile.getAbsoluteFile());
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

}

}

Ми clase ViewPdfActivity.class:

public class ViewPdfActivity extends AppCompatActivity {


private PDFView pdfView;
private File file;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_pdf);
    pdfView = findViewById(R.id.pdfView);


    Bundle bundle = getIntent().getExtras();
    if (bundle!=null) {

        file = new File(bundle.getString("patch", ""));


    }

    pdfView.fromFile(file)
            .enableSwipe(true)
            .swipeHorizontal(false)
            .enableDoubletap(true)
            .enableAntialiasing(true)
            .load();

}

Ми clase MainActivity.class:

общедоступный класс MainActivity расширяет AppCompatActivity {

private String[] header = {"Id", "Nombre", "Apellido"};
private String shortText = "Hola";
private String LongText = "Esto es una prueba test de viewer pdf generador de archivos en pdf";
private templatePDF templatePDF;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    templatePDF = new templatePDF(getApplicationContext());
    templatePDF.openDocument();
    templatePDF.addMetaData("Clientes", "Ventas", "Marines");
    templatePDF.addTittles("Tienda Prubas", "Clientes", "13/12/2019");
    templatePDF.addParagraph(shortText);
    templatePDF.addParagraph(LongText);
    templatePDF.createTable(header, getClients());
    templatePDF.closeDocument();

}

public void pdfView(View view) {

    templatePDF.viewPDF();


}

private ArrayList<String[]> getClients() {
    ArrayList<String[]> rows = new ArrayList<>();

    rows.add(new String[]{"1", "Peter", "Guti"});
    rows.add(new String[]{"2", "maria", "Guti"});
    rows.add(new String[]{"3", "jose", "Guti"});
    rows.add(new String[]{"4", "marcos", "Guti"});

    return rows;


}

}

2
задан 19.12.2019, 00:16
1 ответ

Проверяя твой код, я вижу, что ты создаешь каталог и файл, но получаешь:

PDFView: похвалите pdf ошибку java.io. FileNotFoundException: Не such file or directory

, Чтобы читать / писать файлы, - необходим определять в тебе AndroidManifest.xml разрешение:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

, но в этом случае, если он помечает ошибку, убедись требования разрешений вручную:

Ошибка, когда 6.0 показывает внешний каталог файлов в android, (READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE)

, Если предыдущее остается решенным сейчас, я комментирую тебе, что есть деталь в твоем коде, ты создаешь каталог но не файл, чтобы это создавать, можешь использовать метод createNewFile():

private void createPDF() {

    File folder = new File(Environment.getExternalStorageDirectory().toString(), "PDF");

    if (!folder.exists()){
        //Crea directorio
        folder.mkdirs();
        pdfFile = new File(folder, "templatePDF.pdf");

        //Crea archivo
        try {
          pdfFile.createNewFile();
        } catch (IOException e) {
          e.printStackTrace();
        }

    }

}

*Actualización:

В действительности маршрут PDF не получен и это благодаря тому, что переменная, которая содержит одинокий файл, отличается null, когда не был создан файл, когда не будут верить в файл никогда, он инициализируется, ты должен получать файл и проверять, существует ли этот, если его так сейчас, ты сможешь посылать маршрут, ты можешь реализовывать это в методе viewPDF():

public void viewPDF() {    

   File file = new File(Environment.getExternalStorageDirectory().toString() + "/"+  "PDF", "templatePDF.pdf");
    if (file.exists()){
       //Archivo existe.
       Intent intent = new Intent(context, ViewPdfActivity.class);
       intent.putExtra("patch", file.getAbsoluteFile());
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(intent);
      }else{
       Log.e("templatePDF", "Archivo no existe!");
      }

}
1
ответ дан 21.12.2019, 12:13
  • 1
    уже добавьте метод creteNewFile () как ты показал меня, уже я переместил его разрешения в manifest.xml и также это сделал вручную. Но даже останься, не показывая pdf мне и он показывает мне ту же ошибку... – ProgramadorJunior 19.12.2019, 20:00
  • 2
    Проверь разрешения @ProgramadorJunior в самом деле ты можешь видеть приложения в configuració n, ищи твой aplicació n и проверь, считает ли он включенными разрешения хранения. – Jorgesys♦ 19.12.2019, 20:20
  • 3
    уже проверьте, и считает ли он их включенными... я не понимаю, что он происходит – ProgramadorJunior 19.12.2019, 20:32
  • 4
    Ok тогда, который тебе кажется, если ты проверяешь, когда ты получаешь bundle, если существует файл: file = new File (bundle.getString (" patch" " ")); – Jorgesys♦ 20.12.2019, 18:37
  • 5
    @ProgramadorJunior ах уже я вижу, у тебя есть разгрузка, в которой не получается informació n файла, проверь edició n в мой ответ. – Jorgesys♦ 20.12.2019, 20:16

Теги

Похожие вопросы