Как сгенерировать PDF-файл по щелчку ссылки с выбранными данными на Java?

#java #spring #jsp #itext

#java #spring #jsp #itext

Вопрос:

У меня есть форма, которая показывает 10 идентификаторов на странице. На основе идентификатора я могу получить имя пользователя, роль, профиль и т.д. Теперь, если я выберу 5 идентификаторов, а затем нажму на ярлык с именем PRINT, он должен загрузить PDF-файл, в котором будут отображаться эти 5 идентификаторов с именами. Но, в моем случае, он ничего не печатает, или метод не получает действие и идентификатор. Нет проблем с Action или классом lblpdfgenerator. Проблема связана с функцией:

Это мой JSP :

 <s:if test="hasActionMessages()">
    <div class="alert alert-success">
        <i class="fa fa-check-square"></i>
        <s:actionmessage />             
        <s:if test="Count > 0">
            <a href="javascript:void();" id='addressLabel' class="printLbl"  onclick="PrintLabel()"
                    style="text-decoration: underline; font-weight: bolder; margin-left: 20px; color: blue;">Print
                    Label                                   
                    </a>                                        
        </s:if>                     

   <s:hidden id="docId" name="docId" value="%{docList}"></s:hidden>  
</div>

<div id="pdf-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="pdfModal" aria-hidden="true">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"
                        aria-hidden="true">Close</button>
                    <h4 class="modal-title" id="myModalLabel">Print Label</h4>
                </div>
                <div class="modal-body"  id="iframed"></div>
                <div class="modal-footer">
                 <button type="button" class="btn btn-default"
                  data-dismiss="modal">Close</button>
               </div>
            </div>
        </div>
    </div>  

function PrintLabel(){
        docId= $("#docId").val();
        /*  $.get("printlabelgenerate", {DocList : docId},  function(data) {
     $("#iframed").empty();
       $("#pdf-modal").modal('show');
      }); */
       $("#iframed").empty();
       $("#pdf-modal").modal('show');
       $("#iframed").append('<iframe src="#" width="100%" height="600px" frameborder="1" scrolling="auto" id="pdf_framesrno"></iframe>');
       $("#pdf_framesrno").attr("src","printlabelgenerate?docId="    docId);
       return false;
       } 
  

printlabelgenerate — это мое действие.

Класс действия.

 public String printLabel() throws Exception {
        lbList = new ArrayList<LabelPrint>();
        logger.info("Reached inside printLabel() method" DocList);
        String[] total= DocList.split(",");
        for (String docId : total) {
        lbPrint = userService.getPrintLabel(docId); 
                ByteArrayOutputStream bs = LblPDFGenerator.createPDF(lbPrint,docId);
                myStream== = new ByteArrayInputStream(bs.toByteArray());
                if (myStream== null) {
                    this.addActionMessage("Not Generated");
                    return INPUT;
                }
                return SUCCESS;
            }
  

Если я вызываю это так, вызывается мой метод action, следовательно. Но он ничего не загружает.

 function PrintLabel(){
        docId= $("#docId").val();
         $.get("printlabelgenerate", {DocList : docId},  function(data) {
     $("#iframed").empty();
       $("#pdf-modal").modal('show');
      }); 
       $("#iframed").empty();
       $("#pdf-modal").modal('show');
       $("#iframed").append('<iframe src="#" width="100%" height="600px" frameborder="1" scrolling="auto" id="pdf_framesrno"></iframe>');
       $("#pdf_framesrno").attr("src","printlabelgenerate?docId="    docId);
       return false;
       } 
  

Однако, если вызывать только так (комментарий выше одного) :

 $("#iframed").append('<iframe src="#" width="100%" height="600px" frameborder="1" scrolling="auto" id="pdf_framesrno"></iframe>');
       $("#pdf_framesrno").attr("src","printlabelgenerate?docId="    docId);
       return false;
       } 
  

это не попадает в мой метод печати, поскольку он не получает никакого идентификатора. Как мне заставить его загрузить PDF-файл? Что я делаю не так?

Ответ №1:

Вы пробовали использовать библиотеку просмотра документов Primefaces Extensions, есть хороший и простой пример создания программы просмотра PDF с функцией загрузки и многое другое.

Пример:

 <pe:documentViewer value="#{yourViewBean.content}" download="YourPdfFile.pdf"/>