0

新しく生成された pdf (itext を使用) を添付ファイルとして Lotus Notes メールの本文に直接ストリーミングしようとしています。しかし、バイトからメールの本文を設定しているときに次のエラーが発生します

"com.ibm.jscript.types.GeneratedWrapperObject$StaticField incompatible with com.ibm.jscript.types.FBSValue"

以下は私の完成したコードです(xpageのボタンに配置されています)。どんな助けでも大歓迎です

    session.setConvertMIME(false);

outputStream:java.io.ByteArrayOutputStream = new java.io.ByteArrayOutputStream();
writePdf(outputStream);
var bytes = outputStream.toByteArray();
var inputStream:java.io.ByteArrayInputStream = new java.io.ByteArrayInputStream(bytes);

var db:NotesDatabase= session.getDatabase("","mail.box")

if (!db.isOpen()) {
    print ("No mailbox!")
}
else
{
    var doc:NotesDocument=db.createDocument()
    doc.replaceItemValue("Form","Memo")
    doc.replaceItemValue("From",context.getUser().getCommonName())
    doc.replaceItemValue("Principal",context.getUser().getCommonName())
    doc.replaceItemValue("SendTo","a@b.com");
    doc.replaceItemValue("Recipients","a@b.com");
    doc.replaceItemValue("CopyTo","a@b.com");

    doc.replaceItemValue("INetFrom","b@c.com");
    var strFileName="temp.pdf"

    var body:NotesMIMEEntity = doc.createMIMEEntity('Body');
    var hdr:NotesMIMEHeader = body.createHeader("Subject");
    hdr.setHeaderValAndParams("Subject")
    hdr=body.createHeader("MIME-Version")
    hdr.setHeaderValAndParams("1.0")
    body.setPreamble("multipart message in MIME")

    var child1:NotesMIMEEntity= body.createChildEntity()

    hdr = child1.createHeader("Content-Disposition")
    hdr.setHeaderValAndParams('attachment; filename="test.pdf"')
    var stream:NotesStream = session.createStream();
    stream.setContents(inputStream)
    child1.setContentFromBytes(stream, "application/pdf", body.ENC_IDENTITY_BINARY)
    child1.encodeContent(body.ENC_BASE64)
    doc.closeMIMEEntities(true,"Body")

    doc.save(true, true);
    // Restore conversion
    session.setConvertMIME(true);       
}
    function writePdf(outputStream) {

    var document:com.itextpdf.text.Document = new com.itextpdf.text.Document();
    var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(document,outputStream);

    document.open();

    document.addTitle("Test PDF");
    document.addSubject("Testing email PDF");
    document.addKeywords("iText, email");
    document.addAuthor("Author");
    document.addCreator("Creator");

    var passChunk:com.itextpdf.text.Chunk = new com.itextpdf.text.Chunk("Hello");   
    document.add(new com.itextpdf.text.Paragraph(passChunk));

    document.close();
}
4

1 に答える 1

1

おそらく、小さな Java ラッパー クラスを作成する方がよいでしょう。まず、次のものが必要です。

   var stream:NotesStream = session.createStream();
   stream.setContents(inputStream);
   stream.setPosition(0);

したがって、ストリームは先頭にあります。

更新
また、次のものがあります:
var bytes = outputStream.toByteArray();
var inputStream:java.io.ByteArrayInputStream = new java.io.ByteArrayInputStream(bytes); stream.setContents(inputStream);

私が書くところ:

   var bytes = outputStream.toByteArray();
   stream.write(bytes);

それでも、Java でヘルパーを作成します。

注: iText は GPL ライセンスです。作成するアプリケーションが内部使用のみでない限り、商用ライセンスを購入するか、コードも GPL にする必要があります。別の方法については、Apache PDFBoxを参照してください。

于 2013-07-25T08:35:56.383 に答える