从PDF的特定图层获取文本

时间:2019-10-28 07:43:00

标签: c#

这是pdf样本,其上带有文字。如果关闭该层,则属于该层的所有文本也将不可见。 我需要从特定图层获取所有文本。任何人都知道如何存档。

这是我的示例PDF文件:https://drive.google.com/file/d/1TcRyE8MQRhw-j89BbovV7fFIwZ0yks0N/view?usp=sharing

我的代码可以获取所有文本。但是我不知道如何获取文本仅属于任何特定层。

public CreateHyperLinkButton(string inPutPDF, string outPutPDF, List<ViewPortInfo> ViewportInfos)
    {

        using (FileStream pdf = new FileStream(outPutPDF, FileMode.Create))
        {
            using (PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(inPutPDF))
            {
                using (PdfStamper pdfStamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, pdf))
                {
                    //Get Text list on 2D PDF
                    List<TextRenderInfo> listTextInfor = GetAllTextInfor(inPutPDF, pdfReader);

                    listTextInfor.ForEach(item =>{
                        string btnName = item.GetText().Trim();

                        //Check btnName exist in ViewportInfos
                        for (var i = 0; i < ViewportInfos.Count; i++)
                        {
                            string szRes = GetTextContained(ViewportInfos[i].Hyperlinks.Keys.ToList(), btnName);
                            if (!string.IsNullOrEmpty(szRes))
                            {
                                iTextSharp.text.Rectangle box = GetRectOfText(item);
                                iTextSharp.text.pdf.PushbuttonField btnField = new iTextSharp.text.pdf.PushbuttonField(pdfStamper.Writer, box, szRes);
                                iTextSharp.text.pdf.PdfAnnotation pushbutton = btnField.Field;

                                //Add JS function and button in annotation
                                string js = "mapView('" + szRes + "');";
                                pushbutton.SetAdditionalActions(iTextSharp.text.pdf.PdfName.U, iTextSharp.text.pdf.PdfAction.JavaScript(js, pdfStamper.Writer));
                                pdfStamper.AddAnnotation(pushbutton, 1);
                            }
                        }
                    });
                    pdfStamper.Close();
                }
                pdfReader.Close();
            }
            pdf.Close();
        }
    }

    private static List<TextRenderInfo> GetAllTextInfor(string inPutPDF, PdfReader pdfReader)
    {
        List<TextRenderInfo> listTextInfor = new List<TextRenderInfo>();

        TextExtractionStrategy allTextInfo = new TextExtractionStrategy();

        for (int i = 1; i <= pdfReader.NumberOfPages; i++)
        {
            PdfTextExtractor.GetTextFromPage(pdfReader, i, allTextInfo);
        }
        listTextInfor = allTextInfo.textList;
        return listTextInfor;
    }

public class TextExtractionStrategy : ITextExtractionStrategy
{
    public List<TextRenderInfo> textList = new List<TextRenderInfo>();
    public void BeginTextBlock()
    {

    }

    public void EndTextBlock()
    {

    }

    public string GetResultantText()
    {
        return "";
    }

    public void RenderImage(ImageRenderInfo renderInfo)
    {
        var a = renderInfo;
    }

    public void RenderText(TextRenderInfo renderInfo)
    {
        textList.Add(renderInfo);
    }
}

1 个答案:

答案 0 :(得分:-2)

您可以为此使用ironpdf。按照其站点上的文档解析/打开pdf文件,然后在调试中对其进行检查,然后您可以开发一些代码以仅从该层检索文本。