I found a great VB.Net solution on Stack Overflow for this particular requirement after what felt like days of searching. I am still in the process of adapting it to c#, and I am working on a few things at the moment, but as soon as I convert it to c# I'll post a link here to the source code once it is completed underneath the VB.Net link.
Essentially what this solution does is to parse an existing pdf, searching for specific text values within it. If the extractor encounters matching text, it draws a pink rectangle around it. What it actually does with the extracted text is completely customizable though. I have it Drawing a rectangle around the text, and dropping a text field in it's place. I'll include the piece that needs to be swapped in VB to do this, so if anyone sees this, they can get the general idea of how to adapt the extracted text to fit your needs.
] It is the last answer, just click on the word HERE that is licked, and the download dialog will open.
In Form1.vb under
Public Sub PDFTextGetter(ByVal pSearch As String, ByVal SC As StringComparison, ByVal SourceFile As String, ByVal DestinationFile As String)
And directly underneath the comment I include with the code, you can do what you please with the rectangle drawn around the extracted text.
Dim AccountFields = 1
Dim MeterFields = 1
For Each rect As iTextSharp.text.Rectangle In MatchesFound
cb.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height + 2)
Dim field As New TextField(stamper.Writer, New iTextSharp.text.Rectangle(rect.Left, rect.Bottom, rect.Right, rect.Top + 2), "AccountNumber" & AccountFields)
Dim form = stamper.AcroFields
Dim fieldKeys = form.Fields.Keys
AccountFields += 1
The comment says it will fill in the rectangle, but I just left that in there so you can trace it to the original spot in the solution you download. Obviously this is not what it does in the snippet I provide. Anyone with a background with iTextsharp can piece that together, but I figured I would articulate it as well.
*Edit* Just a side note, the default writing mode for the ContentByte in this program is to GetUnderContent, so if you want to drop anything over that, simply toggle that to GetOverContent, and you will be golden.