是否有可靠的方法确定PDF是否由Powerpoint文件生成?

是否有可靠的方法确定PDF是否由Powerpoint文件生成?,pdf,pdf-generation,powerpoint,Pdf,Pdf Generation,Powerpoint,正如标题所说。我提出这个问题的原因是,我们正在将PDF转换为格式化的ASCII文本(使用pdftotext),并且只希望显示看起来相当正常的文本 PPT文件往往包含图像上的文本、对角线文本和其他无法很好地转换为ASCII的内容,因此我们希望尽可能将它们过滤掉。它可能会将其名称放入创建者或制作人信息中,但是我没有一个副本来验证这个理论。你的推理是非常武断的——肯定有很多PPT文件没有你描述的功能,还有很多PDF文件,它们是从另一个来源生成的 从理论上讲,更好的方法就是检测这些“不想要的”情况何时发

正如标题所说。我提出这个问题的原因是,我们正在将PDF转换为格式化的ASCII文本(使用pdftotext),并且只希望显示看起来相当正常的文本


PPT文件往往包含图像上的文本、对角线文本和其他无法很好地转换为ASCII的内容,因此我们希望尽可能将它们过滤掉。

它可能会将其名称放入创建者或制作人信息中,但是我没有一个副本来验证这个理论。

你的推理是非常武断的——肯定有很多PPT文件没有你描述的功能,还有很多PDF文件,它们是从另一个来源生成的

从理论上讲,更好的方法就是检测这些“不想要的”情况何时发生。然而,即使PDF格式部分是开放的(显然,它只用于阅读,所以它不是真正的开放格式),提取这样复杂的数据将是非常困难的。

简短回答:

不,我不这么认为

长答覆:

不,我不这么认为,因为有很多方法可以将PowerPoint文件转换为pdf格式,例如Adobe Acrobat和PDFCreator等。由转换器在PDF文件中嵌入特定信息,即使您找到了从一个转换中检测PowerPoint源PDF的方法,同样的方法也可能不适用于另一个转换

更详细的回答:


不,我不这么认为,因为“长答案”中描述的原因。我不认为检测PDF的来源是解决您试图解决的问题的最佳方法。不仅PowerPoint会生成重叠的文本和图像。我认为最好是检测PDF文件的实际布局。如果有重叠的图像和文本,然后你做一些过滤或预处理,以满足这一点

一般来说,以编程方式(可靠地)确定文件的来源或基于其内容生成文件的方式不是一件容易的事情。毕竟,文件只是位的集合


除非你有大量的资源来花费你的创造力来决定一个文件是否根据你的需要看起来相当理智,否则我会认为这是人类的任务。

< P>在PDM的元数据中列出了一个PDF的创建应用程序。在Acrobat 9中,您可以很容易地看到这一点(我之前也相信):转到
文件>属性
,单击
附加元数据…
,然后转到
高级
,它列在XMP核心属性和PDF属性下:


我猜您希望以编程的方式找到它,因此您需要找到一个库来读取与您的语言兼容的元数据。是一些XMP工具的列表

所有PDF都可能有此问题,无论其来源如何。大多数桌面发布套件都能够输出PDF,并且经常以其高质量和更华丽的PDF演示文稿而销售

“更合理”的方法是使用PDF解析器、ITextSharp或pdfNet…等,使用您选择的库,查找所有图像矩形和所有文本矩形,对矩形进行排序,然后查看文本和图像矩形是否存在实质性重叠——忽略图像到图像的重叠。如果是,则拒绝该页面和/或文档

这并不完美,但至少它会捕捉到许多不正常的PDF,无论其来源如何。要添加的其他启发式方法包括颜色分析。(即,重叠区域中的颜色是否足够不同,以允许“正常”结果?)


祝你好运

一些从ppt到pdf的转换程序在pdf开头的评论中保留了创建者。

我认为大多数应用程序生成的pdf看起来都是一样的。它可能有一些元数据,你可以从文件中读取…

我非常同意,但我在上面的问题中没有说明的变量是我们希望在PDF分析上花费多少精力(答案:不多)@NSD:我认为Adobe拥有它,并且不发布格式。也许这只是Flash?@DG的PDF参考文件可以从Adobe免费下载(作为AcrobatSDK的一部分)。具有讽刺意味的是,现在它是一种开放格式,似乎只有在你付费的情况下才能从ISO下载它@NSD告诉Adobe。他们多次威胁要对Microsoft在Office中添加PDF输出功能采取法律行动。感谢所有人的反对票:s我更正了我的回答,因为PDF显然不是一种封闭格式,即使你必须付费编写它们……我怀疑这只会在文件由powerpoint创建的情况下起作用。如果它是由PowerPoint打印到Adobe PDF Creator或其他PDF打印机驱动程序中的,这些字段不可能是其他的吗?我用Adobe Acrobat PDF打印机驱动程序和Mac内置的“保存到PDF”(在“打印”对话框中)试过了,但它保留了PowerPoint作为创建者。@carill:从技术上讲,它不是用powerpoint创建的。它是使用power point的打印机驱动程序创建的。如果我将PPT导出到EMF,然后打印它,它将放置打印EMF的应用程序的名称。这是一个简单的启发,但不能保证源文件实际上是powerpoint。我还注意到,“标题”元数据字段以“Microsoft Powerpoint”开头似乎很常见,即使如此,人类仍无法分辨它是OOo、Power Point、导出为PDF的LaTeX演示文稿、输出为PDF的post script演示文稿、在QuarkXPress(或类似DTP工具)中创建的演示文稿。所有的人都可以很容易地说“这看起来像是一个演示文稿,还是一个用于打印的文档?”这个字段可以包含任意文本。这在程序上是不可靠的。
xmp:CreatorTool: Microsoft PowerPoint
pdf:Creator: Microsoft PowerPoint