[gelöst] PDF-Datei signieren

Das Textverarbeitungsprogramm

Moderator: Moderatoren

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

[gelöst] PDF-Datei signieren

Beitrag von ejomi »

Hallo und einen schönen Tag Miteinander!

Mit OO ist der Export von Dokumenten als PDF ja nun wirklich ein Kinderspiel.

Gibt es irgendeinen Trick, solche PDF-Dateien auch zu signiern bzw.
sie wenigstens als "nicht änderbare" Datei zu speichern?

Hintergrund:
Ich beabsichtige Rechnungen (und sonstige, verbindliche Texte) per E-Mail zu versenden.
Nach Änderung der EU Richtlinie 2006/112/EC ist zwar eine Signierung von Rechnungen
jetzt nicht mehr notwendig - im Hinblick auf Fälschungssicherheit trotzem nach wie vor
empfehlenswert. Durch eine im Firmeneigenen Server erzeugte Signatur kann ich einen
solchen Schutz gegenüber Dritten ganz gut gewährleisten. Z. Zt. signiere ich solche
Dokumente über den Umweg eines PDF-Druckers (PDFCreator) - ein etwas umständliches Verfahren!

Prima wäre jetzt natürlich, wenn entsprechende Voreinstellungen über OO möglich wären
und man alles "in einem Rutsch" erledigten könnte.

Gruß aus Dresden:
ejomi
Zuletzt geändert von ejomi am Fr, 28.09.2012 15:34, insgesamt 1-mal geändert.

Gast

Re: PDF-Datei signieren?

Beitrag von Gast »

wenn Du über Datei / exportieren als PDF ...

Dein Dokument konvertierst kannst Du dort ein Passwort eingeben, und z.B. nur den Ausdruck des Dokuments erlauben.

Passwort gut merken !!!, damit Du selbst nachträglich Änderungen vornehmen kannst.

Stephan
********
Beiträge: 11546
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: PDF-Datei signieren?

Beitrag von Stephan »

Gibt es irgendeinen Trick, solche PDF-Dateien auch zu signiern bzw.
sie wenigstens als "nicht änderbare" Datei zu speichern?
Beides sind aber verschiedene Dinge, denn eine schreibgeschütze Datei ist natürlich prinzipiell manipulierbar indem man ein Kopie erstellt, es sei denn Du sicherst die Identität z.B. mittels einer Prüfsumme zusätzlich ab (was aber für den Zweck von Rechnungen ziemlich ungewöhnlich wäre).
Z. Zt. signiere ich solche
Dokumente über den Umweg eines PDF-Druckers (PDFCreator) - ein etwas umständliches Verfahren!
Was ist daran umständlich? Es ist faktisch derselbe Aufwand der beim internen PDF-Export von OO entsteht. Falls hingegen PDFCreator aus bestimmten Gründen doch unbequem wäre, nutze ein anderes Programm statt PDFCreator.

Wenn Du fälschungssichere PDF-Dokumente willst mußt Du signieren, mit dem internen PDF-Export von OOo geht das jedoch nicht, also mußt Du Software von Drittanbietern bemühen <Punkt>


Prinzipiell wäre es wohl machbar den Mechanismus der Hybrid-PDF-Erzeugung, der in OO nach Installation der PDF-Import-Extension (http://extensions.services.openoffice.o ... /pdfimport), zu nutzen um signierte odt-Dokumente ins PDF einzubetten und dadurch eine indirekte Kontrollmöglichkeit der Echtheit des PDF zu erlangen, nur ist das wohl ziemlich komisches Vorgehen.



Gruß
Stephan

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: PDF-Datei signieren?

Beitrag von ejomi »

Stephan hat geschrieben:Wenn Du fälschungssichere PDF-Dokumente willst mußt Du signieren, mit dem internen PDF-Export von OOo geht das jedoch nicht, also mußt Du Software von Drittanbietern bemühen
OK - habe verstanden: Das Signieren via OO ist also nicht möglich aber immerhin das Schützen per Passwort.

Danke an den Gast für seinen Tipp bezüglich Passwort-Schutz. Den Menüpunkt "Datei/Exportieren als PDF ..." hatte ich bisher übersehen: ich hatte immer nur "Datei/Exportieren ..." genutzt - dort werden die betreffenden Optionen nicht angeboten (da muss man erst mal drauf kommen).

Die folgende Frage gehört zwar eigentlich in den Bereich "OOo Basic und Java" aber irgendwie trotzdem noch zu diesem Thema:

Ist es möglich, den Passwortschutz für den PDF-Export per Makro festzulegen?

Hintergrund:
Verhindern, dass jeder Benutzer sein eigenes Passwörter benutzt, welches dann irgendwann nicht mehr bekannt ist. Mit einem im Makro-Code festgelegten (evtl. verschlüsselten) Passwort könnte man den Export geschützter PDF-Dateien auf einen "Knopfdruck" reduzieren und hätte damit ein Firmenweit vereinheitlichten Dokumentenschutz, den nur Eingeweihte kennen. Natürlich haben wir damit keinen absoluten Schutz erreicht, aber immerhin hat der Empfänger auch hier die Möglichkeit, problemlos "echte" von kopierten Dokumenten unterscheiden zu können: wenn kein Dokumentenschutz besteht, muß es sich um eine Kopie handeln. (Wobei angemerkt werden muß, dass auch das Kopieren von geschützen PDF-Dateien mit Adobe-Programmen oder dem PDFCreator wiederum zu einem schreibgeschützten Dokument führt. Eine Manipulation ist also nur auf grafischer Ebene z.B. mit Photoshop oder zuzätzlichen überlagerten Layern, wie sie z.B. der PDFViewer erzeugt, möglich).

Gruß: ejomi

Gast

Re: PDF-Datei signieren?

Beitrag von Gast »

passwortschutz per Makro ?

Nicht eingeweihte brauchen sich nur das Makro ansehen, und schon ist es ihnen bekannt - also zumindest der gesamten Firma, die einen Rechner halbwegs bedienen können.

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: PDF-Datei signieren?

Beitrag von ejomi »

Gast hat geschrieben:passwortschutz per Makro ?
... ganz einfach: in dem man z.B. das Passwort verschlüsselt in einer externen INI-Datei speichert!

Ich benutze dazu den von mir veröffentlichten Code zur RC4-Verschlüssselung. Man muß sich allerdings etwas Arbeit machen, um einen Dialog zur Änderung des Passworts durch den Admin zu ermöglichen und dann die kodierten Daten im INI-Format (mit Abschnitts- und Schlüsselbezeichner) in eine Textdatei abspeichern zu können. Ich habe soetwas ähnliches schon mal für eine automatisierte Anmeldung an eine externe Datenbank gebaut - auf Wunsch veröffentliche ich gerne mal einen Beispiel-Code im Bereich "OOo Basic und Java"

Ich wollte hier allerdings nur eine grundsätzliche Frage klären: Nämlich ob per Makro überhaupt eine Steuerung des PDF-Exports möglich ist (mein bla bla war vielleicht etwas mißverständlich - tut mir leid).

Gruß: ejomi

Stephan
********
Beiträge: 11546
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: PDF-Datei signieren?

Beitrag von Stephan »

OK - habe verstanden: Das Signieren via OO ist also nicht möglich aber immerhin das Schützen per Passwort.
Ich sage dann wegen "immerhin" nochmals das Passwort und Signieren zwei völlig verschiedene Dinge sind die zu verschiedenen Zwecken dienen, ein Passwort schützt das Dokument, aber es sichert nicht dessen Identität kann also böswillige Manipulationen nicht verhindern, eine Signatur hingegen verhindert das ein Dokument unerkannt gefälscht/verändert werden kann.
Hintergrund:
Verhindern, dass jeder Benutzer sein eigenes Passwörter benutzt, welches dann irgendwann nicht mehr bekannt ist.


Wozu nutzt Du überhaupt Passwörter, verzichte darauf. Was Du hier vorschlägst ist jedenfalls snakeoil (http://de.wikipedia.org/wiki/Schlangen%C3%B6l) weil sich derartige Passwörter in Praxis schnellstens verbreiten
aber immerhin hat der Empfänger auch hier die Möglichkeit, problemlos "echte" von kopierten Dokumenten unterscheiden zu können: wenn kein Dokumentenschutz besteht, muß es sich um eine Kopie handeln
Nein, genau das ist definitiv falsch, es besteht keinerlei Garantie das es sich nicht um eine Kopie handelt, denn ein Passwort sichert nun einmal nicht die Identität.
Und genau deswegen sprach ich von snakeoil, denn nicht nur das das falsche Vorgehen gewählt wird, sondern es ist nicht einmal klar das man sich falsch verhälkt, sondern es wird geglaubt man tue das Richtige.
(Wobei angemerkt werden muß, dass auch das Kopieren von geschützen PDF-Dateien mit Adobe-Programmen oder dem PDFCreator wiederum zu einem schreibgeschützten Dokument führt. Eine Manipulation ist also nur auf grafischer Ebene z.B. mit Photoshop oder zuzätzlichen überlagerten Layern, wie sie z.B. der PDFViewer erzeugt, möglich).
Das ist überhaupt nicht nötig denn es ist in Praxis viel einfacher das Dokument von Grund auf nachzubauen, was bei richtigem Vorgehen absolut unbeweisbar ist wenn das Ausgangsdokument nicht signiert war.


Sorry für diese belehrenden Einwände, nur steter TRopfen höhlt den Stein. Der unsichere Umgang mit Daten ist nämlich inzwischen eine echte Seuche unter der wir alle zu leiden haben.
Ich bin immer wieder erschrocken wenn ich beruflich Firmen betreue und dort Einblick bekomme wie lax dort mit wichtigen Kundendaten umgegangen wird und ich mir vergegenwärtige das könnten auch meine Daten sein.


Gruß
Stephan

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: PDF-Datei signieren?

Beitrag von ejomi »

Stephan hat geschrieben:ein Passwort schützt das Dokument, aber es sichert nicht dessen Identität

OK, OK - Du hast ja völlig recht. Für einen "offiziellen" Dokumenten-Transfer (z.B. bei Rechnungen) ist der Passwortschutz noch lange kein Echtheitsbeweis. Dazu muß man dann wirklich Signaturmechanismen von Drittanbietern verwenden (wir machen das hier schon eine ganze Weile mit einem selbst kreirten Zertifikat und dem bereits zitierten "PDFCreator").

Ich dachte natürlich mal wieder parallel und hatte bei meiner letzten Frage nur unsere Firmeninternen Dokumente im Sinn (z.B. Arbeitsanweisungen, Dienstpläne, sonstige Bekanntmachungen usw.), die hier täglich von einem Arbeitsplatz zum nächsten geschoben werden. Hier würde ein einfacher Schreibschutz genügen und auch die Automation per Makro wäre völlig ausreichend (schließlich betreiben wir hier im Hause keine Fälscherwerkstatt) - und das ist kein "snakeoil"!

Ansonsten trifft Deine Aussage natürlich zu 100% zu:
Der unsichere Umgang mit Daten ist nämlich inzwischen eine echte Seuche unter der wir alle zu leiden haben.
... das Problem ist übrigens älter als man glaubt: Wieso gilt z.B. ein einfaches FAX in Deutschland immernoch als gerichtsverwertbarer Beweis? Tatsächlich war und ist ein Telefax nicht Dokumentenecht und wird es auch nie werden! (Es gab mal vor Jahren von SIEMENS ein FAX-Gerät, welches einen kleinen Echtheitsstempel aufs Paper setzte - diese Technik hat sich aber nie durchgesetzt). Du siehst: Den sicheren Umgang mit Daten beherrscht selbst mancher Jurist noch nicht so richtig!

Gruß: ejomi

Stephan
********
Beiträge: 11546
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: PDF-Datei signieren?

Beitrag von Stephan »

Ich dachte natürlich mal wieder parallel und hatte bei meiner letzten Frage nur unsere Firmeninternen Dokumente im Sinn (z.B. Arbeitsanweisungen, Dienstpläne, sonstige Bekanntmachungen usw.), die hier täglich von einem Arbeitsplatz zum nächsten geschoben werden. Hier würde ein einfacher Schreibschutz genügen und auch die Automation per Makro wäre völlig ausreichend (schließlich betreiben wir hier im Hause keine Fälscherwerkstatt) - und das ist kein "snakeoil"!
Bitte führe Dir doch einmal die Situation vor Augen: Du verwendest ein Verfahren von dem Du weist das es nicht sicher ist sagst aber es wäre ausreichend.
Letzteres kann ja sein, nur wenn es ausreichend ist, kannst du auch gleich darauf verzichten, da Du ja weist das die Sicherheit nicht erhöht wird - das ist die rein technische Beurteilung.

Würdest Du Letztere Frage zusätzlich sicherheitstechnisch beurteilen würde weglassen des Schutzes zum Zwang denn es ist immer falsch ein unsicherers Verfahren zu implementieren, weil hieraus in Praxis deshalb Gefahren erwachsen können weil das Verfahren in der Routinearbeit als sicher betrachtet werden könnte.


Ich weiß auch nicht was ich tun kann außer hier nochmals ausdrücklich zu bekräftigen das es mir rein um die Sache geht (und nicht Dich persönlich anzugreifen) und die heißt hier irgendwie: wie soll sich denn Sicherheit in Praxis durchsetzen wenn iemand einfachen Anwendern sagt wie Sicherheit geht.
Wenn man diese Dinge lax angeht entstehen Gefahren weil Nutzer ja garnicht die Risiken kennen können. Allerbestes Beispiel ist der Tabellenblattschutz in *.xls-Dateien, ich möchte nicht wissen welche Millionenschäden schon durch den Irrglauben entstanden sind das dieser Schutz ein tatsächlicher Schutz im Wortsinne sei.
Wieso gilt z.B. ein einfaches FAX in Deutschland immernoch als gerichtsverwertbarer Beweis?
das kann ich Dir auch nicht sagen
Du siehst: Den sicheren Umgang mit Daten beherrscht selbst mancher Jurist noch nicht so richtig!
Sorry, hier kann ich weder "ja" noch "nein" sagen, sondern müßte erstmal meinen Anwalt befragen. Es besteht doch hier möglicherweise ein juristisches Problem und kein Technisches, d.h. was juristisch gilt das gilt und muß nicht in Einklag mit technischen Objektivitäten sein, das ist nun einmal Konsequenz juristischer Beurteilungen.


Gruß
Stephan

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: PDF-Datei signieren?

Beitrag von ejomi »

Stephan hat geschrieben: ... Du verwendest ein Verfahren von dem Du weist das es nicht sicher ist sagst aber es wäre ausreichend...
Herrgott, ja doch: es ist nicht sicher aber für MICH ist es ausreichend - wo ist denn da der Widerspruch?
Stephan hat geschrieben:wie soll sich denn Sicherheit in Praxis durchsetzen wenn iemand einfachen Anwendern sagt wie Sicherheit geht.
... komm' mal wieder von Deinem hohen Roß runter!
Sicherheit für den "einfachen Anwender" geht so: passender Schlüssel rein - rumdrehen - Tür auf!

In diesem Forum sollten doch nur praktische Tipps zwischen Anwendern ausgetauscht und keine MCSE-reifen Szenarien ausgearbeitet werden (bin selbst MCSE und brauche keine Nachhilfe mehr)!

Eine alte Kryptographie-Weisheit (siehe Claude Shannon) besagt, daß eine gute Verschlüsselung nicht auf die Geheimhaltung des Verfahrens sondern ausschließlich auf den Schlüssel selbst beruht. So weiß z.B. heute jeder "einfacher Anwender", wie ein normales DOM-Schloß an der Haustüre funktioniert (aber den Schlüssel dazu kann er im Normalfall nicht selbst herstellen) oder er kennt vielleicht Kryptographie-Methoden wie z.B. Blowfish oder OpenPGP, wobei ihm auch hierbei die Möglichkeit fehlt, einen fremden Schlüssel zu ermitteln.

Deine Empörung darüber, daß man "einfachen Anwendern sagt wie Sicherheit geht", ist eine Geisteshaltung, die bereits in den 50er Jahren von Claude Shannon mit den Worten "Security through obscurity" belächelt wurde!

Mal ein Beispiel aus dem "wirklichen Leben":
Es gibt auch Gartentore mit einem einfachen Riegel auf der Innenseite - auch diese Dinger haben ihre Existenzberechtigung! Für den "einfacher Anwender" ist es kein Geheimnis, daß man Dokumente scheibschützen und den Schutz leicht wieder aufheben kann (google macht's möglich), genauso wie man das Gartentor einfach mit einem Stück Draht öffnen kann (der Baumarkt macht's möglich).

Die Kernfrage bei allen Sicherheits-Szenarien ist doch nur die: Wie hoch ist das Risiko einer möglichen Manipulation? Beim "verschossenen" Gartentor weiß der Nachbar, daß Niemand Zuhause ist. Verschafft er sich trotzdem gewaltsam Zutritt, wird er (hoffentlich) am Sicherheitsschloß der Haustüre scheitern = wir haben also 2 Sicherheitsstufen wobei die 1. nur eine reine Hemmschwelle sein soll, mehr nicht!

Ein Beispiel aus der Büro-Praxis (die Dir offensichtlich fremd ist, wie man an Deiner Bemerkung über den Blattschutz von EXCEL erkennen kann):

Wenn ich z.B. einen Dienstplan ausarbeite und Firmenintern schreibgeschützt versende, dann sind mir meine Kollegen dafür sogar sehr dankbar! Damit ist nämlich gewährleistet, daß sie nicht versehentlich etwas an den komplexen Tabellen ändern können. Genausowenig wie etwa der Nachbar über mein Gartentor sagen könnte, er sei nur "versehentlich" in meinen Garten gestolpert. Mutwillige Manipulationen sind möglich aber das war hier nicht das Thema - hast Du's langsam verstanden?

Nö, nö - was ein Frust! Jetzt weiß ich immernoch nicht, ob man den PDF-Export per Makro steuern kann ...
Wir haben hier mal wieder ein wunderbares Beispiel, wie ein ursprünglich klar definiertes Thema völlig zerredet wird (ich hatte mich darüber schon an anderer Stelle mehrfach aufgeregt).

Gruß: ejomi

Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: PDF-Datei signieren?

Beitrag von sven-my »

Hallo ejomi,

hier ein Makro-Fragment zum Exportieren eines Dokuments als PDF-Datei mit Passwort:

Code: Alles auswählen

rem Passwort geschützer PDF-Export über Makro
rem in Zeile args1(1).Value= das Passwort eintragen

Sub export_pdf_with_password

odoc = ThisComponent.CurrentController.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "EncryptFile"
args1(0).Value= true
args1(1).Name = "DocumentOpenPassword"
args1(1).Value= "tRWrNewKdu5rmGP9dyQn"

dim args2(3) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = url_pdf_out
args2(1).Name = "FilterName"
args2(1).Value = "writer_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = args1

dispatcher.executeDispatch(odoc, ".uno:ExportDirectToPDF", "", 0, args2())
end sub
habe ich hier im Forum gefunden - frage mich aber nicht wo, denn das dürfte schon über ein Jahr her sein, und ich hatte es bei einem meiner Makros eingebaut.
Ich nehme an, Du kannst es Dir zurechtstricken - ich habe es auch geschafft, und das will was bedeuten.

dies muß geändert werden, ich weiß nur nicht, wie genau:

Code: Alles auswählen

args1(1).Name = "DocumentOpenPassword"
denn Du willst ja nicht das Öffnen, sondern das Ändern per Passwort verhindern.

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable

Gast

Re: PDF-Datei signieren?

Beitrag von Gast »

Makro-recorder hat dies aufgenommen:

Code: Alles auswählen

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///E:/Clipart-sortiert/Unbenannt%202.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EmbedStandardFonts",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(Array("PackageSHA256UTF8EncryptionKey",Array(51,-59,-21,-69,1,-42,8,-62,84,-77,-79,36,19,-67,-80,62,70,-63,39,-105,-27,-111,119,12,-49,32,-11,-30,-127,-103,41,-78)),Array("PackageSHA1UTF8EncryptionKey",Array(46,43,101,51,-88,27,-63,84,48,-49,101,-34,70,-36,9,126,-21,91,-89,12)),Array("PackageSHA1MS1252EncryptionKey",Array(46,43,101,51,-88,27,-63,84,48,-49,101,-34,70,-36,9,126,-21,91,-89,12))),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())


end sub

Gast

Re: PDF-Datei signieren?

Beitrag von Gast »

Hier ein Program, daß angeblich PDFs signieren kann:

Perfect PDF Reader 8

Zitat:
"Außerdem können PDF-Dateien mit Zertifikaten von SmartCards oder aus Dateien (PFX, PVK) signiert werden. "

ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: PDF-Datei signieren?

Beitrag von ejomi »

sven-my hat geschrieben:hier ein Makro-Fragment zum Exportieren eines Dokuments als PDF-Datei mit Passwort:
... wunderbar - nach einem solchen Ansatz hatte ich schlußendlich gesucht - Vielen Dank "sven-my"!
(Übringens haben wir hier ein sehr schönes Beispiel, wie man durch konstruktive Vorschläge viel mehr erreicht, als mit endlosem "bla bla" - lieber Stephan)!

Wenn man dann erst mal das richtige Stichwort hat, wird man auch fündig: Ich habe die komplette Beschreibung zum PDF-Export in den API-Tutorials von AOO gefunden.

Der unten einkopierte Code gehört zwar definitiv in die Rubrik "OOo Basic und Java", weil wir aber hier das Thema "Makro" bereits angeschnitten hatten, poste ich hier meine Ausarbeitung des Codes trotzdem - vielleicht hilft es ja jemandem weiter.

Ich habe unter dem jeweiligen Filter-Namen einen Beschreibungstext einkopiert (in englisch, um international verständlich zu bleiben).

Viel Spaß damit!
Gruß: ejomi

Code: Alles auswählen

Sub ExportPDF
	' Call the export-routine below with optional arguments for passpharases and/or watermark-text:
	'   argument 1 = target file (path and PDF-filename like required from your file-system)
	'   argument 2 = file open password,
	'   argument 3 = restriction password
	'   argument 4 = watermark text
	'
	' Examples:
		' No special settings at all (export only):
		   PdfExportWithFilter()
		' Export to a special destination (no further settings):
		'   PdfExportWithFilter("D:\TESTPATH\TESTDOC.pdf")
		' Export to a special destination with the to-open-password "test":
		'    PdfExportWithFilter("D:\TESTPATH\TESTDOC", "test")
		' Export using the file-manager (no destination defined) with the restriction-password "test":
		'    PdfExportWithFilter("", "", "test")
		' Export using the file-manager with no passwords but a watermark:
		'    PdfExportWithFilter("", "", "", "THIS IS AN EXAMPLE!")
End Sub


Sub PdfExportWithFilter(Optional TargetFile As Variant, Optional OpenPassword As String, Optional PermitPassword As String, Optional WatermarkText As String)

	' Sub "PdfExportWithFilter"
	' Author: ejomi
	' Date: 2012/09
	'    Arguments (all optional / can be left empty):
	'    TargetFile     =  The path and filename of the PDF-File (syntax as required from your file-system)
	'    OpenPassword   =  Passphrase for opening the ready made PDF-File
	'    PermitPassword =  Passphrases for setting user-restrictions to the PDF-File
	'    WatermarkText  =  A text for a watermark to be drawn on every page of the exported PDF file
	' Details of the PDF-Export specifications and filters, see:
	' http://wiki.openoffice.org/wiki/API/Tutorials/PDF_export

	' --------------------------------- I N I T -------------------------------------

	' Define some local variables:
	Dim oDoc As Object, Dispatcher As Object
	Dim ExportFilter(33) As New com.sun.star.beans.PropertyValue
	Dim PdfProperty(3) As New com.sun.star.beans.PropertyValue
	Dim SetEncrypt As Boolean, SetRestricts As Boolean
	
	' Automatically toggle the encrypt- and restriction-switches
	' depending on a given passphrase for "File Open" and/or "User Permissions":
	If IsMissing(TargetFile) Then TargetFile = ""
	If IsMissing(OpenPassword) Then OpenPassword = ""
	If IsMissing(PermitPassword) Then PermitPassword = ""
	If IsMissing(WatermarkText) Then WatermarkText = ""
	
	' The Constant "url_pdf_out" forces a filemanager before exporting the new PDF-File:
	If TargetFile = "" Then
		TargetFile = url_pdf_out
	Else
		TargetFile = ConvertToURL(TargetFile)
	Endif
	
	If OpenPassword <> "" Then SetEncrypt = True
	If PermitPassword <> "" Then SetRestricts = True
	
	' Get access to the current writer document:
	oDoc = ThisComponent.CurrentController.Frame
	
	' Initialize the UNO-Dispatcher:
	Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

	' ------------------- D I S P L A Y - S E T T I N G S ---------------------------
	
	ExportFilter(0).Name   = "SelectPdfVersion"
	' Specifies the version of PDF to emit. 
	'  0 = PDF 1.4 (default selection). 
	'  1 = PDF/A-1 (ISO 19005-1:2005)
	ExportFilter(0).Value  = 0
	
	ExportFilter(1).Name   = "PDFViewSelection"
	' Specifies the way the exported PDF will be viewed by the user. 
	'  0 = The PDF will be exported with all the links external
	'      to the document treated as URI (= Default). 
	'  1 = The PDF will be exported in order to be viewed
	'      through a PDF reader application only.
	'      (Valid only if not exporting to PDF/A-1,
	'      e.g. SelectPdfVersion not set to 1). 
	'  2 = The PDF will be exported in order to be viewed through an Internet browser,
	'      using the PDF plug-in provided with it. The bookmark of the URI will be rendered
	'      compatible with the target bookmark generated with OOo PDF Export feature
	'      (see ExportBookmarksToPDFDestination, below).
	ExportFilter(1).Value  = 0
	
	ExportFilter(2).Name   = "InitialView"
	' Specifies how the PDF document should be displayed when opened:
	'  0 = Select the default viewer mode, neither outlines or thumbnails. 
	'  1 = The document is opened with outline pane opened 
	'  2 = The document is opened with thumbnail pane opened
	ExportFilter(2).Value  = 0
	
	ExportFilter(3).Name   = "CenterWindow"
	' Specifies that the PDF viewer window is centered to the screen:
	ExportFilter(3).Value  = True
	
	ExportFilter(4).Name   = "ResizeWindowToInitialPage"
	' Specifies that the PDF viewer window is opened full screen when the document is opened.
	ExportFilter(4).Value  = False
	
	ExportFilter(5).Name   = "InitialPage"
	' Specifies the page on which a PDF document should be opened in the viewer application:
	ExportFilter(5).Value  = 1
	
	ExportFilter(6).Name   = "PageLayout"
	' Specifies the page layout to be used when the document is opened. 
	'  0= Display the pages according to the reader configuration. 
	'  1= Display one page at a time. 
	'  2= Display the pages in one column. 
	'  3= Display the pages in two columns odd pages on the right,
	'     to have the odd pages on the left the "FirstPageOnLeft" property
	'     should be used as well.
	ExportFilter(6).Value  = 0 
	
	ExportFilter(7).Name   = "FirstPageOnLeft"
	' Used with the value 3 of the "PageLayout" property above.
	' TRUE if the first page (odd) should be on the left side of the screen.
	ExportFilter(7).Value  = True
	
	ExportFilter(8).Name   = "IsSkipEmptyPages"
	' Specifies that automatically inserted empty pages are suppressed.
	' This option is active only if storing Writer documents:
	ExportFilter(8).Value  = True
	
	ExportFilter(9).Name   = "UseTransitionEffects"
	' Specifies slide transitions are exported to PDF.
	' This option is active only if storing Impress documents:
	ExportFilter(9).Value  = True
	
	ExportFilter(10).Name  = "Magnification"
	' Specifies the action to be performed when the PDF document is opened. 
	'  0= Opens with default zoom magnification. 
	'  1= Opens magnified to fit the entire page within the window. 
	'  2= Opens magnified to fit the entire page width within the window. 
	'  3= Opens magnified to fit the entire width of its boundig box within the window (cuts out margins). 
	'  4= Opens with the zoom level specified in the Zoom property.
	ExportFilter(10).Value = 0
	
	ExportFilter(11).Name  = "Zoom"
	' Specifies the zoom level a PDF document is opened with.
	' Only valid if "Magnification" is set to "4".
	ExportFilter(11).Value = 100
	
	ExportFilter(12).Name  = "DisplayPDFDocumentTitle"
	' Specifies that the title of the document (if present in the document properties)
	' is displayed in the PDF viewer window title bar.
	ExportFilter(12).Value = True
	
	ExportFilter(13).Name  = "HideViewerMenubar"
	' Specifies whether to hide the PDF viewer menubar when the document is active:
	ExportFilter(13).Value = True
	
	ExportFilter(14).Name  = "HideViewerToolbar"
	' Specifies whether to hide the PDF viewer toolbar when the document is active:
	ExportFilter(14).Value = True
	
	ExportFilter(15).Name  = "HideViewerWindowControls"
	' Specifies whether to hide the PDF viewer controls when the document is active:
	ExportFilter(15).Value = False
	
	ExportFilter(16).Name  = "OpenBookmarkLevels"
	'Specifies how many bookmark levels should be opened in the reader application.
	'  -1        =  all bookmark levels are opened 
	'   1 to 10  =  indicate a bookmark level (from 1 to 10) 
	ExportFilter(16).Value = -1

	' ------------------------ L I N K  - B E H A V I O U R -------------------------
	
	ExportFilter(17).Name  = "ExportBookmarksToPDFDestination"
	' Specifies that the bookmarks contained in the source file
	' should be exported to the PDF file as Named Destination:
	ExportFilter(17).Value = False
	
	ExportFilter(18).Name  = "ExportLinksRelativeFsys"
	' Specifies that the file system related hyperlinks (file:// protocol)
	' present in the document will be exported as relative to the source document location:
	ExportFilter(18).Value = True
	
	ExportFilter(19).Name  = "ConvertOOoTargetToPDFTarget"
	' Specifies that the target documents with .od[tpgs] extension,
	' will have that extension changed to .pdf when the link is exported to PDF.
	' The source document remains untouched.
	ExportFilter(19).Value = True

	' ------------------------- P A S S W O R D - S E T S ---------------------------
	
	ExportFilter(20).Name  = "DocumentOpenPassword"
	' Contains the Password that allows the user
	' to open the PDF file (only if "EncryptFile" is set to TRUE)
	ExportFilter(20).Value = OpenPassword
	
	ExportFilter(21).Name  = "EncryptFile"
	' If set to TRUE, it selects to encrypt the PDF document with a password.
	' The PDF file can be opened only when the user enters the correct password.
	ExportFilter(21).Value = SetEncrypt
	
	
	ExportFilter(22).Name  = "PermissionPassword"
	' Contains the Password that allows the user
	' to access some permissions restricted only if "RestrictPermissions" is set to TRUE:
	ExportFilter(22).Value = PermitPassword
	
	ExportFilter(23).Name  = "RestrictPermissions"
	' If set to TRUE, selects to restrict some permissions.
	' The permissions can be changed only when the user enters the correct password.
	ExportFilter(23).Value = SetRestricts

	' -------------------------- P E R M I S S I O N S ------------------------------	
	
	ExportFilter(24).Name  = "EnableCopyingOfContent"
	' Specifies that the pages and the document content
	' can be extracted to be used in other documents (copy and paste)
	ExportFilter(24).Value = False
	
	ExportFilter(25).Name  = "Printing"
	' Printing allowed from the document:
	'  0 = The document cannot be printed. 
	'  1 = The document can be printed at low resolution only. 
	'  2 = The document can be printed at maximum resolution.
	ExportFilter(25).Value = 1
	
	ExportFilter(26).Name  = "Changes"
	' Changes allowed to the document: 
	'  0 = The document cannot be changed. 
	'  1 = Inserting deleting and rotating pages is allowed. 
	'  2 = Filling of form field is allowed. 
	'  3 = Both filling of form field and commenting is allowed. 
	'  4 = All the changes of the previous selections are permitted,
	'      with the only exclusion of page extraction (copy).
	ExportFilter(26).Value = 0
	
	ExportFilter(27).Name  = "ExportNotes"
	' Specifies if notes are exported to PDF:
	ExportFilter(27).Value = False
	
	ExportFilter(28).Name  = "ExportBookmarksToPDFDestination"
	' Specifies if notes pages are exported to PDF.
	' (Notes pages are available in Impress documents only).
	ExportFilter(28).Value = False
	
	ExportFilter(29).Name  = "ExportFormFields"
	' Specifies whether form fields are exported as widgets
	' or only their fixed print representation is exported.
	ExportFilter(29).Value = False
	
	ExportFilter(30).Name  = "EnableTextAccessForAccessibilityTools"
	' Document content can be extracted to be used in accessibility applications.
	ExportFilter(30).Value = False
	
	ExportFilter(31).Name  = "IsAddStream"
	' Specifies that a stream is inserted to the PDF file
	' which contains the original document for archiving purposes. 
	' (This option is active only if the PDF Import extension is installed):
	ExportFilter(31).Value = False
	
	If WatermarkText <> "" Then
		ExportFilter(32).Name  = "Watermark"
		' Specifies the text for a watermark to be drawn on every page of the exported PDF file.
		ExportFilter(32).Value = WatermarkText
	EndIf

	' -------------------- PUT PROPERTIES TO THE PDF-DOCUMENT ------------------------

	PdfProperty(0).Name  = "URL"
	PdfProperty(0).Value = TargetFile
	PdfProperty(1).Name  = "FilterName"
	PdfProperty(1).Value = "writer_pdf_Export"
	PdfProperty(2).Name  = "FilterData"
	PdfProperty(2).Value = ExportFilter
	
	' Export the customized PDF-Document:
	Dispatcher.executeDispatch(oDoc, ".uno:ExportDirectToPDF", "", 0, PdfProperty())

End Sub

Philip Rhoades
Beiträge: 1
Registriert: Di, 23.04.2013 16:07

Re: [gelöst] PDF-Datei signieren

Beitrag von Philip Rhoades »

ejomi,

Thanks for that script! - Is it possible to have this script run automatically when the ODT file is saved?

Regards,

Phil.

Antworten