如何在pdf文件中找到空白页面

时间:2012-06-09 15:30:32

标签: c# .net pdf itextsharp pdf-parsing

我无法在pdf文件中检测到空白页面。我已经搜索了互联网,但找不到一个好的解决方案。

  

使用Itextsharp我尝试使用页面大小Xobjects。但他们没有   给出确切的结果。

我试过

if(xobjects==null || textcontent==null || size <20 bytes )
  then "blank"
else
 not blank

但是它返回错误答案的最长时间。我使用过 Itextsharp

代码如下...... 我正在使用 Itextsharp Librabry

对于xobjects

PdfDictionary xobjects = resourceDic.GetAsDict(PdfName.XOBJECT);
//here resourceDic is PdfDictionary type
//I know that if Xobjects is null then page is blank. But sometimes blank page gives xobjects which is not null.

对于contentstream

 RandomAccessFileOrArray f = reader.SafeFile;
 //here reader = new PdfReader(filename);

 byte[] contentBytes = reader.GetPageContent(pageNum, f);
 //I have measured the size of contentbytes but sometimes it gives more than 20 bytes for   blank page

对于textcontent

String extractedText = PdfTextExtractor.GetTextFromPage(reader, pageNum, new LocationTextExtractionStrategy());
  // sometimes blank page give a text more than 20 char length .

3 个答案:

答案 0 :(得分:2)

发现空页的一种非常简单的方法是:使用调用bbox设备的Ghostscript命令行。

Ghostscript的bbox计算最小矩形'边界框'的坐标,它包含了将呈现像素的页面的所有点:

gs \
  -o /dev/null \
  -sDEVICE=bbox \
   input.pdf

在Windows上:

gswin32c.exe ^
  -o nul ^
  -sDEVICE=bbox ^
   input.pdf

结果:

GPL Ghostscript 9.05 (2012-02-08)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 6.
Page 1
%%BoundingBox: 27 281 548 804
%%HiResBoundingBox: 27.000000 281.000000 547.332031 804.000000
Page 2
%%BoundingBox: 0 0 0 0
%%HiResBoundingBox: 0.000000 0.000000 0.000000 0.000000
Page 3
%%BoundingBox: 27 302 568 814
%%HiResBoundingBox: 27.949219 302.000000 567.332031 814.000000
Page 4
%%BoundingBox: 27 302 568 814
%%HiResBoundingBox: 27.949219 302.000000 567.332031 814.000000
Page 5
%%BoundingBox: 27 302 568 814
%%HiResBoundingBox: 27.949219 302.000000 567.332031 814.000000
Page 6
%%BoundingBox: 27 302 568 814
%%HiResBoundingBox: 27.949219 302.000000 567.332031 814.000000

如您所见,我输入文档的第2页是空的。

答案 1 :(得分:1)

我怀疑你在你的琴弦上尝​​试过.Trim(),所以我不会建议你自己。

空白中20多个字符长度字符串的实际内容是什么?我怀疑它只是新行字符(就像人们按输入 10次以获得新页面而不是插入分页符时所发生的情况),在这种情况下:

String extractedText = 
    string.Replace(string.Replace(
        PdfTextExtractor.GetTextFromPage(reader, pageNum, new LocationTextExtractionStrategy())
    , Environment.NewLine, ""), "\n", "").Trim();

请在此之后告诉我们输出内容是什么。

另一种可能性是它是空白文本,包含不间断的空格和其他不是空格的字符,你需要手动查找和替换它们。此时我会建议你实际上只使用一个正则表达式匹配[0-9,az,AZ]并使用它来确定您的页面是否为空白。

答案 2 :(得分:0)

来自mupdf c++ library的C#和VB.NET包装库。您可以使用它将页面转换为bmp(采用不同格式tifjpgpng)并检查位图的大小。

您应该检查哪个是最小尺寸,并将页面的最小字符视为空白。