0

我正在使用 gRPC 从客户端到服务器进行通信。我正在使用异步问候语示例。当客户端向服务器发送消息时,我希望服务器创建一个 PDF 文件。我有一个名为 makefile() 的函数,它将创建 pdf 文件。我目前在 Proceed() 函数中调用它。这是一个称呼它的好地方吗?我的代码在大多数情况下都有效,但有时当我将消息发送到服务器时,服务器不会生成文件。例如,如果我尝试 10 次,服务器可能只会生成 8 个文件。它应该是 10。我也可以把 makefile() 函数放在一个线程中吗?我添加了 makefile() 代码。我正在使用 Libharu pdf 库。

    void Proceed() {
      if (status_ == CREATE) {
        // As part of the initial CREATE state, we *request* that the system
        // start processing SayHello requests. In this request, "this" acts are
        // the tag uniquely identifying the request (so that different CallData
        // instances can serve different requests concurrently), in this case
        // the memory address of this CallData instance.
        service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,

        status_ = PROCESS;
      } else if (status_ == PROCESS) {


        new CallData(service_, cq_);

        // The actual processing.
        std::string prefix("Hello ");
        makefile() // function to make pdf file
        reply_.set_message(prefix + request_.name());

        .
        responder_.Finish(reply_, Status::OK, this);
        status_ = FINISH;
      } else {
        GPR_ASSERT(status_ == FINISH);

        delete this;
      }
    }
  }






   makefile()
    {
     const char *page_title = "Font Demo";
HPDF_Doc  pdf;
char fname[256];
HPDF_Page page;
HPDF_Font def_font;
HPDF_REAL tw;
HPDF_REAL height;
HPDF_REAL width;
HPDF_UINT i;

strcpy (fname, argv[0]);
strcat (fname, ".pdf");

pdf = HPDF_New (error_handler, NULL);
if (!pdf) {
    printf ("error: cannot create PdfDoc object\n");
    return 1;
}

if (setjmp(env)) {
    HPDF_Free (pdf);
    return 1;
}

/* Add a new page object. */
page = HPDF_AddPage (pdf);

height = HPDF_Page_GetHeight (page);
width = HPDF_Page_GetWidth (page);

/* Print the lines of the page. */
HPDF_Page_SetLineWidth (page, 1);
HPDF_Page_Rectangle (page, 50, 50, width - 100, height - 110);
HPDF_Page_Stroke (page);

/* Print the title of the page (with positioning center). */
def_font = HPDF_GetFont (pdf, "Helvetica", NULL);
HPDF_Page_SetFontAndSize (page, def_font, 24);

tw = HPDF_Page_TextWidth (page, page_title);
HPDF_Page_BeginText (page);
HPDF_Page_TextOut (page, (width - tw) / 2, height - 50, page_title);
HPDF_Page_EndText (page);

/* output subtitle. */
HPDF_Page_BeginText (page);
HPDF_Page_SetFontAndSize (page, def_font, 16);
HPDF_Page_TextOut (page, 60, height - 80, "<Standerd Type1 fonts samples>");
HPDF_Page_EndText (page);

HPDF_Page_BeginText (page);
HPDF_Page_MoveTextPos (page, 60, height - 105);

i = 0;
while (font_list[i]) {
    const char* samp_text = "abcdefgABCDEFG12345!#$%&+-@?";
    HPDF_Font font = HPDF_GetFont (pdf, font_list[i], NULL);

    /* print a label of text */
    HPDF_Page_SetFontAndSize (page, def_font, 9);
    HPDF_Page_ShowText (page, font_list[i]);
    HPDF_Page_MoveTextPos (page, 0, -18);

    /* print a sample text. */
    HPDF_Page_SetFontAndSize (page, font, 20);
    HPDF_Page_ShowText (page, samp_text);
    HPDF_Page_MoveTextPos (page, 0, -20);

    i++;
}

HPDF_Page_EndText (page);

HPDF_SaveToFile (pdf, fname);

/* clean up */
HPDF_Free (pdf);
    }
4

0 回答 0