私のアプリケーションでは、バイトストリームを受信し、それを電話メモリ内の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の欠点の1つは、ネイティブライブラリを使用してターゲットを達成するため、後でアプリケーションを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 );
}