ShaktisinhRathod Ответов: 0

PDF загружается с расширением txt в safari


Уважаемые Эксперты,

Используемый инструмент: Java
Шаги
1) генерировать PDF (используя jasperireport 3.6.1) java
2) Хранить На Сервере
3)применение электронной подписи хранится на сервере
4) Готов к загрузке на странице.
код ниже
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
	String newfile = (new StringBuilder("/JCN/PDF/")).append(statementType).append("/").append(jpaccno).append(cnopdfnm).append(".pdf").toString();
        OutputStream os = new FileOutputStream(newfile);               
	net.sf.jasperreports.engine.JasperPrint jasperPrint = JasperFillManager.fillReport(CNote, jasperParameter, con);
        
	exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
        exporter.setParameter(JRPdfExporterParameter.PERMISSIONS, new Integer(2068));
        exporter.exportReport();
        os.close();

        String coordinateQry = (new StringBuilder("select dg_point from doc_con where rownum=1 and doc_typ='")).append(statementType).append("' ").toString();
        rs = st.executeQuery(coordinateQry);
        rs.next();
        String coordinate = rs.getString(1);

        onlineDigitalSign(newfile, outs, coordinate);

        outs.close();
}
 public void onlineDigitalSign(String s, OutputStream outputstream, String coordinate)
    {
        try
        {
            logger.info((new StringBuilder("New File for online DG.sign...")).append(s).toString());
            BaseFont basefont = BaseFont.createFont("/usr/local/fonts/ZurichBT.TTF", "Cp1252", true);
            FontFactory.register("/usr/local/fonts/ZurichBT.TTF");
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            
		keystore.load(new FileInputStream("/mypath/sg.ks"), "prd34".toCharArray());
            
	    String s1 = (String)keystore.aliases().nextElement();
            PrivateKey privatekey = (PrivateKey)keystore.getKey(s1, "prd34".toCharArray());
            java.security.cert.Certificate acertificate[] = keystore.getCertificateChain(s1);
            PdfReader pdfreader = new PdfReader(s);
            PdfStamper pdfstamper = PdfStamper.createSignature(pdfreader, outputstream, '\0');
            PdfSignatureAppearance pdfsignatureappearance = pdfstamper.getSignatureAppearance();
            pdfsignatureappearance.setCrypto(privatekey, acertificate, null, PdfSignatureAppearance.WINCER_SIGNED);
            pdfsignatureappearance.setReason("Digitally Signed");
            pdfsignatureappearance.setLocation("in");
            String DGP[] = new String[4];
            DGP = coordinate.split(",");
            Float DGP1 = Float.valueOf(0.0F);
            Float DGP2 = Float.valueOf(0.0F);
            Float DGP3 = Float.valueOf(0.0F);
            Float DGP4 = Float.valueOf(0.0F);
            DGP1 = Float.valueOf(Float.parseFloat(DGP[0].trim()));
            DGP2 = Float.valueOf(Float.parseFloat(DGP[1].trim()));
            DGP3 = Float.valueOf(Float.parseFloat(DGP[2].trim()));
            DGP4 = Float.valueOf(Float.parseFloat(DGP[3].trim()));
            pdfsignatureappearance.setVisibleSignature(new Rectangle(DGP1.floatValue(), DGP2.floatValue(), DGP3.floatValue(), DGP4.floatValue()), 1, null);
            int i = pdfreader.getNumberOfPages();
            int j = 0;
            do
            {
                if(j > i)
                    break;
                if(++j == i)
                {
                    PdfContentByte pdfcontentbyte = pdfstamper.getOverContent(j);
                    pdfcontentbyte.beginText();
                    pdfcontentbyte.setFontAndSize(basefont, 9F);
                    pdfcontentbyte.showTextAligned(6, "This is a digitally signed ", 28F, 14F, 0.0F);
                    pdfcontentbyte.endText();
                }
            } while(true);
            HashMap hashmap = pdfreader.getInfo();
            hashmap.put("Subject", "My Statement");
            hashmap.put("Title", "My Statement");
            hashmap.put("Creator", "my name");
            hashmap.put("Producer", "my product Name");
            pdfstamper.setMoreInfo(hashmap);
            pdfstamper.close();
            logger.info("Finished.1..");
        }
        catch(Exception e)
        {
            logger.info((new StringBuilder("Exception Occured in onlineDigitalSign.....")).append(e.getMessage()).toString());
            logger.error((new StringBuilder("Exception Occured in onlineDigitalSign.....")).append(e).toString());
        }
    }


Что я уже пробовал:

мы попробовали setContentType=force-download

response. setContentType ("application / force-download");
ответ.сбросить();
response. setHeader ("Content-Disposition", " attachment;filename=CNotes. pdf");

Richard Deeming

application/force-download не является допустимым типом MIME. Вам нужно установить тип контента на application/pdf.

ShaktisinhRathod

Спасибо за ответ, ранее мы установили application / pdf, однако это не сработало, поэтому мы попробовали принудительную загрузку. браузер safari добавляет расширение". txt " в загруженный pdf-файл.

Richard Deeming

Потому что вы не указываете допустимый тип MIME.

Чтобы предотвратить открытие файла в браузере, пользователь Content-Disposition вместо этого заголовок.

ShaktisinhRathod

Еще раз спасибо за ответ,Пожалуйста, простите меня, если я отнимаю у вас больше времени ...
Я поставил тип содержимого "application/pdf", находящегося по-прежнему сохраняются проблемы.
Тем не менее, когда мы загружаем pdf-файл, он устанавливает .txt, т. е. FileName.pdf.txt"
Огромное спасибо за вашу помощь!

Richard Deeming

Попробуйте удалить response.reset(); линия, или перемещение ее перед setContentType линия.

ShaktisinhRathod

Спасибо,он работал с Safari, однако мы все еще сталкиваемся с проблемой открытия его с помощью iPhone или iPad
Мы внесли два изменения,
1) Как вы и предлагали, мы написали response.reset () перед setContentType.
2) мы использовали Applicaton/octet-stream вместо Applicaton / pdf
Огромное спасибо за помощь!

0 Ответов