2015-05-03 9 views
11

Ich habe einen PDF-Viewer in eine C# Winform mit AxAcroPDFLib eingebettet. Die Beschriftungsschaltflächen in der Symbolleiste (Kommentare ...) sind jedoch deaktiviert. ich gesucht und gefunden, dass sie standardmäßig deaktiviert, aber einige berichteten sie mit Javascript ermöglicht:Annotation in Adobe AxAcroPDFLib aktivieren

Collab.showAnnotToolsWhenNoCollab = True 

Gibt es eine Möglichkeit, dies hier zu tun?

Bearbeiten: Ist es möglich, das Browser-Plugin in einem WebBrowser-Steuerelement zu verwenden? Wenn ja, wie kann dies getan werden?

+0

Gibt es eine Möglichkeit, JavaScript aus dem Plugin zu verwenden? – Jerry

+0

Ich hoffe, wenn jemand einen Weg finden könnte, es zu tun oder einen Workaround. – Jerry

+1

Kann das Browser-Plugin in einem WebBrowser-Steuerelement verwendet werden? Wenn ja, wie kann dies getan werden? – Jerry

Antwort

6

Update - Der erste Abschnitt ist nur für Acrobat Reader relevant. Informationen zur Verwendung vollständiger Acrobat-Versionen finden Sie im zweiten Abschnitt.

Acrobat Reader

ich all das Vorwort werde durch diese Angabe ist wahrscheinlich nicht die Antwort, die Sie suchen, aber ich fühlte, dies garantiert eine Erklärung als nur ein Kommentar.

Eine ähnliche, selbst beantwortete Frage wurde zu SO gestellt (here), wo der OP zu dem Schluss kam, dass dieses Verhalten von Entwurf ist und nichts dagegen getan werden kann, womit ich fast einverstanden bin.

Während ich sicher bin, dass der Reader selbst Anmerkungen hinzufügen kann, ist das einzige einfache Mittel, dies mit dem Reader Plugin (AcroPDFLib) zu erreichen, dass das geladene Dokument zu diesem Zeitpunkt "Reader Enabled" ist Annotationen werden genauso verfügbar wie in Reader. Wenn Sie die Kontrolle über die Dokumente haben, die das Plugin laden soll, kann dies eine Lösung für Sie sein.

Zu Ihrer Frage über die mögliche Einstellung Collab.showAnnotToolsWhenNoCollab = True als Workaround zeigten meine Suchen nur, dass dies eine praktikable Lösung für diejenigen ist, die eine Vollversion von Acrobat, nicht Reader verwenden. Genauer gesagt, auf einem Adobe Forum (here), kommentierte ein Adobe Mitarbeiter direkt von dieser Immobilie auf die Verwendung:

Nein, es ist nicht [etwa so dass in Adobe Reader zu kommentieren]. Es ist über das Aktivieren von Kommentaren in einem Browser für Acrobat Standard oder Professional. Wenn Sie das Kommentieren in Reader aktivieren möchten, müssen Sie die PDFs selbst mit dem Acrobat Professional oder dem Adobe Livecycle Reader Extension Server "Reader Enable" aktivieren ( ).

Zugegeben, dieser Kommentar bezieht sich auf Acrobat 9, scheint aber immer noch für Acrobat XI gültig zu sein.

Ein letztes Bit. Ich weiß nicht den Umfang Ihrer Anwendung, so dass dies völlig irrelevant sein kann, aber wenn dies eine kommerzielle Anwendung ist, auch wenn Sie eine funktionale Problemumgehung finden, würde ich zögern, es zu verwenden, da es die Adobe-Verletzung verletzen könnte Leserlizenzvertrag (here); speziell Abschnitt 4.3.3, Deaktivierte Funktionen. Die kurze Version ist, wie bei den meisten Unternehmen, sie wollen nicht, dass Sie ihren Schutz umgehen.

Vollversionen von Acrobat

Der Code folgt ein PDF-Viewer erstellen (das Fenster des Formular mit zum Zeichnen), öffnen Sie ein PDF, legen Sie dann collab.showAnnotToolsWhenNoCollab = true Anmerkungen auf dem offenen PDF zu ermöglichen. Dies erfordert einen Verweis auf die Acrobat-Typbibliothek.

void CreatePdfViewerAndOpenFile(string pdfFile) 
{ 
    short AV_DOC_VIEW = 2; 
    short PDUseBookmarks = 3; 
    short AVZoomFitWidth = 2; 

    Type AcroExch_AVDoc = Type.GetTypeFromProgID("AcroExch.AVDoc"); 
    _acroExchAVDoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcroExch_AVDoc); 
    bool ok = _acroExchAVDoc.OpenInWindowEx(pdfFile, this.Handle.ToInt32(), AV_DOC_VIEW, -1, 0, PDUseBookmarks, AVZoomFitWidth, 0, 0, 0); 

    if (ok) 
    { 
     CAcroPDDoc pdDoc = (CAcroPDDoc)_acroExchAVDoc.GetPDDoc(); 
     object jsObj = pdDoc.GetJSObject(); 
     Type jsObjType = jsObj.GetType(); 
     object collab = jsObjType.InvokeMember("collab", 
      BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, 
      null, jsObj, null); 

     jsObjType.InvokeMember("showAnnotToolsWhenNoCollab", 
      BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, 
      null, collab, new object[] { true }); 
    } 
} 

Rufen Sie diese Methode von wo immer Sie das PDF anzeigen möchten. Wenn Sie fertig sind, rufen Sie die Methode Close auf oder die PDF-Datei bleibt im Acrobat-Prozess im Hintergrund geöffnet.

_acroExchAVDoc.Close(-1); 

Beachten Sie, dass viele „normale“ Funktionalität wird aus diesem Beispiel links, wie Form Resize Handhabung usw., aber es sollte Ihnen den Einstieg. Da die Größenanpassung in diesem Beispiel nicht behandelt wird, möchten Sie wahrscheinlich das Formular maximieren, bevor Sie die Methode aufrufen, sodass der Viewer groß genug ist, um nützlich zu sein. Laden Sie das Acrobat SDK (here) herunter und schauen Sie sich das ActiveViewVB-Beispielprojekt an, das ich für einige Beispiele verwendet habe, um weitere Informationen zur Verwendung des Viewers auf diese Weise zu erhalten. Als Referenz habe ich das Acrobat XI SDK verwendet.

+0

Danke, aber ich habe die Vollversion von Acrobat, und ich bin immer noch nicht in der Lage, es zur Arbeit zu bringen. Vielleicht ist es nur in der Web-Plugin-Version verfügbar, aber ich weiß nicht, wie man das benutzt. – Jerry

+0

Vielen Dank. Dies ist sehr nützlich. Ich kann jetzt Anmerkungen verwenden. Aber es gibt immer noch einige Probleme: 1. Die Schaltfläche zum Speichern in der Symbolleiste ist deaktiviert, auch nach dem Hinzufügen von Annotationen. 2. Die Größe der Symbolleistenschaltflächen (und alles andere) ist viel größer als in Adobe Acrobat (sieht anders aus als der Desktop). Beide Probleme werden im angehängten Bild gezeigt: http://oi57.tinypic.com/2vxfzvb.jpg. Ich benutze Adobe Acrobat DC. – Jerry

+0

Ich versuchte auf einem anderen Computer mit Adobe Acrobat Pro 9. Der letzte InvokeMember stürzt mit Fehler "System.Runtime.InteropServices.COMException (0x80010105) ab: Der Server hat eine Ausnahme ausgelöst. (Ausnahme von HRESULT: 0x80010105 (RPC_E_SERVERFAULT))", und Die Ereignisanzeige zeigt Fehler in den Modulen annots.api und escript.api. – Jerry