بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

کتابخانه خواندن pdf

مدیریت گفتگو
Pr0gramm3r 12 سال پیش
آخرین تغییر: 9 سال پیش

سلام

من تو برنامم میخوام یه فایل pdf رو بخونم

دقت کنید تو برنامم

نمیخوام برنامه ای دیگه ای باز بشه

هر چی library تست کردم برام کار نکرد

ممنون میشم یه روش که خودتون تست کردید رو بهم بگید

 

نظرات

Spirit 12 سال پیش
اسم کتابخونه ها رو مینوشتی ببینم اونی که من میشناسم رو هم تست کردی...
Pr0gramm3r 12 سال پیش
سلام اسمش یادم نیست ... شما اونی که تست کردید جواب داد؟ اگه اره بی زحمت اسمش رو بگید اگرم تونستید توضیحاتی دربارش بدید ممنون میشم

پاسخ‌ها 8

Spirit 12 سال پیش

تست که نکردم (لازم نشده) ولی طبق گفته یک فرد حرفه ای از بهترین ها هستش (rubiks.kde رو که میشناسی) :

https://github.com/JoanZapata/android-pdfview

مستنداتش هم که واضح و مبرهنه (مبرحنه ، ... ).

نظرات

Pr0gramm3r 12 سال پیش
خیلی ممنون , بله میشناسم , اتفاقا ازش هم پرسیدم ولی گفت لینک هر چند اینی که دادش رو نتونستم استفاده کنم ممنون
Pr0gramm3r 12 سال پیش
اتفاقا توضیحاتش اصلا واضح نبود :D هیچی نفهمیدم باید چیکار کنم؟
Spirit 12 سال پیش
باور کن من از این که نوشته نمیتونم واضحتر توضیح بدم ، اول مثل textView میزاریش تو layout بعدش تو activity میای اول تعریفش میکنی بعد یه فایل رو بهش معرفی میکنی برای نشون دادن و ... ، درس مربوط به sliding menu رو ببین تو اونجا استاد نحوه استفاده از کتابخونه رو گفته.
Pr0gramm3r 12 سال پیش
سلام خیلی ممنون ولی مشکلم تو ایمپورت لایبریه ایمپورت نمیشه چیکار کنم؟
Pr0gramm3r 12 سال پیش

اقا ایمپورت شد ولی به سه فایل گیر میده

CacheManager

DragPinchManager

PDFView

اینم عکس ارور ها

نظرات

Pr0gramm3r 12 سال پیش
کمک کنید خواهش میکنم
hamed 12 سال پیش
سلام دوست عزیز. من هم می خواستم یه همچین کاری بکنم. می خواستم ببینم شما مشکلتون حل شد؟ اگر حل شد لطفا من را نیز راهنمایی کنید و اگر حل نشده با هم همفکری کنیم تا به نتیجه برسونیمش.
Pr0gramm3r 12 سال پیش
به نظر من بیخیال شو , من که بیخیال شدم , چون 7 مگ به حجم برنامت اضافه میکنه که اصلا نمی ارزه
hamed 12 سال پیش

ممنون. ضمن تشکر از راهنمایی شما. خوشبختانه حجم برنامه برای پروژه ای که من در حال انجام اون هستم چندان مهم نیست. این پروژه یه پروژه صنعتیه که من به سفارش شرکتی که د آن استخدام هستم دارم انجام می دهم. و البته کار سنگینیه که برای من به صورت دست تنها ممکن پنج شش ماه طول بکشه. بخصوص اینکه تازه کارم. برای همین اگر لطف کنید و در صورت امکان نتایجی که بهشون رسیدید را حداقل به صورت سر نخ در اختیار من بگذارید یک دنیا ممنونم. بخصوص اینکه چند روزه در حال جستجو هستم و نتیجه مطلوبی دریافت نکرده ام.

نظرات

hamed 12 سال پیش
مشکل عمده این کتابخاه و کتابخانه های بدرد بخور دیگه ای که من تو اینترنت دیدم البته اینه که با API level 11 و یا بیشتر هستند در حالی که من می خواهم برای اندروید 2.2 اون ها را ریلیز کنم که نمی شه!
MiRHaDi 12 سال پیش
سلام توی webView تست کن ببین میتونه نشون بده ؟ مثل کروم که نشون میده
MiRHaDi 12 سال پیش

WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true); 
String pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);

این کد با استفاده از گوگل داک فایل مربوطه را در وب ویو نشان میدهد ( اگر آنلاین باشید مشکلی نداره )

نظرات

hamed 12 سال پیش
ممنون. مشکل اینجاست که آنلاین نیستم! متاسفانه من می خواهم روی فایل پی دی اف یه سری المان اضافه کنم و در دیتابیسی اون اطلاعات را با توجه به صفحه مورد نظر ذخیره کنم. می تونم فایل ها را به فرمت دیگه ای تبدیل کنم ولی ترجیه می دهم با توجه به حجم کم فایل های پی دی اف و خواص این فرمت از اون استفاده کنم. به خصوص اینکه می توان امکان اضافه کردن ساده تر فایل به برنامه را نیز در اختیار داشته باشم.
MiRHaDi 12 سال پیش
چرا از فورمت ePub استفاده نمیکنید ؟ برای کار شما مناسبتر هست بنظرم
MiRHaDi 12 سال پیش
لینک مطالب فصل ۱۰ تا ۱۴ احتمالا مفید باشد
hamed 12 سال پیش
من فکر می کنم در این فرمت بر خلاف پی دی اف متن با توجه به ابعاد صفحه تغییر وضعیت می دهد و با توجه به اینکه فایل های من اکثرا حاوی جدول هستند این مسئله دردسر ساز خواهد شد.
hamed 12 سال پیش
متاسفانه لینک باز نشد!
hamed 12 سال پیش
باز شد. ممنون
hamed 12 سال پیش
لینک را مطالعه کردم. متاسفانه ظاهرا اون مشکلی که گفتم پا برجاست البته مثل اینکه حالت خاصی هم وجود دارد(ظاهر ثابت). اما مشکل دیگر من تبدیل پی دی اف به این فرمت هست. که من بین مبدل ها بررسی کردم و پس از نصب چند عدد از آن ها متاسفانه جواب مناسبی نگرفتم. همون طور که گفتم مشکل اصلی من جداول پیچیده ای هست که در فایل ها دارم.
hamidd 12 سال پیش
مشترک
MiRHaDi 12 سال پیش
ePub در اصل Html و Css هست. شما هر شکلی را میتونید توش درست کنید. فایل Pdf را هم میشود به Html تبدیل کرد. ولی شما قبل از خروجی Pdf آن را درست کنید بهتر است
سپهر 11 سال پیش

بهترین pdf viewer ی که میتونم بهتون معرفی کنم Mupdf هست که میتونین از لینک زیر دریافت کنید 

MuPDF

 

نظرات

nooriDeveloper 11 سال پیش
یا خدا! این چقدر حجمشه؟!
alfredo 9 سال پیش

سلام

بنده هم دو هفته ای هست که در به در دنبال همچین کتابخانه ای هستم ولی ناکام موندم.

https://github.com/JoanZapata/android-pdfview   رو هم امتحان کردم ولی کامپایلر به اولین خط از کد این کتابخانه که میرسه کرش میکنه !

لطفا اگر دوستان تجربه استفاده از PDF رو دارند راهنمایی کنند.

نظرات

matrix2101 9 سال پیش
سلام دوست عزیز. بنده هم الان دنبال یک کتابخانه خوب می گردم و از دو تا کتابخانه هم قبلا استفاده کردم این یکی رو نتونستم حتی یک فایل pdf باهاش اجرا کنم لینک و یک کتابخانه دیگه هم استفاده کردم که خوب بود و تنها مشکلش اینه که از api 21 به بعد جواب میده لینک اون کتابخانه ای که شما لینک دادید هم خودش نوشته که دپریکیت شده. اگر کلاس PdfRenderer برای api کمتر از 21 هم جواب میداد خیلی عالی میشد لینک اگر از کتابخانه دیگه ای استفاده کردید و جواب داد به منم بگید که از همون استفاده کنم.
hamed 9 سال پیش
من هم همون قدیما کارم با mupdf حل شد. تا یادم می آید دردسر خاصی نداشت ولی من چون روی نسخه های پایین هم نیاز داشتم که کار کنه کمی توی کتابخانه اش دست بردم.
alfredo 9 سال پیش

کاش استاد بجای اون آموزش ساخت کتاب، استفاده از pdf رو آموزش میداد. هم پایدار تر بود هم دردسر ساختش خیلی کمتر از WebView هست...

میخواستم کامنت بذارم اشتباهی پاسخ دادم. با عرض پوزش...

نظرات

احسان 9 سال پیش

با کمک این روش (برای 21 API به بالا ! ) نیازی به کتاب خانه ندارید فقط مشکلش اینه که یه مقداری توی رندر مشکل داره که اونم زیاد مهم نیست :

یک کلاس بسازید و این کدها و پیست کنید :

 
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.pdf.PdfRenderer;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;


public class PdfRendererBasicFragment extends Fragment implements View.OnClickListener {

private static final String STATE_CURRENT_PAGE_INDEX = "current_page_index";

private ParcelFileDescriptor mFileDescriptor;

private PdfRenderer mPdfRenderer;
private PdfRenderer.Page mCurrentPage;

private ImageView mImageView;

private Button mButtonPrevious;

private Button mButtonNext;

public PdfRendererBasicFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_pdf_renderer_basic, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Retain view references.
mImageView = (ImageView) view.findViewById(R.id.image);
mButtonPrevious = (Button) view.findViewById(R.id.previous);
mButtonNext = (Button) view.findViewById(R.id.next);
// Bind events.
mButtonPrevious.setOnClickListener(this);
mButtonNext.setOnClickListener(this);
// Show the first page by default.
int index = 0;
// If there is a savedInstanceState (screen orientations, etc.), we restore the page index.
if (null != savedInstanceState) {
index = savedInstanceState.getInt(STATE_CURRENT_PAGE_INDEX, 0);
}
showPage(index);
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
openRenderer(activity);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(activity, "Error! " + e.getMessage(), Toast.LENGTH_SHORT).show();
activity.finish();
}
}

@Override
public void onDetach() {
try {
closeRenderer();
} catch (IOException e) {
e.printStackTrace();
}
super.onDetach();
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (null != mCurrentPage) {
outState.putInt(STATE_CURRENT_PAGE_INDEX, mCurrentPage.getIndex());
}
}


private void openRenderer(Context context) throws IOException {
// In this sample, we read a PDF from the assets directory.
mFileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();
// This is the PdfRenderer we use to render the PDF.
mPdfRenderer = new PdfRenderer(mFileDescriptor);
}


private void closeRenderer() throws IOException {
if (null != mCurrentPage) {
mCurrentPage.close();
}
mPdfRenderer.close();
mFileDescriptor.close();
}


private void showPage(int index) {
if (mPdfRenderer.getPageCount() <= index) {
return;
}
if (null != mCurrentPage) {
mCurrentPage.close();
}
mCurrentPage = mPdfRenderer.openPage(index);
Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(), mCurrentPage.getHeight(),
Bitmap.Config.ARGB_8888);

mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
mImageView.setImageBitmap(bitmap);
updateUi();
}


private void updateUi() {
int index = mCurrentPage.getIndex();
int pageCount = mPdfRenderer.getPageCount();
mButtonPrevious.setEnabled(0 != index);
mButtonNext.setEnabled(index + 1 < pageCount);
getActivity().setTitle(getString(R.string.app_name_with_index, index + 1, pageCount));
}


public int getPageCount() {
return mPdfRenderer.getPageCount();
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.previous: {
// Move to the previous page
showPage(mCurrentPage.getIndex() - 1);
break;
}
case R.id.next: {
// Move to the next page
showPage(mCurrentPage.getIndex() + 1);
break;
}
}
}

}
 
 

 

حالا توی کلاس MainActivity :

 
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.pdf.PdfRenderer;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;

/**
* This fragment has a big {@ImageView} that shows PDF pages, and 2 {@link android.widget.Button}s to move between
* pages. We use a {@link android.graphics.pdf.PdfRenderer} to render PDF pages as {@link android.graphics.Bitmap}s.
*/
public class PdfRendererBasicFragment extends Fragment implements View.OnClickListener {

/**
* Key string for saving the state of current page index.
*/
private static final String STATE_CURRENT_PAGE_INDEX = "current_page_index";

/**
* File descriptor of the PDF.
*/
private ParcelFileDescriptor mFileDescriptor;

/**
* {@link android.graphics.pdf.PdfRenderer} to render the PDF.
*/
private PdfRenderer mPdfRenderer;

/**
* Page that is currently shown on the screen.
*/
private PdfRenderer.Page mCurrentPage;

/**
* {@link android.widget.ImageView} that shows a PDF page as a {@link android.graphics.Bitmap}
*/
private ImageView mImageView;

/**
* {@link android.widget.Button} to move to the previous page.
*/
private Button mButtonPrevious;

/**
* {@link android.widget.Button} to move to the next page.
*/
private Button mButtonNext;

public PdfRendererBasicFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_pdf_renderer_basic, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Retain view references.
mImageView = (ImageView) view.findViewById(R.id.image);
mButtonPrevious = (Button) view.findViewById(R.id.previous);
mButtonNext = (Button) view.findViewById(R.id.next);
// Bind events.
mButtonPrevious.setOnClickListener(this);
mButtonNext.setOnClickListener(this);
// Show the first page by default.
int index = 0;
// If there is a savedInstanceState (screen orientations, etc.), we restore the page index.
if (null != savedInstanceState) {
index = savedInstanceState.getInt(STATE_CURRENT_PAGE_INDEX, 0);
}
showPage(index);
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
openRenderer(activity);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(activity, "Error! " + e.getMessage(), Toast.LENGTH_SHORT).show();
activity.finish();
}
}

@Override
public void onDetach() {
try {
closeRenderer();
} catch (IOException e) {
e.printStackTrace();
}
super.onDetach();
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (null != mCurrentPage) {
outState.putInt(STATE_CURRENT_PAGE_INDEX, mCurrentPage.getIndex());
}
}

/**
* Sets up a {@link android.graphics.pdf.PdfRenderer} and related resources.
*/
private void openRenderer(Context context) throws IOException {
// In this sample, we read a PDF from the assets directory.
mFileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();
// This is the PdfRenderer we use to render the PDF.
mPdfRenderer = new PdfRenderer(mFileDescriptor);
}

/**
* Closes the {@link android.graphics.pdf.PdfRenderer} and related resources.
*
* @throws java.io.IOException When the PDF file cannot be closed.
*/
private void closeRenderer() throws IOException {
if (null != mCurrentPage) {
mCurrentPage.close();
}
mPdfRenderer.close();
mFileDescriptor.close();
}

/**
* Shows the specified page of PDF to the screen.
*
* @param index The page index.
*/
private void showPage(int index) {
if (mPdfRenderer.getPageCount() <= index) {
return;
}
// Make sure to close the current page before opening another one.
if (null != mCurrentPage) {
mCurrentPage.close();
}
// Use `openPage` to open a specific page in PDF.
mCurrentPage = mPdfRenderer.openPage(index);
// Important: the destination bitmap must be ARGB (not RGB).
Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(), mCurrentPage.getHeight(),
Bitmap.Config.ARGB_8888);
// Here, we render the page onto the Bitmap.
// To render a portion of the page, use the second and third parameter. Pass nulls to get
// the default result.
// Pass either RENDER_MODE_FOR_DISPLAY or RENDER_MODE_FOR_PRINT for the last parameter.
mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
// We are ready to show the Bitmap to user.
mImageView.setImageBitmap(bitmap);
updateUi();
}


private void updateUi() {
int index = mCurrentPage.getIndex();
int pageCount = mPdfRenderer.getPageCount();
mButtonPrevious.setEnabled(0 != index);
mButtonNext.setEnabled(index + 1 < pageCount);
getActivity().setTitle(getString(R.string.app_name_with_index, index + 1, pageCount));
}


public int getPageCount() {
return mPdfRenderer.getPageCount();
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.previous: {
// Move to the previous page
showPage(mCurrentPage.getIndex() - 1);
break;
}
case R.id.next: {
// Move to the next page
showPage(mCurrentPage.getIndex() + 1);
break;
}
}
}

}
 

نظرات

matrix2101 9 سال پیش
مشکل اینجاست که برای api های کمتر از 21 جواب نمیده
احسان 9 سال پیش
بله درست میفرمایید ، یه مشکل اساسی این روش همینه که نمیشه برای API های پایین استفاده کرد :(

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .