【问题标题】:Save an image present in PDF on local File System将 PDF 格式的图像保存在本地文件系统上
【发布时间】:2017-10-30 11:20:26
【问题描述】:

这是我第一次使用 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       
}

错误

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

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

其他信息:

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

【问题讨论】:

  • objImages 是什么类型? XObject 并不总是图像 XObject。而 write2file 在 PDXObjectImage 类中。
  • @TilmanHausherr 感谢您为我指明正确的方向。似乎每当 xobject 的子类型为 PDXObjectForm 时,我们都会收到该错误。我为仅包含 PDPixelMapPDJpeg 的其他 PDF 文件执行了我的代码,它运行良好。它能够将图像保存在文件系统上。您能否将其发布为答案。另外,你能告诉我一种保存子类型PDXObjectForm的Xobjects的方法吗?

标签: pdf pdfbox jscript testcomplete


【解决方案1】:

XObjects 并不总是图像 XObjects。 write2file 在 PDXObjectImage 类中,所以你需要先检查你的对象类型。

关于评论中提出的第二个问题:表单 XObject 不是您可以保存的东西。 XObject 表单是具有资源等的内容流,类似于页面。但是,您可以做的是探索这些资源是否有图像。在 PDFBox 1.8 的ExtractImages source code 中查看这是如何完成的。

但是还有其他地方可以存在图像(例如图案、软蒙版、内嵌图像);这仅在 PDFBox 2.* 中可用,请参阅那里的ExtractImages source code。 (注意类名不同)。

【讨论】:

  • 感谢您提供此信息。这真的很有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2017-12-16
  • 2021-04-05
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多