如何在Java中使用iText从PDF文件中删除页眉和页脚

如何在Java中使用iText从PDF文件中删除页眉和页脚,java,pdf,itext,Java,Pdf,Itext,我正在使用PDF iText库将PDF转换为文本 下面是我使用Java将PDF转换为文本文件的代码 public class PdfConverter { /** The original PDF that will be parsed. */ public static final String pdfFileName = "jdbc_tutorial.pdf"; /** The resulting text file. */ public static final String RESUL

我正在使用PDF iText库将PDF转换为文本

下面是我使用Java将PDF转换为文本文件的代码

public class PdfConverter {

/** The original PDF that will be parsed. */
public static final String pdfFileName = "jdbc_tutorial.pdf";
/** The resulting text file. */
public static final String RESULT = "preface.txt";

/**
 * Parses a PDF to a plain text file.
 * @param pdf the original PDF
 * @param txt the resulting text
 * @throws IOException
 */
public void parsePdf(String pdf, String txt) throws IOException {
    PdfReader reader = new PdfReader(pdf);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PrintWriter out = new PrintWriter(new FileOutputStream(txt));

    TextExtractionStrategy strategy;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
        out.println(strategy.getResultantText());
        System.out.println(strategy.getResultantText());
    }
    out.flush();
    out.close();
    reader.close();
}

/**
 * Main method.
 * @param    args    no arguments needed
 * @throws IOException
 */
public static void main(String[] args) throws IOException {
    new PdfConverter().parsePdf(pdfFileName, RESULT);
}
}
公共类PdfConverter{
/**将被解析的原始PDF*/
公共静态最终字符串pdfFileName=“jdbc_tutorial.pdf”;
/**生成的文本文件*/
公共静态最终字符串RESULT=“preforce.txt”;
/**
*将PDF解析为纯文本文件。
*@param pdf原始pdf
*@param txt返回结果文本
*@抛出异常
*/
公共void parsePdf(字符串pdf,字符串txt)引发IOException{
PdfReader reader=新PdfReader(pdf);
PdfReaderContentParser=新的PdfReaderContentParser(读取器);
PrintWriter out=新的PrintWriter(新文件输出流(txt));
文本抽取策略;

对于(int i=1;i因为您的pdf有页眉和页脚,所以它将被标记为工件(如果不是仅仅是放置在页眉或页脚位置的文本或内容)。如果它标记为工件,则可以使用ParseTaggedPdf提取它。如果ParseTaggedPdf不起作用,也可以使用ExtractPageContentArea。您可以查看一些与它相关的示例


上面的解决方案是通用的,取决于文件。如果您确实需要其他解决方案,您可以使用apache API,如PdfBox、tika和其他类似于PDFTextStream的解决方案。如果您必须坚持使用iText,并且无法移动到其他库,则我下面给出的解决方案将不起作用。在PdfBox中,您可以使用PDFTextStripperByArea或PDFTextStr如果你想知道如何使用它,可以看看JavaDoc或一些例子。

使用IText我在这个网站上找到了一个例子

在这里,您可以创建一个矩形,用于定义要获取的文本的边界

PdfReader reader = new PdfReader(pdf);
PrintWriter out= new PrintWriter(new FileOutputStream(txt));
//Creating the rectangle
Rectangle rect=new Rectangle(70,80,420,500);
//creating a filter based on the rectangle
RenderFilter filter = new RegionTextRenderFilter(rect);
TextExtractionStrategy strategy;
for(int i=1;i<=reader.getNumberOfPages();i+){
    //setting the filter on the text extraction strategy
    strategy= new FilteredTextRenderListener(
      new LocationTextExtractionStrategy(),filter);
    out.println(PdfTextExtractor.getTextFromPage(reader,i,strategy));
}
out.flush();out.close();
PdfReader阅读器=新的PdfReader(pdf);
PrintWriter out=新的PrintWriter(新文件输出流(txt));
//创建矩形
矩形rect=新矩形(70,80420500);
//基于矩形创建过滤器
RenderFilter过滤器=新区域ExtranderFilter(rect);
文本抽取策略;

对于(int i=1;i您可以读取pdf文件的特定位置。只需标记您需要从中获取文本的区域,并保留显示页眉和页脚的区域。我已经完成了,下面是完整的代码。

在这种情况下,我想您应该
扩展SimpleTextractionStrategy
以不读取/返回页眉和页脚(我猜你是通过位置知道的)。@amar你至少应该给出一个提示,说明如何识别PDF中的页眉和页脚材料。这是一个适当标记的PDF吗?还是有一个页面区域(所有页面都有固定的坐标)你想要的内容在哪一个内部,不想要的内容在哪一个外部?或者怎样才能识别它?@chsdk我试过那一个,那是不同的一个。我没有得到结果。你希望我们如何处理这些链接?BlueBeam文档是关于页眉/页脚的,添加了一个特定的工具,可能会标记页眉和foo这样的问题。是否要删除以这种方式标记的页眉和页脚?如果是,请共享这样的PDF。另一个PDF是来自Oracle.com的PDF。不清楚您要对该文件执行什么操作。请重新表述问题,以便能够实际回答。Bluebeam文档没有任何页眉或页脚!Oracle文档是带标签的PDF以及页眉和页脚被定义为工件。是否要删除这些工件?重复“我想删除该PDF文件中的页眉和页脚”的问题没有意义。您只会用它来烦扰人们。如果它不是带标签的PDF,那么如何删除页眉和页脚(如果只是放置在页眉或页脚位置的文本或内容)。您可以选中此链接=您需要定义需要提取的指定区域