outputStream为Base64编码

outputStream为Base64编码

本文介绍了如何将PDF转换生成的response.outputStream为Base64编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做的一个项目,我需要为谁是出现在考试的学生一个认错卡。 PDF生成部分工作正常,但我的问题是我必须设有code我的PDF到Base64格式。我没有找到任何解决方案。我的code给出为波纹管

I am doing a project where i need to create a admit card for student who are appearing in examination. The pdf Generation part is working fine but my problem is i have to encode my pdf to Base64 format. I am not finding any solution. My code are given as bellow

   public void downloadPdf() throws IOException, DocumentException {
            System.out.println("hi i ma in");
            resultList=examinationDetailsService.readAdmitCardData();

            for(Object[]  data:resultList)
            {
                personalDetails=(PersonalDetails)data[0];
                System.out.println("name"+personalDetails.getApplicantName());
                rollNoAssign=(RollNoAssign)data[1];
                System.out.println("rollno"+rollNoAssign.getRollNo());
                examDateAssign=(ExamDateAssign)data[2];
            }
            //Converting Date
             SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
             String date = DATE_FORMAT.format(examDateAssign.getExaminationDate());
            // Get the FacesContext
            FacesContext facesContext = FacesContext.getCurrentInstance();
            // Get HTTP response
            HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
            // Set response headers
            response.reset();   // Reset the response in the first place
            response.setHeader("Content-Type", "application/pdf");  // Set only the content type
             // Open response output stream
            OutputStream responseOutputStream = response.getOutputStream();

            Document document = new Document(PageSize.A4, 0, 0, 0, 0);
            PdfWriter.getInstance(document,response.getOutputStream());
            document.open();
            PdfPTable maintable = new PdfPTable(1);
            maintable.setWidthPercentage(90);
            maintable.setSpacingBefore(0f);
            maintable.setSpacingAfter(0f);
            Paragraph ph1 = new Paragraph();
            ph1.add(new Chunk("\n\nGOVERNMENT OF ASSAM \nOFFICE OF THE ELECTRICAL LICENSING BOARD, ASSAM\n1", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.NORMAL)));
            //ph1.add(new Chunk("ST", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.NORMAL)));
            Chunk superScript = new Chunk("ST", FontFactory.getFont(FontFactory.TIMES_ROMAN, 8, Font.NORMAL));
            superScript.setTextRise(5f);
            ph1.add(superScript);
            ph1.add(new Chunk(" FLOOR, WEST END BLOCK, HOUSEFED COMPLEX,DISPUR, GUWAHATI-781006, ASSAM.", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.NORMAL)));
            ph1.add(new Chunk("\n***\n", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.BOLD)));
            ph1.add(new Chunk("\nADMIT CARD", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.BOLD)));

            PdfPCell heading1 = new PdfPCell(ph1);
            heading1.setBorder(0);
            heading1.setHorizontalAlignment(Element.ALIGN_CENTER);
            heading1.setVerticalAlignment(Element.ALIGN_CENTER);
            maintable.addCell(heading1);

            PdfPTable maintable1 = new PdfPTable(1);
            maintable1.setWidthPercentage(87);
            maintable1.setSpacingBefore(0f);
            maintable1.setSpacingAfter(0f);

            Paragraph ph2 = new Paragraph();
            ph2.add(new Chunk("\n\nShri/Smti "+personalDetails.getApplicantName()+", Roll No. "+rollNoAssign.getRollNo()+" is hereby "
                    + "allowed to appear in the examination for grant of Electrical Supervisor's Certificate of Competency "
                    + "to be held at "+ rollNoAssign.getVenue().getName()
                    + "as per schedule given below:", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.NORMAL)));
            ph2.add(new Chunk("\n\n          Viva-voce", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.BOLD)));
            ph2.add(new Chunk(" test on "+date+ " at 9 AM/12.30 PM ;", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.NORMAL)));
            ph2.add(new Chunk(" Written", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.BOLD)));
            ph2.add(new Chunk(" test on __________ at 9 AM.", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.NORMAL)));
            ph2.add(new Chunk("\n\n\nPlease bring the followings with you while coming for the said examinations:                               \n"
                    + "\n1.Original copy of Degree/Diploma/ITI Certificate/Supervisor's Certificate of Competency/"
                    + "Workmen's Permit\n\n    belonging to you and this Admit Card in original.\n"
                    + "\n2.Detail experience certificate(s) relevant to the part(s) of Supervisor's examination applied for.\n"
                    + "\n3.\n"
                    + "\n\nNB:  (a)   No alteration is allowed in the entries on this Admit Card without the authority of the Board."
                    + "\n         (b)  No expense(s) incurred by any candidate will be borne by the Board.\n\n\n", FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.NORMAL)));
            PdfPCell heading2 = new PdfPCell(ph2);
            heading2.setBorder(0);
            heading2.setHorizontalAlignment(Element.ALIGN_JUSTIFIED);
            heading2.setVerticalAlignment(Element.ALIGN_CENTER);
            maintable1.addCell(heading2);

            PdfPTable maintable2 = new PdfPTable(2);
            float[] columnWidths = new float[]{55f, 45f};
            maintable2.setWidths(columnWidths);
            maintable2.setWidthPercentage(84);
            maintable2.setSpacingBefore(0f);
            maintable2.setSpacingAfter(0f);

            Paragraph ph31 = new Paragraph();
            ph31.add(new Chunk("Details furnished by you in the application form and/or examination process are used by the Board"
                    + " for further needful, hence, if you feel any correction(s) in the same is/are required, please get those done before"
                    + " leaving the examination venue. The Board shall not be under any obligation of removing the difficulties arising later"
                    + " on out of incorrect/improper information furnished by you or non-furnishing of required ones.\n", FontFactory.getFont(FontFactory.COURIER, 10, Font.NORMAL)));
            PdfPCell heading31 = new PdfPCell(ph31);
            heading31.setBorder(15);
            heading31.setHorizontalAlignment(Element.ALIGN_JUSTIFIED);
            heading31.setVerticalAlignment(Element.ALIGN_LEFT);

            maintable2.addCell(heading31);

            Paragraph ph32 = new Paragraph();
            ph32.add(new Chunk("\n\n\n(Member Secretary)\nElectrical Licensing Board,\nAssam.", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12, Font.NORMAL)));
            PdfPCell heading32 = new PdfPCell(ph32);
            heading32.setBorder(0);
            heading32.setHorizontalAlignment(Element.ALIGN_CENTER);
            heading32.setVerticalAlignment(Element.ALIGN_CENTER);
            maintable2.addCell(heading32);

            document.add(maintable);
            document.add(maintable1);
            document.add(maintable2);
            document.close();

           /* // Read PDF contents
            URL url = new URL(PDF_URL);
            InputStream pdfInputStream = url.openStream();*/

            // Read PDF contents and write them to the output
            byte[] bytesBuffer = new byte[2048];
            int bytesRead;
           /* while ((bytesRead = pdfInputStream.read(bytesBuffer)) > 0) {
                responseOutputStream.write(bytesBuffer, 0, bytesRead);
            }
            */
            Base64 encoder = new Base64();
            byte[] decodedBytes = encoder.o

            // Make sure that everything is out
            responseOutputStream.write(decodedBytes);
            responseOutputStream.flush();

            // Close both streams
            //pdfInputStream.close();
            responseOutputStream.close();

            // JSF doc:
            // Signal the JavaServer Faces implementation that the HTTP response for this request has already been generated
            // (such as an HTTP redirect), and that the request processing lifecycle should be terminated
            // as soon as the current phase is completed.
            facesContext.responseComplete();

        }

请给我任何的解决方案。利用iText我

Please give me any solution. i using itext

推荐答案

当我看着你的code,我看到:

When I look at your code, I see:

PdfWriter.getInstance(document,response.getOutputStream());

这意味着你的iText指示为PDF字节直接写入到浏览器。这是的OutputStream收于关闭文档的时刻。

Which means that you are instructing iText to write PDF bytes straight to the browser. This outputstream is closed at the moment you close the document.

我也看到:

OutputStream responseOutputStream = response.getOutputStream();

我甚至看到你尝试添加的东西此流。这是不可能的,因为该流已关闭。

I even see that you try adding stuff to this stream. This is impossible as the stream is already closed.

您需要创建一个 ByteArrayOutputStream 是这样的:

You need to create a ByteArrayOutputStream like this:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

而在使用的 PdfWriter

PdfWriter.getInstance(document, baos);

现在,你可以得到PDF字节是这样的:

Now you can get the PDF bytes like this:

byte[] pdf = baos.toByteArray();

现在,你可以连接code这些字节,并将它们发送到输出流。

Now you can encode these bytes and send them to the output stream.

恩code:

假设你正在使用 org.apache.commons codec.binary.Base64 作为答案的 stackoverflow.com/questions/13109588/base64-encoding-in-java\">base64编码,你可以这样做:

Assuming that you are using org.apache.commons.codec.binary.Base64 as explained in the answer to base64 encoding in Java, you can do this:

byte[] base64 = Base64.encodeBase64(pdf);

(还有其他的方法可以做到这一点。)

(There are other ways to do this.)

发送到输出流:

response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
            "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(base64.length);
OutputStream os = response.getOutputStream();
os.write(base64);
os.flush();
os.close();

这篇关于如何将PDF转换生成的response.outputStream为Base64编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!