2017-10-30 2 views
1

Dies ist meine erste Erfahrung mit PDFBox-JAR-Dateien. Außerdem habe ich kürzlich mit der Arbeit an TestComplete begonnen. Kurz gesagt, all diese Dinge sind neu für mich und ich habe mich in den letzten paar Stunden an ein Thema gehalten. Ich werde versuchen, so viel wie möglich zu erklären. Würde wirklich jede Hilfe zu schätzen wissen!Speichern Sie ein im PDF-Format vorhandenes Bild im lokalen Dateisystem

Ziel:

Um

Ausgabe ein Bild in einer PDF-Datei auf dem Dateisystem zu speichern:

Wenn diese Linie objImage.write2file_2(strSavePath); ausgeführt wird, erhalte ich die Fehler Object doesn't support this property or method.

I am taking some help from here

-Code:

function fn_PDFImage() 
{ 
    var objPdfFile, strPdfFilePath, strSavePath, objPages, objPage, objImages, objImage, imgbuffer; 
    strPdfFilePath = "C:\\Users\\aabb\\Desktop\\name.pdf"; 
    strSavePath = "C:\\Users\\aabb\\Desktop\\abc"; 

    objPdfFile = JavaClasses.org_apache_pdfbox_pdmodel.PDDocument.load_3(strPdfFilePath); 
    objPages = objPdfFile.getDocumentCatalog().getAllPages(); 

    //getting a page with index=1 
    objPage = objPages.get(1)   
    objImages = objPage.getResources().getXObjects().values().toArray(); 
    Log.Message(objImages.length);   //This is returning 14. i.e, 14 images 

    //getting an image with index=1 
    objImage = objImages.items(1); 
    Log.Message(typeof objImage);   //returns "Object" which means it is not null 

    //saving the image 
    objImage.write2file_2(strSavePath);  //<---GETTING AN ERROR HERE  
} 

ERROR:

enter image description here

Wenn Sie den Namen der Methode write2file_2 gestört werden, diesen Auszug aus bitte lesen der Link, den ich geteilt habe:

In Java hat der Konstruktor einer Klasse den Namen dieser Klasse. TestComplete ändert die Konstruktornamen in newInstance(). Wenn eine Klasse Konstruktoren überladen hat, benennt TestComplete sie wie newInstance, newInstace_2, newInstance_3 und so weiter.

Zusätzliche Information:

Ich habe Jar-Datei importiert (PDFBox-app-1.8.13.jar) und die Klassen in Testcomplete. Ich bin nicht sicher, ob ich hier eine andere JAR-Datei oder seine Klasse importieren muß:

enter image description here

+1

welcher Typ ist 'objImages'? XObjects sind nicht immer Image XObjects. Und write2file ist in der Klasse PDXObjectImage. –

+0

@TilmanHausinger Danke, dass Sie mich in die richtige Richtung weisen. Es scheint, dass immer, wenn das xobject vom Subtyp "PDXObjectForm" ist, wir diesen Fehler bekommen. Ich habe meinen Code für eine andere PDF-Datei ausgeführt, die nur 'PDPixelMap' oder' PDJpeg' enthielt und es funktionierte gut.Es war in der Lage, die Bilder im Dateisystem zu speichern. Könnten Sie das bitte als Antwort posten? Könnten Sie mir bitte auch eine Möglichkeit geben, die XObjekte des Untertyps 'PDXObjectForm' zu speichern? – Gurman

Antwort

1

XObjects sind nicht immer Bild XObjects. Und write2file befindet sich in der Klasse PDXObjectImage, daher müssen Sie zuerst Ihren Objekttyp überprüfen.

Re die zweite Frage in den Kommentar gestellt: die Form XObject ist nicht etwas, das Sie speichern können. XObject-Formulare sind Content-Streams mit Ressourcen usw., ähnlich wie Seiten. Was Sie jedoch tun können, ist auch diese zu erkunden, ob die Ressourcen Bilder haben. Sehen Sie, wie dies in der ExtractImages source code von PDFBox 1.8 getan wird.

Es gibt jedoch auch andere Orte, wo Bilder sein können (z. B. Muster, weiche Masken, Inline-Bilder); Dies ist nur in PDFBox 2 * verfügbar. Siehe dort ExtractImages source code. (Beachten Sie, dass die Klassennamen unterschiedlich sind).

+0

Danke für diese Information. Es war wirklich hilfreich. :) – Gurman

Verwandte Themen