Java Katalon Studio从PDF文件页面截图

Java Katalon Studio从PDF文件页面截图,java,groovy,pdfbox,katalon-studio,Java,Groovy,Pdfbox,Katalon Studio,有一些PDF文件,这些页面应该被捕获到图像中,以便为文本识别器输入。它应该从所有页面截图,并保存文本内容。我使用以下脚本,但它只接受文本,并为某些pdf文件提供错误: org.codehaus.groovy.runtime.InvokerInvocationException: java.io.IOException: Error: End-of-File, expected line at com.pdf.reader.ReadPdfFromBrowser.invokeMethod(R

有一些PDF文件,这些页面应该被捕获到图像中,以便为文本识别器输入。它应该从所有页面截图,并保存文本内容。我使用以下脚本,但它只接受文本,并为某些pdf文件提供错误:

org.codehaus.groovy.runtime.InvokerInvocationException: java.io.IOException: Error: End-of-File, expected line
    at com.pdf.reader.ReadPdfFromBrowser.invokeMethod(ReadPdfFromBrowser.groovy)
    at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:50)
    at print.run(print:10)
    at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
    at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
    at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)
    at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
    at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
    at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
    at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
    at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
    at TempTestCase1578224744400.run(TempTestCase1578224744400.groovy:23)
Caused by: java.io.IOException: Error: End-of-File, expected line
    at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1124)
    at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:2603)
    at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:2574)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:219)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1222)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1122)
    at org.apache.pdfbox.pdmodel.PDDocument$load.call(Unknown Source)
    at com.pdf.reader.ReadPdfFromBrowser.PdfReaderUtil(ReadPdfFromBrowser.groovy:46)
    ... 14 more
Groovy脚本:

package com.pdf.reader

import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject

import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.checkpoint.Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testcase.TestCase
import com.kms.katalon.core.testdata.TestData
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI

import internal.GlobalVariable

import java.io.BufferedInputStream;
import java.io.File;
import java.io.RandomAccessFile;
import java.net.URL;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ReadPdfFromBrowser {

    PDDocument pdDoc;

    @Keyword
    public String PdfReaderUtil(String html, WebDriver driver){

        String pdfFileInText = "";

        Thread.sleep(5000);
        URL url = new URL(html);
        BufferedInputStream fileToParse = new BufferedInputStream(
                url.openStream());

        pdDoc = PDDocument.load(fileToParse);
        pdDoc.getClass();

        if (!pdDoc.isEncrypted()) {

            PDFTextStripperByArea stripper = new PDFTextStripperByArea();
            stripper.setSortByPosition(true);

            PDFTextStripper tStripper = new PDFTextStripper();

            pdfFileInText = tStripper.getText(pdDoc);
        }
        driver.close();
        return pdfFileInText;
    }
}
测试用例:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import internal.GlobalVariable

System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(GlobalVariable.url)
String url = driver.getCurrentUrl()

def pdf = CustomKeywords.'com.pdf.reader.ReadPdfFromBrowser.PdfReaderUtil'(url, driver)
File file = new File(GlobalVariable.fajlNev)

def lines = pdf.split("\\r?\\n");
for (String line : lines) {
    file << line;
    System.out.println(line);
}

您的输入为空或不是PDF。@TilmanHausherr:这段代码应该生成一个txt,但我不明白。您的代码还没有完成,它无法打开(声称的)PDF。你需要检查真正加载的内容。我建议您将
fileToParse
的内容复制到本地文件中,然后查看其中的内容。也许它是一个“未找到”的HTML页面而不是PDF?还是完全空了
IOUtils.copy()
可以将输入流复制到例如FileOutputStream(别忘了关闭),以便您可以查看其中的内容。(你是java新手吗?如果是,请毫不犹豫地说出来)@tilmahausherr:是的,对于这个pdf,fileToParse变量是空的。无法复制此pdf中的文本,打印功能也已禁用。这可能是个问题吗?我怎样才能修复它?空的意思是零长度。那不是PDF。PDF是一种以%PDF开头的二进制格式。您的输入为空或不是PDF。@TilmanHausherr:这段代码应该生成一个txt,但我不明白。到目前为止,您的代码还没有完成,它无法打开(声称的)PDF。你需要检查真正加载的内容。我建议您将
fileToParse
的内容复制到本地文件中,然后查看其中的内容。也许它是一个“未找到”的HTML页面而不是PDF?还是完全空了
IOUtils.copy()
可以将输入流复制到例如FileOutputStream(别忘了关闭),以便您可以查看其中的内容。(你是java新手吗?如果是,请毫不犹豫地说出来)@tilmahausherr:是的,对于这个pdf,fileToParse变量是空的。无法复制此pdf中的文本,打印功能也已禁用。这可能是个问题吗?我怎样才能修复它?空的意思是零长度。那不是PDF。PDF是以%PDF开头的二进制格式。