2017-02-06 1 views
0

Google App Engine에서 앱을 실행 중입니다.app-engine - java에서 GCS의 pdf 파일을 가져 오는 방법

google-cloud-storage의 pdf 파일에서 txt를 가져 오려고합니다. 나는 그것이을 성공 로컬 내 코드를 실행할 수 있지만에서 appengine에서 실행 때 여기

org.pdfbox.exceptions.WrappedIOException에 실패 할 때

내 코드입니다 :

import com.google.cloud.storage.*; 
import org.pdfbox.pdfparser.PDFParser; 
import org.pdfbox.pdmodel.PDDocument; 
import org.pdfbox.util.PDFTextStripper; 


public class Download { 

    public static String perform(String bucket, String file) throws IOException { 
     byte[] fileByte = download(bucket, file); 
     String pdfFileTxt = pdf2txt(fileByte); 
     return pdfFileTxt; 

    } 

    public static byte[] download(String bucketName, String fileId) throws IOException { 
     Storage storage = StorageOptions.getDefaultInstance().getService(); 
     BlobId blobId = BlobId.of(bucketName, fileId); 
     Blob blob = storage.get(blobId); 
     return blob.getContent(); 
    } 

    public static String pdf2txt(byte[] byteArr) throws IOException { 
     InputStream stream = new ByteArrayInputStream(byteArr); 
     PDFParser parser = new PDFParser(stream); 
     parser.parse(); 
     PDDocument pdDoc = new PDDocument(parser.getDocument()); 
     return new PDFTextStripper().getText(pdDoc); 
    } 
} 

코드가 org.pdfbox.exceptions.WrappedIOExceptionparser.parse(); 실패 - 다른 메시지가 추가되었습니다. (

스토리지에서 다운로드 - 실제로 성공합니다. 데이터를 로그하면 다음과 같이 표시됩니다 :

%PDF-1.3 
%���� 
7 0 obj 
<</Linearized 1/L 7945/O 9/E 3524/N 1/T 7656/H [ 451 137]>> 
endobj 

13 0 obj 
<</DecodeParms<</Columns 4/Predictor 12>>/Filter/FlateDecode/ID[<4DC91A1875A6D707AEC203BB021C93A0><F6C92B368A8A13408457A1D395A37EB9>]/Index[7 21]/Info 6 0 R/Length 52/Prev 7657/Root 8 0 R/Size 28/Type/XRef/W[1 2 1]>>stream 
h�bbd``b`� ��H0� 6G ��#�4�,#��Ɲ_ L�� 
endstream 
endobj 
startxref 
0 
%%EOF 
... more ... 

이제이 문제를 극복 할 수 있습니까? 어쩌면 다른 라이브러리를 사용할 것인가? 코드가 appengine에서 실행되기 때문에 이러한 오류를 추적하는 것은 매우 어렵습니다.

+0

가능한 복제 [다운로드 pdf 파일 및 애플리케이션 엔진에 구글 클라우드 스토리지에서 TXT를 얻을] (http://stackoverflow.com/questions/42071045/download- pdf 파일 및 Google TXT에서 Google 클라우드 스토리지 온 앱 엔진) – Aaron

답변

0

PdfBox does not run on GAE. 허용되지 않은 Java 클래스를 사용합니다.

주위를 해결하면 수정 된 pdfbx jar를 다운로드 할 수 있습니다. 감사합니다 icyerasor의 answer 및 지침을 사용하여 these. 여기

전체 명령어입니다

다운로드이 folder 이제 CD 프로젝트 dirctory에 다음과 같은 명령을 실행

mkdir local-maven-repo 

합니다.

mvn deploy:deploy-file -DgroupId=org.apache.pdfbox -DartifactId=pdfbox -Dversion=1.8.0-SNAPSHOT -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=/your/path/to/download/directory/pdfbox-GAE/pdfbox-1.8.0-SNAPSHOT.jar 

. 프로젝트에서 치어의

mvn deploy:deploy-file -DgroupId=org.apache.pdfbox -DartifactId=fontbox -Dversion=1.8.0-SNAPSHOT -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=/your/path/to/download/directory/pdfbox-GAE/dependencies/fontbox-1.8.0-SNAPSHOT.jar 

추가 :
<repositories> 
    <repository> 
     <id>local-maven-repo</id> 
     <url>file:///${project.basedir}/local-maven-repo</url> 
    </repository> 
</repositories> 

지금 POM에 의존성을 편집

 <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging-api --> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging-api</artifactId> 
     <version>1.1</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging-adapters --> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging-adapters</artifactId> 
     <version>1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.pdfbox</groupId> 
     <artifactId>fontbox</artifactId> 
     <version>1.8.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.pdfbox</groupId> 
     <artifactId>pdfbox</artifactId> 
     <version>1.8.0-SNAPSHOT</version> 
    </dependency> 

.

마지막 작업 코드 :

import com.google.cloud.storage.*; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.util.PDFTextStripper; 

public class Download { 

    public static String perform(String bucket, String file) throws Exception { 
     byte[] fileByte = download(bucket, file); 
     String pdfFileTxt = pdf2txt2(fileByte); 
     return pdfFileTxt; 
    } 

    public static byte[] download(String bucketName, String fileId) throws IOException { 
     Storage storage = StorageOptions.getDefaultInstance().getService(); 
     BlobId blobId = BlobId.of(bucketName, fileId); 
     Blob blob = storage.get(blobId); 
     return blob.getContent(); 
    } 


    public static String pdf2txt2(byte[] byteArr) throws IOException { 
     InputStream myInputStream = new ByteArrayInputStream(byteArr); 
     PDDocument pddDoc = PDDocument.load(myInputStream); 
     PDFTextStripper reader = new PDFTextStripper(); 
     String pageText = reader.getText(pddDoc); 
     pddDoc.close(); 
     return pageText; 
    } 
} 
관련 문제