一、弹出框显示 PDF
1、简单显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp" />
</LinearLayout>
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_simple_show_pdf);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);pdfvContainer.fromStream(inputStream).enableSwipe(true) .swipeHorizontal(false) .enableDoubletap(true) .defaultPage(0) .load();dialog.show();
2、标准显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp"android:layout_marginTop="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_show_pdf);
dialog.setCancelable(false);TextView tvTitle = dialog.findViewById(R.id.tv_title);
TextView tvMessage = dialog.findViewById(R.id.tv_message);
PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);
Button btnConfirm = dialog.findViewById(R.id.btn_confirm);tvTitle.setText("系统提示");
tvMessage.setText("请详细阅读文档内容");pdfvContainer.fromStream(inputStream).enableSwipe(true) .swipeHorizontal(false) .enableDoubletap(true) .defaultPage(0) .load();btnConfirm.setText("确定");
btnConfirm.setOnClickListener(v -> {dialog.dismiss();
});dialog.show();
二、弹出框显示 PDF 封装
1、简单显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp" />
</LinearLayout>
public static Dialog createSimpleShowPdfDialog(Context context, byte[] data) {Dialog dialog = new Dialog(context);dialog.setContentView(R.layout.dialog_simple_show_pdf);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);pdfvContainer.fromBytes(data).enableSwipe(true) .swipeHorizontal(false) .enableDoubletap(true) .defaultPage(0) .load();return dialog;
}
(2)Test
File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;
try {inputStream = new FileInputStream(pdfFile);
} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;
}ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
try {while ((nRead = inputStream.read(data, 0, data.length)) != -1) {buffer.write(data, 0, nRead);}
} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件读取失败", Toast.LENGTH_SHORT).show();return;
}byte[] bytes = buffer.toByteArray();Dialog dialog = DialogManager.createSimpleShowPdfDialog(this, bytes);dialog.show();
2、标准显示
(1)Dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><com.github.barteksc.pdfviewer.PDFViewandroid:id="@+id/pdfv_container"android:layout_width="300dp"android:layout_height="300dp"android:layout_marginTop="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
public interface ConfirmObserver {void onConfirm();
}
public static Dialog createShowPdfDialog(Context context,String title,String message,byte[] data,String confirmText, ConfirmObserver confirmObserver) {Dialog dialog = new Dialog(context);dialog.setContentView(R.layout.dialog_show_pdf);dialog.setCancelable(false);TextView tvTitle = dialog.findViewById(R.id.tv_title);TextView tvMessage = dialog.findViewById(R.id.tv_message);PDFView pdfvContainer = dialog.findViewById(R.id.pdfv_container);Button btnConfirm = dialog.findViewById(R.id.btn_confirm);tvTitle.setText(title);tvMessage.setText(message);pdfvContainer.fromBytes(data).enableSwipe(true) .swipeHorizontal(false) .enableDoubletap(true) .defaultPage(0) .load();btnConfirm.setText(confirmText);btnConfirm.setOnClickListener(v -> {if (confirmObserver != null) {confirmObserver.onConfirm();}dialog.dismiss();});return dialog;
}
(2)Test
Button btnOpenPdf = findViewById(R.id.btn_open_pdf);btnOpenPdf.setOnClickListener(view -> {File pdfFile = new File(getFilesDir(), "test.pdf");InputStream inputStream;try {inputStream = new FileInputStream(pdfFile);} catch (FileNotFoundException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件不存在", Toast.LENGTH_SHORT).show();return;}ByteArrayOutputStream buffer = new ByteArrayOutputStream();int nRead;byte[] data = new byte[1024];try {while ((nRead = inputStream.read(data, 0, data.length)) != -1) {buffer.write(data, 0, nRead);}} catch (IOException e) {e.printStackTrace();Toast.makeText(this, "PDF 文件读取失败", Toast.LENGTH_SHORT).show();return;}byte[] bytes = buffer.toByteArray();Dialog dialog = DialogManager.createShowPdfDialog(this,"系统提示","请详细阅读文档内容",bytes,"确定",null);dialog.show();
});