在本地文件系统

时间:2017-10-30 11:20:26

标签: pdf pdfbox jscript testcomplete

这是我第一次使用PDFBox jar文件。另外,我最近开始研究TestComplete。简而言之,所有这些对我来说都是新的,我在过去的几个小时里一直困在一个问题上。我会尽力解释。非常感谢任何帮助!

目标

保存文件系统中PDF文件中的图像

问题

当此行执行objImage.write2file_2(strSavePath);时,我收到错误Object doesn't support this property or method

I am taking some help from here

代码

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       
}

错误

enter image description here

如果您对方法名称write2file_2感到困扰,请从我分享的链接中阅读此摘录:

  

在Java中,类的构造函数具有此类的名称。   TestComplete将构造函数名称更改为newInstance()。如果一个   class有重载的构造函数,TestComplete将它们命名为   newInstance,newInstace_2,newInstance_3等等。

其他信息:

我已经在testcomplete中导入了Jar文件(pdfbox-app-1.8.13.jar)及其类。我不确定我是否需要在这里导入一些其他jar文件或其类:

enter image description here

1 个答案:

答案 0 :(得分:1)

XObjects并不总是图像XObjects。而write2file在PDXObjectImage类中,因此您需要先检查对象类型。

在评论中提到的第二个问题:XObject形式不是你可以保存的东西。 XObject表单是具有资源等的内容流,类似于页面。然而,你可以做的是探索资源是否有图像。了解如何在PDFBox 1.8的ExtractImages source code中完成此操作。

然而,还有其他可以存在图像的地方(例如图案,软掩模,内嵌图像);这仅适用于PDFBox 2. *,请参阅ExtractImages source code。 (注意,类名不同)。