What PDF is
PDF describes a page: glyphs at coordinates, not rows and columns. A table in a PDF is a visual arrangement, not a data structure.
Reports, invoices, statements and anything sent to be read rather than processed.
What R DataFrame is
R code that builds a data.frame from character vectors.
Statistics and R notebooks.
What changes when you convert PDF to R DataFrame
Every character in a text-based PDF carries its position on the page. Characters sharing a baseline are one row. Columns are found from the vertical strips no character ever occupies, which is why extraction works cleanly on a document laid out with spacing and badly on one laid out with ruled lines. A header repeated at the top of each page is detected and dropped rather than landing in the middle of the data.
stringsAsFactors is set to FALSE explicitly. It has defaulted to FALSE since R 4.0, but being explicit means the snippet behaves the same on older installs.
What carries over from PDF to R DataFrame
One property of the PDF has no home in R data frame, and it is worth knowing which before you convert.
R data frame wants a type for each column, and PDF does not record one, so each column is typed from what its values look like. A column of digits that should stay text - a zip code, a phone number, a leading-zero id - is the usual thing to check afterwards.
R data frame marks its header cells differently from its data cells, so the first row is written with that marker.
Anything visual in the PDF - weight, alignment, colour, column widths - has no counterpart in R data frame and is dropped. The values are what survives.
This is the direction that recovers structure: PDF has no table in it to read, only an arrangement that looks like one, so the rows and columns are inferred rather than read.