Android pdfviewer / фрагмент - PullRequest
       16

Android pdfviewer / фрагмент

0 голосов
/ 12 января 2019

417/5000 Hello

У меня есть pdfview, который отлично работает, поскольку я не могу добавить его к фрагменту, который я использую:

  • implementation 'com.github.barteksc: android-pdf-viewer: 2.8.2'
  • implementation 'com.github.barteksc: android-pdf-viewer: 3.1.0-beta 1'

Вот код моего pdfview и моего фрагмента

public class magasineFragment extends Fragment  {

    public static magasineFragment newInstance() {
        magasineFragment fragment = new magasineFragment();
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.pdf_fragment, container, false);


        return view;
    }
}

следующий pdf.class

class pdf : AppCompatActivity() {

    internal lateinit var pdfView:PDFView
    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.pdf)

        pdfView = findViewById(R.id.pdfView) as PDFView
        RetrivePdfStream().execute("http://www.marseillemairie11-12.fr/fileadmin/Images/documents/kiosque/lemag-jan2019.pdf")


    }

    internal inner class RetrivePdfStream : AsyncTask<String, Void, InputStream>() 
    {
        override fun doInBackground(vararg strings: String): InputStream? {

            var inputStream: InputStream? = null
            try {
                val url = URL(strings[0])
                val urlConnection = url.openConnection() as HttpURLConnection
                if (urlConnection.responseCode == 200) {
                    inputStream = BufferedInputStream(urlConnection.inputStream)

                }

            } catch (e: IOException) {
                return null
            }

            return inputStream
        }

        override fun onPostExecute(inputStream: InputStream) {
            pdfView.fromStream(inputStream).load()
        }
    }
}

1 Ответ

0 голосов
/ 13 января 2019
  • Надеюсь, это поможет вам

  • этот код в Kotlin для чтения файла PDF из папки Assets

  • и отобразить его во фрагменте

       class PdfRendererBasicFragment : Fragment(), View.OnClickListener {
    
    
           private val FILENAME = "table.pdf"
           private val STATE_CURRENT_PAGE_INDEX = "current_page_index"
           private val TAG = "PdfRendererBasicFragment"
           private val INITIAL_PAGE_INDEX = 0   
           private lateinit var fileDescriptor: ParcelFileDescriptor
           private lateinit var pdfRenderer: PdfRenderer    
           private lateinit var currentPage: PdfRenderer.Page    
           private lateinit var imageView: ImageView   
           private lateinit var btnPrevious: Button
           private lateinit var btnNext: Button
           private var pageIndex: Int = INITIAL_PAGE_INDEX
           override fun onCreateView(
               inflater: LayoutInflater,
                    container: ViewGroup?,
                          savedInstanceState: Bundle?
             ): View {
           return inflater.inflate(R.layout.fragment_pdf_renderer_basic, container, false)
             }
    
              override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
              super.onViewCreated(view, savedInstanceState)
              imageView = view.findViewById(R.id.image)
              btnPrevious = view.findViewById<Button>(R.id.previous).also {   it.setOnClickListener(this) }
              btnNext = view.findViewById<Button>(R.id.next).also {  it.setOnClickListener(this)}
    
            if (savedInstanceState != null) {
             pageIndex = savedInstanceState.getInt(STATE_CURRENT_PAGE_INDEX,   INITIAL_PAGE_INDEX)
             } else {
            pageIndex = INITIAL_PAGE_INDEX
             }
                }
    
            @SuppressLint("LongLogTag")
             override fun onStart() {
                super.onStart()
                     try {
                         openRenderer(activity)
                                showPage(pageIndex)
                        } catch (e: IOException) {
                            Log.d(TAG, e.toString())
                      }
                        }
    
                    @SuppressLint("LongLogTag")
                   override fun onStop() {
                      try {
                        closeRenderer()
                     } catch (e: IOException) {
                        Log.d(TAG, e.toString())
                          }
                      super.onStop()
                            }
    
                  override fun onSaveInstanceState(outState: Bundle) {
                      outState.putInt(STATE_CURRENT_PAGE_INDEX, currentPage.index)
                      super.onSaveInstanceState(outState)
                         }
    
    
                      @Throws(IOException::class)
                     private fun openRenderer(context: Context?) {
                      if (context == null) return
    
                     val file = File(context.cacheDir, FILENAME)
                    if (!file.exists()) {
                    val asset = context.assets.open(FILENAME)
                    val output = FileOutputStream(file)
                    val buffer = ByteArray(1024)
                    var size = asset.read(buffer)
                    while (size != -1) {
                    output.write(buffer, 0, size)
                   size = asset.read(buffer)
                   }
                   asset.close()
                      output.close()
                     }
                fileDescriptor = ParcelFileDescriptor.open(file,        ParcelFileDescriptor.MODE_READ_ONLY)
    
                     pdfRenderer = PdfRenderer(fileDescriptor)
                      currentPage = pdfRenderer.openPage(pageIndex)
                       }
    
                       @Throws(IOException::class)
                       private fun closeRenderer() {
                       currentPage.close()
                       pdfRenderer.close()
                        fileDescriptor.close()
                       }
    
                     private fun showPage(index: Int) {
                    if (pdfRenderer.pageCount <= index) return
    
    
                 currentPage.close()
    
                currentPage = pdfRenderer.openPage(index)
    
                val bitmap = createBitmap(currentPage.width, currentPage.height,           Bitmap.Config.ARGB_8888)
    
    
                currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY)
               imageView.setImageBitmap(bitmap)
              updateUi()
                  }
                  private fun updateUi() {
                  val index = currentPage.index
                  val pageCount = pdfRenderer.pageCount
                 btnPrevious.isEnabled = (0 != index)
                btnNext.isEnabled = (index + 1 < pageCount)
    
                }
    
    
                 fun getPageCount() = pdfRenderer.pageCount
    
                 override fun onClick(view: View) {
                when (view.id) {
                R.id.previous -> {
    
               showPage(currentPage.index - 1)
               }
                R.id.next -> {
                           showPage(currentPage.index + 1)
                  }
               }
              }
    
              }
    
...