내 응용 프로그램에서 바이트 스트림을 받아 전화 메모리의 pdf 파일로 변환합니다. 그것을 pdf로 어떻게 렌더링합니까? 그리고 활동에서 보여줄까요?
답변:
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();
}
}
}
});
}
}
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);
}
}
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 개의 null 인수를 사용하면 페이지의 일부를 자르고 클립의 변형 ( Matrix 사용 )을 수행 할 수 있습니다.
다른 렌더링 모드가 있습니다. RENDER_MODE_FOR_PRINT . 이 모드가 필요한 경우 올바르게 사용하기위한 몇 가지 지침이 있습니다 . 자세한 내용 은 다음과 같습니다 .
이 라이브러리는 간단하고 잘 작동합니다 : Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer
이전 답변 ...
나는 Joan Zapata가 우리에게 더 좋고 간단한 해결책을 제공한다고 생각합니다.
https://github.com/JoanZapata/android-pdfview
나는 그것이 작동한다고 확신합니다!
pdfView.fromAsset(pdfName)
습니까? 절대 경로를 사용해 보았지만 파일을 찾을 수 없었습니다 (그리고 거기에 있다고 확신합니다). 예 : /data/data/package.name/files/images/filename.pdf
로컬 pdf 파일의 경우 타사 라이브러리를 통해 렌더링 할 수 있습니다. 예를 들어 MuPDF 라이브러리를 사용합니다. 지원되는 파일 유형에는 PDF, PNG 및 JPEG가 포함됩니다.
MuPDF의 한 가지 단점은 기본 라이브러리를 사용하여 목표를 달성하므로 나중에 BlackBerry 플랫폼에 응용 프로그램을 이식하기가 쉽지 않다는 것입니다.
바이트 배열에서 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 );
}