Wie kann ich mit Windows PowerShell die interne Erstellung / das Änderungsdatum von PDFs auslesen?

3268
MostlyHarmless

PDF-Dateien haben offenbar einen separaten Satz von Dateieigenschaften, die unter anderem ein Erstellungsdatum und ein Änderungsdatum enthalten (siehe Screenshot hier: http://ventajamarketing.com/writingblog/wp-content/uploads/2012/02/Acrobat -Dokument-Eigenschaften1-300x297.png ).

Dieses Datum kann offensichtlich vom Erstellungs- und Änderungsdatum im Dateisystem (Windows Explorer) abweichen.

Wie kann ich auf die Datumsinformationen in der PDF-Datei zugreifen und sie Windows 7mit einlesen Windows PowerShell(oder vielleicht mit einer anderen Methode)?

1

2 Antworten auf die Frage

2
Julian Knight

Sie können eine PDF-Datei (zumindest in neueren Formaten) als Text lesen. Sie finden einen eingebetteten XML-Abschnitt, der das Adobe XMP-Schema verwendet. Diese enthält die Metadaten, die Sie benötigen.

Hier ist ein Beispiel:

%PDF-1.5 %âãÏÓ 2 0 obj << /AcroForm 4 0 R /Lang (en-GB) /MarkInfo << /Marked true >> /Metadata 5 0 R /Pages 6 0 R /StructTreeRoot 7 0 R /Type /Catalog >> endobj 5 0 obj << /Length 2971 /Subtype /XML /Type /Metadata >> stream <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.1.2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <xmp:CreateDate>2014-03-05T15:03:02+01:00</xmp:CreateDate> <xmp:ModifyDate>2014-05-30T11:58:02+01:00</xmp:ModifyDate> <xmp:MetadataDate>2014-03-05T14:03:46Z</xmp:MetadataDate> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> <xmpMM:DocumentID>uuid:8b5fe011-ed77-4298-aa84-d1eda797b9ff</xmpMM:DocumentID> <xmpMM:InstanceID>uuid:88074e0b-42f7-4268-bc89-0162e417c9ad</xmpMM:InstanceID> </rdf:Description> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> </rdf:Description> </rdf:RDF> </x:xmpmeta> 

Im folgenden Beispiel wird das Erstellungsdatum abgerufen:

$a = Select-String "CreateDate\>(.*)\<" .\filename.pdf 

Was gibt so etwas zurück:

filename.pdf:20: <xap:CreateDate>2009-11-03T10:54:29Z</xap:CreateDate> filename.pdf:12921: <xap:CreateDate>2009-11-03T10:54:29Z</xap:CreateDate> 

Zu den genauen Daten gelangen:

$a.Matches.Groups[1] 

Welche gibt zurück:

2009-11-03T10:54:29Z 
1
Fazer87

Zunächst müssen Sie auf eine .net-Bibliothek zugreifen, die die Dokumenteigenschaften lesen kann, da es sich nicht um native Shell-Eigenschaften handelt: http://sourceforge.net/projects/itextsharp/

Als Nächstes müssen Sie die Objekte aus der PDF-Datei herausfiltern, beispielsweise:

# load ITextSHarp.dll  [System.Reflection.Assembly]::LoadFrom("C:\users\testuser\desktop\itextsharp.dll")  $raf = New-object iTextSharp.text.pdf.RandomAccessFileOrArray("C:\users\testuser\desktop\bitcoin.pdf")  # load pdf properties  $reader = New-object iTextSharp.text.pdf.PdfReader($raf, $Nothing)  $reader 
Sie können dies auch ohne eine zusätzliche Bibliothek tun, da die XMP-Metadaten wahrscheinlich eingebettet werden und als Text verfügbar sind. Julian Knight vor 9 Jahren 1