1

PdfSigIncMemDocument クラスを使用して PDF ドキュメントにデジタル署名するために、podofo 0.9.3 ライブラリを使用しています。問題なく PDF にデジタル署名できますが、出力される PDF ファイルのサイズが非常に大きくなります。

これが私のコードです

    PdfSigIncMemDocument    doc("e:\\sample.pdf");
    char                    *buffer = NULL;
    buffer = (char *)malloc(809600);
    PdfOutputDevice         output(buffer, 809600);
    PdfSignOutputDevice     signOutput(&output);
    signOutput.SetSignatureSize(2048);
    printf( "Page count:%d\n", doc.GetPageCount());

    PdfSigIncSignatureField *sign = doc.GetSignatureField();
    sign->SetSignatureDate(PdfDate());
    sign->SetSignatureReason(L"I dont agree");
    sign->SetSignatureImage("e:\\sign.jpg", 0, 100, 200, 100, 100);
    sign->SetSignatureText(L"Hello World", 0, 100, 200, 100, 100, 12);
    doc.Initialize();
    doc.CreateVisualSign();
    doc.Write(&signOutput);
    printf( "Has Signature:%d\n", signOutput.HasSignaturePosition());
    char buff[809600] = {0};
    size_t len;
    BYTE *Signature = NULL;
    DWORD cbSignature = 0;

    signOutput.AdjustByteRange();
    signOutput.Seek(0);
    len = signOutput.ReadForSignature(buff, 809600);
    printf("total tbs size: %d\n", len);
    SignMessage( (BYTE *)buff, len, &Signature, &cbSignature);//Digital signing using MSCAPI
    printf("signature size: %d\n", cbSignature);
    const PoDoFo::PdfData *sig = new PoDoFo::PdfData((char *)Signature, cbSignature);
    signOutput.SetSignature(*sig);
    signOutput.Flush();

    FILE *fp = NULL;
    fp = fopen( "e:\sign.pdf", "wb" );
    fwrite( buffer, signOutput.GetLength(), 1, fp );
    fclose(fp);

sample.pdf のサイズは 31KB ですが、出力される sign.pdf のサイズは 506KB です。

誰かがこの問題を助けることができますか?

4

0 に答える 0