当前位置:  开发笔记 > 编程语言 > 正文

如何在shell脚本中分辨扫描的PDF?

如何解决《如何在shell脚本中分辨扫描的PDF?》经验,为你挑选了2个好方法。

我有大量的文档扫描成PDF格式,我希望编写一个shell脚本,将每个文档转换为DjVu格式.一些文件在200dpi扫描,一些在300dpi扫描,一些在600dpi扫描.由于DjVu是一种基于像素的格式,我想确保在目标DjVu文件中使用与扫描时相同的分辨率.

有谁知道我可以运行什么程序,或者我如何编写程序,以确定用于生成扫描PDF的分辨率?(像素数也可能有效,因为几乎所有文档都是8.5 x 11英寸.)


答复后的澄清:我知道布列塔尼强调的困难,我愿意承认这个问题总体上是不合适的,但我不是在询问一般的 PDF文件.我的特定文件来自扫描仪.它们每页包含一个扫描图像,每页包含相同的分辨率.如果我将PDF转换为PostScript,我可以手动搜索并轻松找到像素尺寸; 我可能会找到更多工作的图像尺寸.如果迫切需要我可以修改gs正在使用的字典堆栈; 很久以前,我为PostScript Level 1编写了一个解释器.

所有这些都是我想要避免的.


感谢收到的帮助,我在下面发布了一个答案:

    使用PDF提取边界框identify,仅获取第一页的输出,并了解单位将是PostScript点,其中有72到1英寸.

    使用提取第一页的图像pdfimages.

    获取图像的高度和宽度.这个时间identify会给出像素数.

    添加图像的总面积以获得平方的点数.

    要获得分辨率,请以平方英寸计算边界框区域,将平方除以平方英寸,取平方根,并舍入到最接近的10的倍数.

脚本的完整答案如下.我在实弹射击中使用它并且效果很好.感谢Harlequin for pdfimages和Spiffeah关于每页多个图像的警报(这很少见,但我发现了一些).



1> Spiffeah..:

如果通过扫描创建了pdf,则每个页面应该只有一个图像.您可以通过使用iText(Java)或iTextSharp(.net端口)库轻松解析pdf来查找每个页面图像的每个图像分辨率.

如果要滚动自己的实用程序来执行此操作,请在iTextSharp中执行以下操作:

PdfReader reader = new PdfReader(filename);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
PdfDictionary pg = reader.GetPageN(i);
PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobjs = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
if (xobjs != null) 
{
    foreach (PdfName xObjectKey in xobjs.Keys)
    {
    PdfObject xobj = xobjs.Get(xObjectKey);
    PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(xobj);
    PdfName subtype = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
    if  (subtype.Equals(PdfName.IMAGE))
    {
        PdfNumber width = (PdfNumber)tg.Get(PdfName.WIDTH);
        PdfNumber height = (PdfNumber)tg.Get(PdfName.HEIGHT);
        MessageBox.Show("image on page [" + i + "] resolution=[" + width +"x" + height + "]");
    }
    }
}
}   
reader.Close();

对于每个页面,我们通过子类型Image的每个XObject读取并获取WIDTH和HEIGHT值.这将是扫描仪嵌入在pdf中的图像的像素分辨率.

请注意,缩放此图像以匹配页面分辨率(如在Acrobat中呈现的页面大小 - A4,Letter等)在页面内容流中单独执行,该内容流表示为postscript的子集,并且没有解析后记很难找到.

请注意,有些扫描仪会将扫描图像嵌入较小图像的网格中(我假设某种尺寸优化).因此,如果您看到每个页面突然出现50个小图像,那可能就是原因.

希望如果你必须推出自己的实用程序,这会有所帮助.



2> VitoshKa..:

pdfimages具有-list选项,提供在像素和也高度宽度y-ppix-ppi.

 pdfimages -list tmp.pdf           
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    3300  2550  gray    1   1  ccitt  no       477  0   389   232  172K  17%
   2     1 image    3300  2550  gray    1   1  ccitt  no         3  0   389   232  103K  10%
   3     2 image    3300  2550  gray    1   1  ccitt  no         7  0   389   232  236K  23%
   4     3 image    3300  2550  gray    1   1  ccitt  no        11  0   389   232  210K  20%
   5     4 image    3300  2550  gray    1   1  ccitt  no        15  0   389   232  250K  24%
   6     5 image    3300  2550  gray    1   1  ccitt  no        19  0   389   232  199K  19%
   7     6 image    3300  2550  gray    1   1  ccitt  no        23  0   389   232  503K  49%
   8     7 image    3300  2550  gray    1   1  ccitt  no        27  0   389   232  154K  15%
   9     8 image    3300  2550  gray    1   1  ccitt  no        31  0   389   232 21.5K 2.1%
  10     9 image    3300  2550  gray    1   1  ccitt  no        35  0   389   232  286K  28%
  11    10 image    3300  2550  gray    1   1  ccitt  no        39  0   389   232 46.8K 4.6%
  12    11 image    3300  2550  gray    1   1  ccitt  no        43  0   389   232 55.5K 5.4%
  13    12 image    3300  2550  gray    1   1  ccitt  no        47  0   389   232 35.0K 3.4%
  14    13 image    3300  2550  gray    1   1  ccitt  no        51  0   389   232 26.9K 2.6%
  15    14 image    3300  2550  gray    1   1  ccitt  no        55  0   389   232 66.5K 6.5%
  16    15 image    3300  2550  gray    1   1  ccitt  no        59  0   389   232 73.9K 7.2%
  17    16 image    3300  2550  gray    1   1  ccitt  no        63  0   389   232 47.0K 4.6%
  18    17 image    3300  2550  gray    1   1  ccitt  no        67  0   389   232 30.1K 2.9%
  19    18 image    3300  2550  gray    1   1  ccitt  no        71  0   389   232 70.3K 6.8%
  20    19 image    3300  2550  gray    1   1  ccitt  no        75  0   389   232 46.0K 4.5%
  21    20 image    3300  2550  gray    1   1  ccitt  no        79  0   389   232 28.9K 2.8%
  22    21 image    3300  2550  gray    1   1  ccitt  no        83  0   389   232 72.7K 7.1%
  23    22 image    3300  2550  gray    1   1  ccitt  no        87  0   389   232 47.5K 4.6%
  24    23 image    3300  2550  gray    1   1  ccitt  no        91  0   389   232 30.1K 2.9%

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有