آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Pr0gramm3r  12 سال پیش  9 سال پیش
+9 0

سلام

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

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

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

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

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

 

0 0
اسم کتابخونه ها رو مینوشتی ببینم اونی که من میشناسم رو هم تست کردی... (12 سال پیش)
0 0
سلام اسمش یادم نیست ... شما اونی که تست کردید جواب داد؟ اگه اره بی زحمت اسمش رو بگید اگرم تونستید توضیحاتی دربارش بدید ممنون میشم (12 سال پیش)
 برای این سوال 8 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+4 0

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

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

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

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

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

CacheManager

DragPinchManager

PDFView

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

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

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

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

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);

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

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

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

MuPDF

 

0 0
یا خدا! این چقدر حجمشه؟! (11 سال پیش)
پاسخ به سوال 
alfredo  9 سال پیش
+1 0

سلام

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

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

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

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

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

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

پاسخ به سوال 
احسان  9 سال پیش
+2 0

با کمک این روش (برای 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;
}
}
}

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

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