首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDF文本搜索和拆分库

PDF文本搜索和拆分库
EN

Stack Overflow用户
提问于 2010-04-21 07:23:53
回答 4查看 3.7K关注 0票数 3

我正在寻找服务器端PDF库(或命令行工具),它可以:

  • 将多页PDF文件拆分为单个PDF文件,基于
  • PDF文件内容的搜索结果。

示例:

  • 搜索“页面?”格式,并将大pdf拆分为001.pdf、002、PDF、. ???.pdf

服务器程序将扫描PDF,查找搜索模式,保存与patten匹配的页面,并将文件保存在磁盘中。

与PHP / Ruby集成会更好。命令行工具也可以接受。它将是一个服务器端(linux或win32)批处理工具。不支持GUI/登录。i18n支持将是不错的,但不需要。谢谢~

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-28 04:39:22

票数 2
EN

Stack Overflow用户

发布于 2010-04-23 12:58:04

我的公司阿塔拉索刚刚发布了一些在.NET上运行的PDF操作工具。有一个文本提取类,可以用来查找文本并决定如何拆分文档,还有一个非常高级的文档类,可以使拆分变得非常简单。假设您有一个流到源PDF和一个越来越有序的列表来描述每个拆分的起始页面,那么生成拆分文件的代码如下所示:

代码语言:javascript
复制
public void SplitPdf(Stream stm, List<int> pageStarts, string outputDirectory)
{
    PdfDocument mainDoc = new PdfDocument(stm);
    int lastPage = mainDoc.Pages.Count - 1;

    for (int i=0; i < pageStarts.Count; i++) {
        int startPage = pageStarts[i];
        int endPage= (i < pageStarts.Count - 1) ?
            pageStarts[i + 1] - 1 :
            lastPage;
        if (startPage > endPage) throw new ArgumentException("list is not ordered properly", "pageStarts");
        PdfDocument splitDoc = new PdfDocument();
        for (j = startPage; j <= endPage; j++)
            splitDoc.Pages.Add(mainDoc.Pages[j];

        string outputPath = Path.Combine(outputDirectory, 
                                         string.Format("{0:D3}.pdf", i + 1));
        splitDoc.Save(outputPath);
    }

如果将其概括为页面范围结构:

代码语言:javascript
复制
public struct PageRange {
    public int StartPage;
    public int EndPage;
}

如果StartPageEndPage包含描述一系列页面,那么代码就更简单了:

代码语言:javascript
复制
public void SplitPdf(Stream stm, List<PageRange> ranges, string outputDirectory)
{
    PdfDocument mainDoc = new PdfDocument(stm);

    int outputDocCount = 1;
    foreach (PageRange range in ranges) {
        int startPage = Math.Min(range.StartPage, range.EndPage); // assume not in order
        int endPage = Math.Max(range.StartPage, range.EndPage);
        PdfDocument splitDoc = new PdfDocument();
        for (int i=startPage; i <= endPage; i++)
            splitDoc.Pages.Add(mainDoc.Pages[i]);
        string outputPath = Path.Combine(outputDirectory, 
                                         string.Format("{0:D3}.pdf", outputDocCount));
        splitDoc.Save(outputPath);
        outputDocCount++;
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-04-23 14:36:03

PDFBox是一个Java库,但它也有一些命令行工具:

http://pdfbox.apache.org/

PDFBox可以提取文本,也可以重建/拆分PDFS。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2681007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档