为了账号安全,请及时绑定邮箱和手机立即绑定

生成 PDF 并返回响应

生成 PDF 并返回响应

PHP
动漫人物 2022-09-24 16:07:28
今天,我遇到了一个问题,即在符号上使用KnpSnappyBundle生成PDF。我正在使用AJAX运行路由,代码工作正常,但它不会生成PDF,我想在这里完成的是在新的选项卡或窗口中生成PDF,并向客户端返回成功的消息。这是我的代码: /** * @Route("/api/release_bills/{month}/{year}/{region}", name="api_print_bills", methods={"GET","POST"}) * @param BillRepository $billRepository * @param ConsumptionRepository $consumptionRepository * @param Request $request * @param Snappy $snappy * @param $month * @param $year * @param $region * @return Response * @throws Exception */public function releaseBills(BillRepository $billRepository,ConsumptionRepository $consumptionRepository, Request $request, Snappy $snappy,  $month,$year,$region ): Response{    $error = array();    $success = array();    if( $month>0 && $month<13 || preg_match("/^\d{4}$/",$year)||$region!=''){        if($year>=2018 && $year <=2050){            $entityManager = $this->getDoctrine()->getManager();                $bills = $consumptionRepository->findAllWaterMetersForBilling($month,$year,$region);                $isBillsExisted = $billRepository->findAllBillsByDate($month,$year,$region);                if(empty($bills)){                    array_push($error,['error'=>'there is not bills to be release for this criteria : [ city: '.$region.', year :'.$year.', and Month : '.$month.'!]']);                    return new JsonResponse($error);                }                $arr = array();                $newBills = array();                $billsEnd=end($bills);                foreach ($bills as $key=>$b){                    $wmNumber =  $b->getWaterMeter()->getWmNumber();                    $fullName = $b->getWaterMeter()->getClient()->getFullName();                    $cin = $b->getWaterMeter()->getClient()->getCin();                    $address= $b->getWaterMeter()->getAddress();                    $wmAddress = $b->getWaterMeter()->getAddress()->getStreetAddress();                    $city = $b->getWaterMeter()->getAddress()->getCity();
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

可能是以后的事了,但你可以像这样尝试:


    $file = $folder . $fileName ;


    if (is_file($file)) {

        unlink($file);

    }

然后,生成并保存具有相同名称及之后的文件。不要使用,但return new PdfResponse...


$pdf->generateFromHtml($html, $folder . $file);

,然后返回响应


    $response = new JsonResponse();

    $response->setStatusCode(Response::HTTP_NOT_FOUND); // 404

    if (is_file($file)) {

        $response->setStatusCode(Response::HTTP_OK); // 200

    }


查看完整回答
反对 回复 2022-09-24
?
九州编程

TA贡献1785条经验 获得超4个赞

尝试像这样修改阿贾克斯:


$.ajax({

  url: `http://symfony.localhost/bill/api/release_bills/${monthValue.value}/${yearValue.value}/${regionValue.value}`,

  success: function(data) {

    var blob=new Blob([data]);

    var link=document.createElement('a');

    link.href=window.URL.createObjectURL(blob);

    link.download="<CHOOSE_FILENAME_WITH_EXTENSION>";

    link.click();

  }

});


查看完整回答
反对 回复 2022-09-24
?
炎炎设计

TA贡献1808条经验 获得超4个赞

在朋友的帮助下,我设法生成pdf,但我仍然不知道如何在生成Pdf时返回错误或成功消息。


这是我所做的:


generatePDF = () =>{

    const {yearValue, monthValue, regionValue}= this.state;


    var strWindowFeatures = "location=yes,height=570,width=520,scrollbars=yes,status=yes";

    var URL = `http://symfony.localhost/bill/api/release_bills/${monthValue.value}/${yearValue.value}/${regionValue.value}`;

    window.open(URL, "_blank", strWindowFeatures);

};

函数生成PDF在单击按钮上被调用


查看完整回答
反对 回复 2022-09-24
  • 3 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信