使用javascript从PDF获取信息(标题,主题,作者,制作人......)

时间:2011-06-16 05:02:02

标签: javascript pdf adobe pdf-generation adobe-reader

我试图学习如何在pdf文件中使用javascript,以及如何从/ Info对象中获取信息,如作者和标题。我已经找到了两种在pdf中使用js的方法,我把2个样本放在一起,第一个工作,第二个没有。它们都执行javascript,但第二个代码无法访问/ Info数据。我无法弄清楚原因。

示例1(此代码显示包含/ Title内容的提醒,工作正常):

%PDF-1.3
1 0 obj
<</Type/Catalog/Pages 5 0 R/OpenAction 3 0 R>>
endobj
2 0 obj
<<
/Producer (test)
/Subject (test)
/Title (test)
>>
endobj
3 0 obj
<</Type/Action/S/JavaScript/JS 4 0 R>>
endobj
4 0 obj
<</Length 17>>
stream
app.alert(title);
endstream
endobj
5 0 obj
<<
>>
endobj
xref
trailer
<<
/Root 1 0 R
/Info 2 0 R
>>
startxref
%%EOF

示例2(此示例不会显示任何警告,但如果我用字符串替换标题,则会显示警告);

%PDF-1.3
1 0 obj
<</Type/Catalog/Pages 5 0 R/AcroForm 3 0 R>>
endobj
2 0 obj
<<
/Producer (test)
/Subject (test)
/Title (test)
>>
endobj
3 0 obj
<</XFA [4 0 R]>>
endobj
4 0 obj
<</Length 767>>
stream
<?xml version="1.0" encoding="UTF-8" ?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<config xmlns="http://www.xfa.org/schema/xci/1.0/"><present>
<pdf><interactive>1</interactive><version>1.6</version>
</pdf><xdp><packets>*</packets></xdp><destination>pdf</destination></present></config>
<template xmlns="http://www.xfa.org/schema/xfa-template/2.5/">
    <subform layout="tb" locale="en_US" name="form">
        <subform>
            <field>
                <event activity="initialize" name="eventName">
                        <script contentType="application/x-javascript">
                        app.alert(title)
                        </script>
                </event>
            </field>
        </subform>
    </subform>
</template>
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data></xfa:data></xfa:datasets>
</xdp:xdp>
endstream
endobj
5 0 obj
<<
>>
endobj
xref
trailer
<<
/Root 1 0 R
/Info 2 0 R
>>
startxref
%%EOF

(两个pdf源都不是真正有效的pdf,但是js被执行了,我删除了很多东西以使它们更容易阅读)

有人知道为什么app.alert(标题)对第二个样本不起作用吗?

2 个答案:

答案 0 :(得分:1)

app.alert(event.target.title);

答案 1 :(得分:0)

这是一个评论,但我使用答案来说明格式和可读性。

http://corkami.googlecode.com/svn-history/r503/wiki/PDFTricks.wiki

如果你有

/Info <</Author(Hello) /Title( World) /Producer( !)>>

然后你可以做

app.alert(info.author + info.title + info.producer);

在你的情况下,我猜你需要先得到你所在的文件。我怀疑你可以做你想要的,因为你似乎在pdf中嵌入了一个xml文件。我不希望它起作用