이메일에 첨부 파일로 PDF 파일을 보내려고합니다. 나는 서버 또는 클라이언트 컴퓨터에 pdf 파일을 저장하고 싶지 않습니다. 나는 다음을 시도했다. 그러나 그것은 효과가 없습니다. 올바른 방법을 제안하십시오.grails 메일 플러그인을 사용하여 이메일에 PDF 첨부 파일을 보내십시오.
ByteArrayOutputStream bytes = pdfRenderingService.render(template: "path to template", model: [account:account])
asynchronousMailService.sendMail {
multipart true
to emailID
subject emailSubject
html emailBodyContent
attachBytes "filename.pdf", "application/pdf", bytes
}
첨부 파일로 보낼 바이트가 필요하므로 작동하지 않습니다. 그리고 ByteArrayOutputStream
은 바이트 단위의 출력을 제공하지 않습니다. 누구든지 이것에 대한 해결책을 가지고 있습니까?
시도했습니다 bytes.toByteArray()
. 하지만 다음 예외를 준 경우 :
2014-11-03/22:25:35.994 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver - MissingMethodException occurred when processing request: [GET] /morningProc/approvalPdfFR
No signature of method: [B.call() is applicable for argument types: (java.lang.String, java.lang.String, [B) values: [Approval.pdf, application/pdf, [37, 80, ...]]
Possible solutions: wait(), any(), grep(), dump(), find(), collect(). Stacktrace follows:
groovy.lang.MissingMethodException: No signature of method: [B.call() is applicable for argument types: (java.lang.String, java.lang.String, [B) values: [Approval.pdf, application/pdf, [37, 80, ...]]
Possible solutions: wait(), any(), grep(), dump(), find(), collect()
at com.crm.MultilingualEmailService$_$tt__sendEmailFormateWithAttachment_closure14$$EOuZNrCU.doCall(MultilingualEmailService.groovy:79)
at grails.plugin.mail.MailService.sendMail(MailService.groovy:39)
at MailGrailsPlugin$_configureSendMail_closure7.doCall(MailGrailsPlugin.groovy:180)
at com.crm.MultilingualEmailService$$EOuZNrCS.$tt__sendEmailFormateWithAttachment(MultilingualEmailService.groovy:74)
at com.crm.MorningProcController$$EOuZVK1N.approvalPdfFR(MorningProcController.groovy:882)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
심지어 Wkhtmltopdf 플러그인을 사용해 보았습니다. 그러나 그것은 오류를 주었다.
byte[] pdfData = wkhtmltoxService.makePdf(
view: "/morningProc/approvalPdfFR",
model: [account:accountInst],
header: "",
footer: "",
marginLeft: 20,
marginTop: 35,
marginBottom: 20,
marginRight: 20,
headerSpacing: 10
)
그러나 불행하게도 운 : 나는 다음 코드를 시도했다. 그것은 예외를 throw합니다 :
Cannot find wkhtml executable at [:] trying to make it available with the makeBinaryAvailableClosure
2014-11-04/00:50:35.985 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver - GroovyCastException occurred when processing request: [GET] /morningProc/approvalPdfFR
Cannot cast object '[email protected]' with class 'groovy.util.ConfigObject' to class 'groovy.lang.Closure' due to: groovy.lang.GroovyRuntimeException: failed to invoke constructor: public groovy.lang.Closure(java.lang.Object) with arguments: [[:]] reason: java.lang.InstantiationException. Stacktrace follows:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[email protected]' with class 'groovy.util.ConfigObject' to class 'groovy.lang.Closure' due to: groovy.lang.GroovyRuntimeException: failed to invoke constructor: public groovy.lang.Closure(java.lang.Object) with arguments: [[:]] reason: java.lang.InstantiationException
at org.wkhtmltox.WkhtmltoxService.makePdf(WkhtmltoxService.groovy:56)
at org.wkhtmltox.WkhtmltoxService.makePdf(WkhtmltoxService.groovy:35)
at com.crm.MorningProcController$$EOua5loZ.approvalPdfFR(MorningProcController.groovy:881)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
'bytes.toByteArray();을 시도하십시오. – Jens
@Jens : 작동하지 않습니다. 내 업데이트 된 질문을 참조하십시오. – user3853055
'attachBytes 'filename.pdf', 'application/pdf ", bytes' work?'비동기 메일 플러그인 1.1' 플러그인을 사용하고 있습니까? – cfrick