Working on tables in pdf using python









up vote
5
down vote

favorite
7












I am working on a pdf file. There is number of tables in that pdf.

According to the table names given in the pdf, I wanted to fetch the data from that table using python.



I have worked on html, xlm parsing but never with pdf.

Can anyone tell me how to fetch tables from pdf using python?










share|improve this question



























    up vote
    5
    down vote

    favorite
    7












    I am working on a pdf file. There is number of tables in that pdf.

    According to the table names given in the pdf, I wanted to fetch the data from that table using python.



    I have worked on html, xlm parsing but never with pdf.

    Can anyone tell me how to fetch tables from pdf using python?










    share|improve this question

























      up vote
      5
      down vote

      favorite
      7









      up vote
      5
      down vote

      favorite
      7






      7





      I am working on a pdf file. There is number of tables in that pdf.

      According to the table names given in the pdf, I wanted to fetch the data from that table using python.



      I have worked on html, xlm parsing but never with pdf.

      Can anyone tell me how to fetch tables from pdf using python?










      share|improve this question















      I am working on a pdf file. There is number of tables in that pdf.

      According to the table names given in the pdf, I wanted to fetch the data from that table using python.



      I have worked on html, xlm parsing but never with pdf.

      Can anyone tell me how to fetch tables from pdf using python?







      python pdf pdf-scraping






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 22 '17 at 10:31









      Brian Tompsett - 汤莱恩

      4,153133699




      4,153133699










      asked Mar 20 '12 at 7:42









      sam

      4,783155489




      4,783155489






















          5 Answers
          5






          active

          oldest

          votes

















          up vote
          6
          down vote













          I think that you need a python parser library. The most famous is PDFMiner.



          According to the documentation :




          PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.







          share|improve this answer



























            up vote
            6
            down vote













            I had a similar problem recently, and wrote a library to help solve it: pdfquery.



            PDFQuery creates an element tree from the PDF (using pdfminer, with some extra sugar) and lets you fetch elements from the page using JQuery or XPath selectors, based mostly on the text contents or locations of the elements. So to parse a table, you would first find where it is in the document by searching for the label:



            label = pdf.pq(':contains("Name of your table")')
            left_corner = float(label.attr('x0'))
            bottom_corner = float(label.attr('y0'))


            Then you would keep searching for lines underneath the table, until the search didn't return results:



            page = label.closest('LTPage')
            while 1:
            row = pdf.extract( [
            ('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
            ('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
            ], page)
            if not row['column_1'] or row['column_2']:
            break
            print "Got row:", matches
            bottom_corner -= 20


            This assumes that your rows are 20 pts high, the first one starts 20 pts below the label, the first column spans from 10 to 50 points from the left edge of the label, and the second column spans from 50 to 80 pts from the left edge of the label.



            If you have blank lines or lines with varying heights, this is going to get more annoying. You may also need to use the merge_tags=None option to select individual characters rather than words, if the entries in the table are close enough to make the parser think it's just one line. But hopefully this gets you closer ...






            share|improve this answer



























              up vote
              4
              down vote













              This is a very complex problem and not solvable in general.



              The reason for this is simply that the format PDF is too flexible. Some PDFs are only bitmaps (you would have to do your own OCR then—obviously not our topic here), some are a bunch of letters literally spilled out over the pages; this means that by parsing the text information in the PDF you could get single characters placed on some coordinates. In some cases these come in an orderly fashion (line by line, from left to right), but in some cases you will get rather random-like distributions, most commonly with and stuff, but also special characters, characters in a different font etc. can come way out of line.



              The only proper approach is to place all characters according to their coordinates on a page model and then use heuristics to find out what the lines are.



              I propose to have a look at your PDFs and the tables therein you want to parse before starting. Maybe they are alike all the time and well-parsable.



              Good luck!






              share|improve this answer



























                up vote
                1
                down vote













                You can use Camelot to extract tabular data from your PDF and export it to your favorite format. Currently; CSV, Excel, JSON and HTML are supported. You can check out the documentation at: http://camelot-py.readthedocs.io. It would be helpful if you could post a link to your PDF. Here's a generic code example:



                >>> import camelot
                >>> tables = camelot.read_pdf('file.pdf')
                >>> type(tables[0].df)
                <class 'pandas.core.frame.DataFrame'>
                >>> tables[0].to_csv('file.csv')


                Disclaimer: I'm the author of the library.






                share|improve this answer



























                  up vote
                  -3
                  down vote













                  Note: But this one is in Java



                  This one is helpful for extracting data from tables inside PDF.



                  PDF2Table main documentation



                  PDF2Table windows jar



                  PDF2Table for Mac or Linux






                  share|improve this answer




















                  • The question asks for how to do this in Python.
                    – Nathanael Farley
                    Jun 18 '17 at 12:49










                  Your Answer






                  StackExchange.ifUsing("editor", function ()
                  StackExchange.using("externalEditor", function ()
                  StackExchange.using("snippets", function ()
                  StackExchange.snippets.init();
                  );
                  );
                  , "code-snippets");

                  StackExchange.ready(function()
                  var channelOptions =
                  tags: "".split(" "),
                  id: "1"
                  ;
                  initTagRenderer("".split(" "), "".split(" "), channelOptions);

                  StackExchange.using("externalEditor", function()
                  // Have to fire editor after snippets, if snippets enabled
                  if (StackExchange.settings.snippets.snippetsEnabled)
                  StackExchange.using("snippets", function()
                  createEditor();
                  );

                  else
                  createEditor();

                  );

                  function createEditor()
                  StackExchange.prepareEditor(
                  heartbeatType: 'answer',
                  convertImagesToLinks: true,
                  noModals: true,
                  showLowRepImageUploadWarning: true,
                  reputationToPostImages: 10,
                  bindNavPrevention: true,
                  postfix: "",
                  imageUploader:
                  brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                  contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                  allowUrls: true
                  ,
                  onDemand: true,
                  discardSelector: ".discard-answer"
                  ,immediatelyShowMarkdownHelp:true
                  );



                  );













                   

                  draft saved


                  draft discarded


















                  StackExchange.ready(
                  function ()
                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9782972%2fworking-on-tables-in-pdf-using-python%23new-answer', 'question_page');

                  );

                  Post as a guest















                  Required, but never shown

























                  5 Answers
                  5






                  active

                  oldest

                  votes








                  5 Answers
                  5






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes








                  up vote
                  6
                  down vote













                  I think that you need a python parser library. The most famous is PDFMiner.



                  According to the documentation :




                  PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.







                  share|improve this answer
























                    up vote
                    6
                    down vote













                    I think that you need a python parser library. The most famous is PDFMiner.



                    According to the documentation :




                    PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.







                    share|improve this answer






















                      up vote
                      6
                      down vote










                      up vote
                      6
                      down vote









                      I think that you need a python parser library. The most famous is PDFMiner.



                      According to the documentation :




                      PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.







                      share|improve this answer












                      I think that you need a python parser library. The most famous is PDFMiner.



                      According to the documentation :




                      PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.








                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Mar 21 '12 at 10:59









                      Sandro Munda

                      25k1780112




                      25k1780112






















                          up vote
                          6
                          down vote













                          I had a similar problem recently, and wrote a library to help solve it: pdfquery.



                          PDFQuery creates an element tree from the PDF (using pdfminer, with some extra sugar) and lets you fetch elements from the page using JQuery or XPath selectors, based mostly on the text contents or locations of the elements. So to parse a table, you would first find where it is in the document by searching for the label:



                          label = pdf.pq(':contains("Name of your table")')
                          left_corner = float(label.attr('x0'))
                          bottom_corner = float(label.attr('y0'))


                          Then you would keep searching for lines underneath the table, until the search didn't return results:



                          page = label.closest('LTPage')
                          while 1:
                          row = pdf.extract( [
                          ('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
                          ('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
                          ], page)
                          if not row['column_1'] or row['column_2']:
                          break
                          print "Got row:", matches
                          bottom_corner -= 20


                          This assumes that your rows are 20 pts high, the first one starts 20 pts below the label, the first column spans from 10 to 50 points from the left edge of the label, and the second column spans from 50 to 80 pts from the left edge of the label.



                          If you have blank lines or lines with varying heights, this is going to get more annoying. You may also need to use the merge_tags=None option to select individual characters rather than words, if the entries in the table are close enough to make the parser think it's just one line. But hopefully this gets you closer ...






                          share|improve this answer
























                            up vote
                            6
                            down vote













                            I had a similar problem recently, and wrote a library to help solve it: pdfquery.



                            PDFQuery creates an element tree from the PDF (using pdfminer, with some extra sugar) and lets you fetch elements from the page using JQuery or XPath selectors, based mostly on the text contents or locations of the elements. So to parse a table, you would first find where it is in the document by searching for the label:



                            label = pdf.pq(':contains("Name of your table")')
                            left_corner = float(label.attr('x0'))
                            bottom_corner = float(label.attr('y0'))


                            Then you would keep searching for lines underneath the table, until the search didn't return results:



                            page = label.closest('LTPage')
                            while 1:
                            row = pdf.extract( [
                            ('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
                            ('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
                            ], page)
                            if not row['column_1'] or row['column_2']:
                            break
                            print "Got row:", matches
                            bottom_corner -= 20


                            This assumes that your rows are 20 pts high, the first one starts 20 pts below the label, the first column spans from 10 to 50 points from the left edge of the label, and the second column spans from 50 to 80 pts from the left edge of the label.



                            If you have blank lines or lines with varying heights, this is going to get more annoying. You may also need to use the merge_tags=None option to select individual characters rather than words, if the entries in the table are close enough to make the parser think it's just one line. But hopefully this gets you closer ...






                            share|improve this answer






















                              up vote
                              6
                              down vote










                              up vote
                              6
                              down vote









                              I had a similar problem recently, and wrote a library to help solve it: pdfquery.



                              PDFQuery creates an element tree from the PDF (using pdfminer, with some extra sugar) and lets you fetch elements from the page using JQuery or XPath selectors, based mostly on the text contents or locations of the elements. So to parse a table, you would first find where it is in the document by searching for the label:



                              label = pdf.pq(':contains("Name of your table")')
                              left_corner = float(label.attr('x0'))
                              bottom_corner = float(label.attr('y0'))


                              Then you would keep searching for lines underneath the table, until the search didn't return results:



                              page = label.closest('LTPage')
                              while 1:
                              row = pdf.extract( [
                              ('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
                              ('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
                              ], page)
                              if not row['column_1'] or row['column_2']:
                              break
                              print "Got row:", matches
                              bottom_corner -= 20


                              This assumes that your rows are 20 pts high, the first one starts 20 pts below the label, the first column spans from 10 to 50 points from the left edge of the label, and the second column spans from 50 to 80 pts from the left edge of the label.



                              If you have blank lines or lines with varying heights, this is going to get more annoying. You may also need to use the merge_tags=None option to select individual characters rather than words, if the entries in the table are close enough to make the parser think it's just one line. But hopefully this gets you closer ...






                              share|improve this answer












                              I had a similar problem recently, and wrote a library to help solve it: pdfquery.



                              PDFQuery creates an element tree from the PDF (using pdfminer, with some extra sugar) and lets you fetch elements from the page using JQuery or XPath selectors, based mostly on the text contents or locations of the elements. So to parse a table, you would first find where it is in the document by searching for the label:



                              label = pdf.pq(':contains("Name of your table")')
                              left_corner = float(label.attr('x0'))
                              bottom_corner = float(label.attr('y0'))


                              Then you would keep searching for lines underneath the table, until the search didn't return results:



                              page = label.closest('LTPage')
                              while 1:
                              row = pdf.extract( [
                              ('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
                              ('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
                              ], page)
                              if not row['column_1'] or row['column_2']:
                              break
                              print "Got row:", matches
                              bottom_corner -= 20


                              This assumes that your rows are 20 pts high, the first one starts 20 pts below the label, the first column spans from 10 to 50 points from the left edge of the label, and the second column spans from 50 to 80 pts from the left edge of the label.



                              If you have blank lines or lines with varying heights, this is going to get more annoying. You may also need to use the merge_tags=None option to select individual characters rather than words, if the entries in the table are close enough to make the parser think it's just one line. But hopefully this gets you closer ...







                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered Apr 16 '12 at 20:20









                              Jack Cushman

                              1,122117




                              1,122117




















                                  up vote
                                  4
                                  down vote













                                  This is a very complex problem and not solvable in general.



                                  The reason for this is simply that the format PDF is too flexible. Some PDFs are only bitmaps (you would have to do your own OCR then—obviously not our topic here), some are a bunch of letters literally spilled out over the pages; this means that by parsing the text information in the PDF you could get single characters placed on some coordinates. In some cases these come in an orderly fashion (line by line, from left to right), but in some cases you will get rather random-like distributions, most commonly with and stuff, but also special characters, characters in a different font etc. can come way out of line.



                                  The only proper approach is to place all characters according to their coordinates on a page model and then use heuristics to find out what the lines are.



                                  I propose to have a look at your PDFs and the tables therein you want to parse before starting. Maybe they are alike all the time and well-parsable.



                                  Good luck!






                                  share|improve this answer
























                                    up vote
                                    4
                                    down vote













                                    This is a very complex problem and not solvable in general.



                                    The reason for this is simply that the format PDF is too flexible. Some PDFs are only bitmaps (you would have to do your own OCR then—obviously not our topic here), some are a bunch of letters literally spilled out over the pages; this means that by parsing the text information in the PDF you could get single characters placed on some coordinates. In some cases these come in an orderly fashion (line by line, from left to right), but in some cases you will get rather random-like distributions, most commonly with and stuff, but also special characters, characters in a different font etc. can come way out of line.



                                    The only proper approach is to place all characters according to their coordinates on a page model and then use heuristics to find out what the lines are.



                                    I propose to have a look at your PDFs and the tables therein you want to parse before starting. Maybe they are alike all the time and well-parsable.



                                    Good luck!






                                    share|improve this answer






















                                      up vote
                                      4
                                      down vote










                                      up vote
                                      4
                                      down vote









                                      This is a very complex problem and not solvable in general.



                                      The reason for this is simply that the format PDF is too flexible. Some PDFs are only bitmaps (you would have to do your own OCR then—obviously not our topic here), some are a bunch of letters literally spilled out over the pages; this means that by parsing the text information in the PDF you could get single characters placed on some coordinates. In some cases these come in an orderly fashion (line by line, from left to right), but in some cases you will get rather random-like distributions, most commonly with and stuff, but also special characters, characters in a different font etc. can come way out of line.



                                      The only proper approach is to place all characters according to their coordinates on a page model and then use heuristics to find out what the lines are.



                                      I propose to have a look at your PDFs and the tables therein you want to parse before starting. Maybe they are alike all the time and well-parsable.



                                      Good luck!






                                      share|improve this answer












                                      This is a very complex problem and not solvable in general.



                                      The reason for this is simply that the format PDF is too flexible. Some PDFs are only bitmaps (you would have to do your own OCR then—obviously not our topic here), some are a bunch of letters literally spilled out over the pages; this means that by parsing the text information in the PDF you could get single characters placed on some coordinates. In some cases these come in an orderly fashion (line by line, from left to right), but in some cases you will get rather random-like distributions, most commonly with and stuff, but also special characters, characters in a different font etc. can come way out of line.



                                      The only proper approach is to place all characters according to their coordinates on a page model and then use heuristics to find out what the lines are.



                                      I propose to have a look at your PDFs and the tables therein you want to parse before starting. Maybe they are alike all the time and well-parsable.



                                      Good luck!







                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered Mar 21 '12 at 11:02









                                      Alfe

                                      31k1062101




                                      31k1062101




















                                          up vote
                                          1
                                          down vote













                                          You can use Camelot to extract tabular data from your PDF and export it to your favorite format. Currently; CSV, Excel, JSON and HTML are supported. You can check out the documentation at: http://camelot-py.readthedocs.io. It would be helpful if you could post a link to your PDF. Here's a generic code example:



                                          >>> import camelot
                                          >>> tables = camelot.read_pdf('file.pdf')
                                          >>> type(tables[0].df)
                                          <class 'pandas.core.frame.DataFrame'>
                                          >>> tables[0].to_csv('file.csv')


                                          Disclaimer: I'm the author of the library.






                                          share|improve this answer
























                                            up vote
                                            1
                                            down vote













                                            You can use Camelot to extract tabular data from your PDF and export it to your favorite format. Currently; CSV, Excel, JSON and HTML are supported. You can check out the documentation at: http://camelot-py.readthedocs.io. It would be helpful if you could post a link to your PDF. Here's a generic code example:



                                            >>> import camelot
                                            >>> tables = camelot.read_pdf('file.pdf')
                                            >>> type(tables[0].df)
                                            <class 'pandas.core.frame.DataFrame'>
                                            >>> tables[0].to_csv('file.csv')


                                            Disclaimer: I'm the author of the library.






                                            share|improve this answer






















                                              up vote
                                              1
                                              down vote










                                              up vote
                                              1
                                              down vote









                                              You can use Camelot to extract tabular data from your PDF and export it to your favorite format. Currently; CSV, Excel, JSON and HTML are supported. You can check out the documentation at: http://camelot-py.readthedocs.io. It would be helpful if you could post a link to your PDF. Here's a generic code example:



                                              >>> import camelot
                                              >>> tables = camelot.read_pdf('file.pdf')
                                              >>> type(tables[0].df)
                                              <class 'pandas.core.frame.DataFrame'>
                                              >>> tables[0].to_csv('file.csv')


                                              Disclaimer: I'm the author of the library.






                                              share|improve this answer












                                              You can use Camelot to extract tabular data from your PDF and export it to your favorite format. Currently; CSV, Excel, JSON and HTML are supported. You can check out the documentation at: http://camelot-py.readthedocs.io. It would be helpful if you could post a link to your PDF. Here's a generic code example:



                                              >>> import camelot
                                              >>> tables = camelot.read_pdf('file.pdf')
                                              >>> type(tables[0].df)
                                              <class 'pandas.core.frame.DataFrame'>
                                              >>> tables[0].to_csv('file.csv')


                                              Disclaimer: I'm the author of the library.







                                              share|improve this answer












                                              share|improve this answer



                                              share|improve this answer










                                              answered Nov 9 at 18:57









                                              Vinayak Mehta

                                              12910




                                              12910




















                                                  up vote
                                                  -3
                                                  down vote













                                                  Note: But this one is in Java



                                                  This one is helpful for extracting data from tables inside PDF.



                                                  PDF2Table main documentation



                                                  PDF2Table windows jar



                                                  PDF2Table for Mac or Linux






                                                  share|improve this answer




















                                                  • The question asks for how to do this in Python.
                                                    – Nathanael Farley
                                                    Jun 18 '17 at 12:49














                                                  up vote
                                                  -3
                                                  down vote













                                                  Note: But this one is in Java



                                                  This one is helpful for extracting data from tables inside PDF.



                                                  PDF2Table main documentation



                                                  PDF2Table windows jar



                                                  PDF2Table for Mac or Linux






                                                  share|improve this answer




















                                                  • The question asks for how to do this in Python.
                                                    – Nathanael Farley
                                                    Jun 18 '17 at 12:49












                                                  up vote
                                                  -3
                                                  down vote










                                                  up vote
                                                  -3
                                                  down vote









                                                  Note: But this one is in Java



                                                  This one is helpful for extracting data from tables inside PDF.



                                                  PDF2Table main documentation



                                                  PDF2Table windows jar



                                                  PDF2Table for Mac or Linux






                                                  share|improve this answer












                                                  Note: But this one is in Java



                                                  This one is helpful for extracting data from tables inside PDF.



                                                  PDF2Table main documentation



                                                  PDF2Table windows jar



                                                  PDF2Table for Mac or Linux







                                                  share|improve this answer












                                                  share|improve this answer



                                                  share|improve this answer










                                                  answered May 20 '14 at 6:18









                                                  sreemanth pulagam

                                                  735721




                                                  735721











                                                  • The question asks for how to do this in Python.
                                                    – Nathanael Farley
                                                    Jun 18 '17 at 12:49
















                                                  • The question asks for how to do this in Python.
                                                    – Nathanael Farley
                                                    Jun 18 '17 at 12:49















                                                  The question asks for how to do this in Python.
                                                  – Nathanael Farley
                                                  Jun 18 '17 at 12:49




                                                  The question asks for how to do this in Python.
                                                  – Nathanael Farley
                                                  Jun 18 '17 at 12:49

















                                                   

                                                  draft saved


                                                  draft discarded















































                                                   


                                                  draft saved


                                                  draft discarded














                                                  StackExchange.ready(
                                                  function ()
                                                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9782972%2fworking-on-tables-in-pdf-using-python%23new-answer', 'question_page');

                                                  );

                                                  Post as a guest















                                                  Required, but never shown





















































                                                  Required, but never shown














                                                  Required, but never shown












                                                  Required, but never shown







                                                  Required, but never shown

































                                                  Required, but never shown














                                                  Required, but never shown












                                                  Required, but never shown







                                                  Required, but never shown







                                                  Popular posts from this blog

                                                  Use pre created SQLite database for Android project in kotlin

                                                  Darth Vader #20

                                                  Ondo