2016-08-03 9 views
0

. 구현을 위해 struts2을 사용합니다. 나는 그것을 생성 pdf을 수행하고 자바에서 모든 것을 함께 docx 파일을 채우고,이 https://github.com/opensagres/xdocreport/wiki/DocxReportingStruts2생성 된 PDF를 웹 응용 프로그램 디렉토리 [xdocreport]에 저장하는 방법? 내가 <strong><code>*.docx</code></strong> 파일에서 <strong><code>pdf</code></strong> 문서를 생성하기 위해 <strong><code>xdocreport</code></strong>을 사용하고

나는 그것이 제대로 작동해야합니까 따랐다.

내 문제는 :주기가 완료되면 생성 된 파일을 사용자에게 직접 다운로드하여 다운로드하도록합니다. 따라서 xdocreport이 모든 것을 생성하면 사용자의 브라우저에서 다운로드를 시작합니다.

대신, 나는 pdf는 웹 응용 프로그램에서 [또는 같은 드라이브에 별도의 폴더에] 디렉토리에 저장 한 다음 거기에서 나는 그가 그것을 다운로드하고자하는 경우 사용자에게 묻고 싶다 또는 생성하려면 아니, 그가 예를 클릭하면 다운로드하십시오. 또한, 나는 pdf 문서의 백업을 생성해야하므로, 어떻게 든 먼저 생성하고 웹 응용 프로그램 [또는 동일한 드라이브의 별도 폴더] 폴더에 저장 한 다음 사용자에게 제공해야합니다.

어떻게 동작을 변경할 수 있습니까? [답변을 아래에 기반]

EDIT1 :

그래서 지금은이 예외를 throw하지만, 그것을 던져 비록 내가 브라우저에 표시된 변환 된 PDF 파일을 볼 수 있지만 PDF 문서 자체를 열 수 없습니다, 파일 시스템에서 생성됩니다.

* ERROR 2016-08-04 09:33:16,079 ExceptionConverter: org.eclipse.jetty.io.EofException (XWPF2PDFViaITextConverter.java [qtp559888791-19]) 
* ERROR 2016-08-04 09:33:16,096 Error while executing action (ExceptionInterceptor.java [qtp559888791-19]) 
fr.opensagres.xdocreport.converter.XDocConverterException: org.apache.poi.xwpf.converter.core.XWPFConverterException: ExceptionConverter: org.eclipse.jetty.io.EofException 
at  fr.opensagres.xdocreport.converter.docx.poi.itext.XWPF2PDFViaITextConverter.convert(XWPF2PDFViaITextConverter.java:72) 
at fr.opensagres.xdocreport.document.AbstractXDocReport.convert(AbstractXDocReport.java:713) 
at org.apache.struts2.views.xdocreport.AbstractXDocReportResult.doProcessReportWithConverter(AbstractXDocReportResult.java:561) 
at org.apache.struts2.views.xdocreport.AbstractXDocReportResult.doExecute(AbstractXDocReportResult.java:284) 
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191) 
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:369) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:273) 
+0

웹 응용 프로그램 디렉토리에 아무것도 저장하는 것은 끔찍한 생각입니다. 확장되지 않은 WAR 파일이 부족한 경우 웹 응용 프로그램 디렉토리가 없습니다. 디스크에 저장해야하는 경우 시스템 등록 정보 java.io.tmpdir을 사용하고 배치에서 올바르게 설정되어 있는지 확인해야합니다. @ YimGarrison, –

+0

동의합니다. 같은 드라이브에 별도의 폴더를 만들 수도 있지만 질문은 동일하게 유지됩니다. 어떻게하면'xdoxreport'의 동작을 변경하여 생성 된 파일을 서버 측에 먼저 저장할 수 있습니까? – Daler

답변

1

링크를 제공 한 페이지에서 확인할 수 있듯이 param download를 false로 설정하면 다운로드가 비활성화됩니다.

<action name="DisplayProject" class="example.DisplayProject"> 
    <result name="success" type="xdocreport"> 
    <param name="location">/docx/DocxProjectWithVelocityList.docx</param> 
    <param name="templateEngine">Velocity</param> 
    <param name="fieldAsList">developers.Name,developers.LastName</param> 
    <param name="download">false</param> 
</result> 
및 웹 응용 프로그램 폴더에 파일을 저장, 난 당신이

public void populateContext(IXDocReport report, IContext context) 
     throws Exception { 
context.put("project", getProject()); 
context.put("developers", getDevelopers()); 

try (FileOutputStream fOut = new FileOutputStream(servletContext.getRealPath("/") + "filename")) { 
    report.process(context, fOut); 
} catch (Exception e) { 
    // Handle exception 
} 

}

그냥 가정을 테스트 할 수없는 것 같아요.

+0

thx. 지금 EofException지고 있어요 .. 내 게시물을 업데이 트되었습니다. – Daler

+0

전체 예외입니까? 여전히 파일을 브라우저로 보냅니 까? –

+0

아니요, 다운로드 할 때 브라우저로 보내지 않습니다. 그냥 브라우저에서 연 파일을 보여줍니다, 그리고 또한 생성 된 PDF 파일을 가지고 있고 그것을 열 수 있습니다.그래서, 지금은 작동하지만, 어떤 이유로 20-30 초후에 작업이 완료되면이 예외가 throw됩니다. – Daler