gpt4 book ai didi

c# - 从 PDF 中提取 SWF 文件

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:59 25 4
gpt4 key购买 nike

我已经使用 iTextsharp 实现了将 swf 文件添加到 pdf,我的问题是,是否可以进行逆向工程,例如,如果我将 pdf 作为输入,我必须从中获取 swf 文件,如果是,我如何能做到吗?

任何关于如何开始的想法,将不胜感激。

亲切的问候,

拉古.M

最佳答案

这是一个使用此嵌入式 pdf 的工作示例(我找到的第一个):

http://www.opf-labs.org/format-corpus/pdfCabinetOfHorrors/fileAttachment.pdf

并提取嵌入文件,在本例中为 KSBASE.WQ2 文件。

    public static void ExtractAttachments(String src, String dir)
{

PdfReader reader = new PdfReader(string.Format("{0}\\{1}", dir, src));
PdfDictionary root = reader.Catalog;
PdfDictionary names = root.GetAsDict(PdfName.NAMES);
PdfDictionary embedded = names.GetAsDict(PdfName.EMBEDDEDFILES);
PdfArray filespecs = embedded.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; )
{
ExtractAttachment(reader, dir, filespecs.GetAsString(i++),
filespecs.GetAsDict(i++));

}
}

protected static void ExtractAttachment(PdfReader reader, string dir, PdfString name, PdfDictionary filespec)
{
PRStream stream;
FileStream fos;
String filename;
PdfDictionary refs = filespec.GetAsDict(PdfName.EF);
foreach(PdfName key in refs.Keys) {
stream = (PRStream)PdfReader.GetPdfObject(refs.GetAsIndirectObject(key));
filename = filespec.GetAsString(key).ToString();
// here you can do an filename.Contains(".swf) check
var fileBytes = PdfReader.GetStreamBytes(stream);
File.WriteAllBytes(string.Format("{0}\\{1}", dir, filename), fileBytes);
}
}

你可以这样调用它:

var dir = "C:\\temp\\PdfExtract";
ExtractAttachments("fileAttachment.pdf", dir);

您可以简单地添加一个 filename.Contains(".swf) 在提取之前检查文件名。

更新

好的,如果上述方法不起作用,这就是我的解决方案。

文件必须位于目录中的不同位置,如果没有看到文件,这就是我的处理方式。

我会在 root 解析后添加一个断点,然后进入它以查看是否可以找到 swf 文件所在的位置。

如果您查看 root.Keys,您将看到 Catalog 包含的内容。

root.Keys

要检索任何字典对象,您可以使用 GetAsDict 方法传入匹配的 PdfName

再往下看,您可以看到它包含 EmbeddedFiles 等等。

enter image description here

有几个 PdfName 名称,甚至还有一个 Flash 名称。

由于任何文档的结构都可能不同,这只是调查结构并使用正确的参数到 GetAsDict 以读取文件的情况。

关于c# - 从 PDF 中提取 SWF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21780168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com