@sasuke22

Вопрос по работе с FileOutputStream и ByteArrayOutputStream?

Всем привет! Есть задача создать pdf с xml,исползую apache.Fop. Есть вопрос по получению pdf:
1) При FileOutputStream все ок,файл сохраняется в папке
2) При ByteArrayOutputStream получаю вот это
(Неизвестное расположение или ошибка)java.io.IOException: Stream closed
%PDF-1.4
%����
1 0 obj
<<
/Creator (Apache FOP Version 2.1)
/Producer (Apache FOP Version 2.1)
/CreationDate (D:20201110174444+06'00')
>>
endobj
2 0 obj
<<
  /N 3
  /Length 3 0 R
  /Filter /FlateDecode
>>
stream
x���wTT��Ͻwz��0�z�mz��0�z�m�:��_���C�(��C .....

public byte[] convertToPDF() throws IOException, FOPException, TransformerException {
     Test r = testRepo.findById(1L).orElseThrow(EntityExistsException::new);
        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
        // 1 OutputStream out = new FileOutputStream(OUTPUT_DIR + "//output.pdf");
        // 2 ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
            TransformerFactory factory = TransformerFactory.newInstance();
            StreamSource xslTsource = new StreamSource(new StringReader(r.getXsl()));
            Transformer transformer = factory.newTransformer(xslTsource);
            Result res = new SAXResult(fop.getDefaultHandler());
            StreamSource xmlSource = new StreamSource(new StringReader(r.getXml()));
            transformer.transform(xmlSource, res);
        } finally {
            out.close();
        }
        return out.toByteArray();
    }
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
У тебя ошибка сводится к тому, что поток закрывается раньше, чем ты запхиваешь в него данные.
Попробуй сформировать хедеры отдельно

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/pdf"));
headers.add("content-disposition", "inline; filename=" + pdfName +".pdf");


потом засунь их в response через #headers
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы