You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于PDF文件获取TextFragmentCollection?Aspose替代方案问询

可搜索PDF转数字文本PDF的文本片段获取方案

你要把可搜索PDF转成带数字文本的PDF,但Aspose.Pdf的Page类没有GetTextFragments()方法,以下是两种可行的替代思路:

一、Aspose.Pdf 官方替代方案:使用TextAbsorber类

Aspose.Pdf提供了TextAbsorber类,专门用于提取PDF中的文本及相关位置信息,完全可以替代你想调用的GetTextFragments()方法。修改后的代码如下:

using System;
using Aspose.Pdf;
using Aspose.Pdf.Text;

public static void PDFSearchableToPDFNormal(String filename, String des_filename)
{
    Document pdfDocument = new Document(filename);
    Document newDocument = new Document();

    foreach (Page pdfPage in pdfDocument.Pages)
    {
        Page newPage = newDocument.Pages.Add();
        // 创建TextAbsorber提取页面文本片段
        TextAbsorber textAbsorber = new TextAbsorber();
        pdfPage.Accept(textAbsorber);
        // 获取提取到的文本片段集合
        TextFragmentCollection textFragments = textAbsorber.TextFragments;

        foreach (TextFragment textFragment in textFragments)
        {
            TextFragment newTextFragment = new TextFragment(textFragment.Text);
            newTextFragment.Position = textFragment.Position;
            // 保留原文本的字体、字号等样式,避免丢失格式
            newTextFragment.TextState.Font = textFragment.TextState.Font;
            newTextFragment.TextState.FontSize = textFragment.TextState.FontSize;
            newTextFragment.TextState.ForegroundColor = textFragment.TextState.ForegroundColor;
            newPage.Paragraphs.Add(newTextFragment);
        }
    }
    newDocument.Save(des_filename);
}

二、iText7 实现类似功能的方案

如果想用iText7,可以通过PdfTextExtractor结合LocationTextExtractionStrategy来获取带位置的文本信息,再模拟生成类似TextFragment的对象:

using System;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Data;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using System.Collections.Generic;

// 自定义类存储文本及位置信息,模拟TextFragment
public class TextInfo
{
    public string Text { get; set; }
    public float X { get; set; }
    public float Y { get; set; }
    public float FontSize { get; set; }
}

public static void PDFSearchableToPDFNormal_Itext7(String filename, String des_filename)
{
    using (PdfReader reader = new PdfReader(filename))
    using (PdfWriter writer = new PdfWriter(des_filename))
    using (PdfDocument pdfDocument = new PdfDocument(reader, writer))
    {
        PdfDocument newDocument = new PdfDocument(new PdfWriter(des_filename));

        for (int pageNum = 1; pageNum <= pdfDocument.GetNumberOfPages(); pageNum++)
        {
            PdfPage page = pdfDocument.GetPage(pageNum);
            PdfPage newPage = newDocument.AddNewPage(page.GetPageSize());
            PdfCanvas canvas = new PdfCanvas(newPage);

            // 使用LocationTextExtractionStrategy提取带位置的文本
            LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();
            PdfTextExtractor.GetTextFromPage(page, strategy);

            // 提取文本片段及位置
            IList<TextChunk> textChunks = strategy.GetResultantTextChunks();
            foreach (TextChunk chunk in textChunks)
            {
                // 获取文本位置和样式
                string text = chunk.GetText();
                float x = chunk.GetStartLocation().GetX();
                float y = chunk.GetStartLocation().GetY();
                float fontSize = chunk.GetFontSize();

                // 在新页面绘制文本
                canvas.BeginText()
                      .SetFontAndSize(PdfFontFactory.CreateFont(), fontSize)
                      .MoveText(x, y)
                      .ShowText(text)
                      .EndText();
            }
        }
        newDocument.Close();
    }
}

内容的提问来源于stack exchange,提问作者Aideed Gaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:43:16