Кодировка в загруженном pdf, сгенерированном itextpdf - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть веб-приложение, использующее Java 8+ Maven с затмением неоновых и угловых 2+.Сервер приложений IBM был 9.

Чтобы сделать PDF, я использую itextpdf, но по какой-то причине акценты заменяются следующим образом:

Prénom => Prà © nom

Nationalité=> Nationalità ©

Здесь угловая часть

generatePDF(obj, options) {
    return this.http.get('/pdf', options)
      .map((response: Response) => {
        const pdfBlob = response.blob();
        const blob = new Blob(['\ufeff', pdfBlob], {
          type: 'application/pdf'
        });
        const pdfName = this.pdfName.transform(obj);
        FileSaver.saveAs(blob, pdfName);
      });
  }

Как pdf отправляется отдыхом

@GET
@Path("/pdf")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response pdf(@QueryParam("id") String id) {
    ByteArrayOutputStream bos;
    try {
        bos = pdfBr.generatePdf(id);
        final ByteArrayInputStream responseStream = new ByteArrayInputStream(bos.toByteArray());
        try {
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        StreamingOutput output = new StreamingOutput() {

            @Override
            public void write(java.io.OutputStream out) throws IOException,
                    WebApplicationException {
                int length;
                byte[] buffer = new byte[1024];
                while((length = responseStream.read(buffer)) != -1) {
                    out.write(buffer, 0, length);
                }
                out.flush();
                responseStream.close();
            }
        };

        return Response.ok(output).header(
                "Content-Disposition", "attachment;filename=\"" + "pdf_" + id + ".pdf" + "\"").build();
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    } catch (DocumentException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    return Response.ok().build();

как создается pdf

@Override
public ByteArrayOutputStream generatePdf(String id)
        throws DocumentException, MalformedURLException, IOException {
    Obj obj = objDao.getObj(id);

    Document document = new Document();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
    document.open();

    PdfPTable info = new PdfPTable(new float[] { 100 });

    info.getDefaultCell().setBorder(com.itextpdf.text.Rectangle.NO_BORDER);
    info.setWidthPercentage(100);
    final Image logo = Image.getInstance(getClass().getClassLoader().getResource("/bar.png"));

    logo.scalePercent(0.75f);
    PdfPCell logoCell = new PdfPCell(logo, true);
    logoCell.setBorderWidth(0f);
    logoCell.setBorder(com.itextpdf.text.Rectangle.NO_BORDER);
    info.addCell(logoCell);

    document.add(info);

    document.add(new Phrase("\n", FontFactory.getFont(FontFactory.HELVETICA, 4, Font.BOLD)));

    PdfPTable objInfo = new PdfPTable(new float[] { 20, 15, 15, 15, 20, 15 });
    objInfo.setWidthPercentage(100);
    objInfo.getDefaultCell().setBorder(com.itextpdf.text.Rectangle.NO_BORDER);

    Font labelFont = FontFactory.getFont(FontFactory.HELVETICA, 9, Font.BOLD | Font.ITALIC);
    Font valueFont = FontFactory.getFont(FontFactory.HELVETICA, 9, Font.NORMAL);

    Font valueFontRed = FontFactory.getFont(FontFactory.HELVETICA, 9, Font.NORMAL, BaseColor.RED);

    Font valueFontGreen = FontFactory.getFont(FontFactory.HELVETICA, 9, Font.NORMAL, BaseColor.GREEN);

    objInfo.addCell(new Paragraph("Nom :", labelFont));
    objInfo.addCell(new Paragraph(obj.getLastName(), valueFont));

    objInfo.addCell(new Paragraph("Prénom :", labelFont));
    objInfo.addCell(new Paragraph(obj.getFirstName(), valueFont));

    document.close();
    pdfWriter.close();
    baos.close();

    return baos;
}

что я пробовал:

  • Изменить кодировку на utf-8 для файлов Java

  • Изменить кодировку на uft-8 для проекта

  • Изменить файл encoding.properties в 9

  • Изменить тип содержимого для затмения

1 Ответ

0 голосов
/ 25 февраля 2019

добавь эти 2 строки в свойствах pom.xml у меня работает

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...