PDF 到 bytearrayoutpustream 空白

发布于 2024-12-26 01:39:02 字数 5012 浏览 2 评论 0原文

我有一个 java 代码来创建 PDF 临时文件并将其保存到 BLOB 字段数据库中。 PDF已正确生成,并且BLOB已保存到DB中。当我重新创建 PDF 时,返回的结果没有空格字符!问题可能是 bytearrayoutputstream 的 Base64 编码。这是我的代码

public ByteArrayOutputStream generaFatturaStampaPDF(Fattura fattura) {
    try {
        Document document = new Document(PageSize.A4, 72, 72, 120, 90);

        String tempdir = System.getProperty("java.io.tmpdir");

        if ( !(tempdir.endsWith("/") || tempdir.endsWith("\\")) )
           tempdir = tempdir + System.getProperty("file.separator");

        File tempFattura = File.createTempFile("fattura",".pdf", new File(tempdir));
        tempFattura.deleteOnExit();

        setFileTempFattura(tempFattura.toString());

        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(tempFattura));
        writer.setPdfVersion(PdfWriter.VERSION_1_7);
        writer.setPageEvent(new HeaderFooter());

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter docWriter = null;
        docWriter = PdfWriter.getInstance(document, baos);
        docWriter.setPdfVersion(PdfWriter.VERSION_1_7);
        docWriter.setPageEvent(new HeaderFooter());


        document.open();
        addMetaDataFattura(document);

        Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD, BaseColor.BLACK);
        Paragraph paragrafoFattura = new Paragraph();
        paragrafoFattura.setAlignment(Element.ALIGN_CENTER);
        Chunk c = new Chunk("Fattura");
        c.setFont(catFont);
        paragrafoFattura.add(c);
        document.add(paragrafoFattura);

        intestazioneFatturaStampa(writer, fattura);
        intestazioneFatturaStampa(docWriter, fattura);
        addEmptyLine(document, 7);

        float[] widths = { 8f, 2f };
        PdfPTable table = new PdfPTable(widths);
        table.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.setWidthPercentage(100);
        table.setHeaderRows(1);

        addCenterTableHeaderBold(table, "Descrizione", true, 12);
        addCenterTableHeaderBold(table, "Totale", true, 12);

        Double somma = 0.0;
        Iterator<FatturaDettaglio> iterator = fattura.getFatturaDettaglios().iterator();
        while (iterator.hasNext()) {
            FatturaDettaglio fatturaDettaglio = iterator.next();
            somma += fatturaDettaglio.getPrezzo();
        }
        addCenterTableHeaderBoldAllignLeft(table, fattura.getFatturaDettaglios().size()
                + " Richieste di Preventivo ", false, 12);
        addCenterTableHeaderBold(table, "€ " + arrotonda(somma), false, 12);

        Iterator<CreditoDebito> iterator2 = fattura.getCreditoDebitos().iterator();
        while (iterator2.hasNext()) {
            CreditoDebito creditoDebito = iterator2.next();

            addCenterTableHeaderBoldAllignLeft(table, creditoDebito.getNote(), false, 12);
            String segno = "";
            if (creditoDebito.getTipo().equals("C")) {
                segno = "-";
                somma = somma - creditoDebito.getImporto();
            }
            if (creditoDebito.getTipo().equals("D")) {
                segno = "";
                somma = somma + creditoDebito.getImporto();
            }
            addCenterTableHeaderBold(table, "€ " + segno
                    + arrotonda(creditoDebito.getImporto()), false, 12);
        }

        document.add(table);

        addEmptyLine(document, 2);

        float[] widths1 = { 2f, 1f };
        PdfPTable table1 = new PdfPTable(widths1);
        table1.setHorizontalAlignment(Element.ALIGN_RIGHT);
        table1.setWidthPercentage(60);

        addCenterTableHeader(table1, "Totale Imponibile netto", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma), false);

        addCenterTableHeader(table1, "IVA", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma * 20 / 100), false);

        addCenterTableHeader(table1, "Totale Fattura", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma + somma * 20 / 100), false);

        document.add(table1);

        addEmptyLine(document, 2);

        paragrafoFattura.setAlignment(Element.ALIGN_LEFT);
        Chunk datiPagamento =
                new Chunk("Dettagli pagamento:\nMetodo: "
                        + fattura.getAzienda().getMetodoPagamento()
                        + "\nIBAN:  IT xx X xxxxx xxxxx xxxxxxxxxxx");
        document.add(datiPagamento);
        addEmptyLine(document, 5);
        Chunk dettagliEstrattoContoTesto =
                new Chunk(
                        "Per maggiori dettagli sulle richieste di preventivo e eventuali promozioni consultare l'estratto conto allegato");
        dettagliEstrattoContoTesto.setFont(new Font(Font.FontFamily.TIMES_ROMAN, 10,
                Font.NORMAL, BaseColor.BLACK));
        document.add(dettagliEstrattoContoTesto);
        document.close();
        docWriter.close();

        return baos;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

I've a java code to create a PDF temporary file and save it into a BLOB field DB. PDF is generated correctly, and BLOB is saved into DB. When I recreate PDF this is returned without whitespace char! Probably the problem is codification Base64 of bytearrayoutputstream. This is my code

public ByteArrayOutputStream generaFatturaStampaPDF(Fattura fattura) {
    try {
        Document document = new Document(PageSize.A4, 72, 72, 120, 90);

        String tempdir = System.getProperty("java.io.tmpdir");

        if ( !(tempdir.endsWith("/") || tempdir.endsWith("\\")) )
           tempdir = tempdir + System.getProperty("file.separator");

        File tempFattura = File.createTempFile("fattura",".pdf", new File(tempdir));
        tempFattura.deleteOnExit();

        setFileTempFattura(tempFattura.toString());

        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(tempFattura));
        writer.setPdfVersion(PdfWriter.VERSION_1_7);
        writer.setPageEvent(new HeaderFooter());

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter docWriter = null;
        docWriter = PdfWriter.getInstance(document, baos);
        docWriter.setPdfVersion(PdfWriter.VERSION_1_7);
        docWriter.setPageEvent(new HeaderFooter());


        document.open();
        addMetaDataFattura(document);

        Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD, BaseColor.BLACK);
        Paragraph paragrafoFattura = new Paragraph();
        paragrafoFattura.setAlignment(Element.ALIGN_CENTER);
        Chunk c = new Chunk("Fattura");
        c.setFont(catFont);
        paragrafoFattura.add(c);
        document.add(paragrafoFattura);

        intestazioneFatturaStampa(writer, fattura);
        intestazioneFatturaStampa(docWriter, fattura);
        addEmptyLine(document, 7);

        float[] widths = { 8f, 2f };
        PdfPTable table = new PdfPTable(widths);
        table.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.setWidthPercentage(100);
        table.setHeaderRows(1);

        addCenterTableHeaderBold(table, "Descrizione", true, 12);
        addCenterTableHeaderBold(table, "Totale", true, 12);

        Double somma = 0.0;
        Iterator<FatturaDettaglio> iterator = fattura.getFatturaDettaglios().iterator();
        while (iterator.hasNext()) {
            FatturaDettaglio fatturaDettaglio = iterator.next();
            somma += fatturaDettaglio.getPrezzo();
        }
        addCenterTableHeaderBoldAllignLeft(table, fattura.getFatturaDettaglios().size()
                + " Richieste di Preventivo ", false, 12);
        addCenterTableHeaderBold(table, "€ " + arrotonda(somma), false, 12);

        Iterator<CreditoDebito> iterator2 = fattura.getCreditoDebitos().iterator();
        while (iterator2.hasNext()) {
            CreditoDebito creditoDebito = iterator2.next();

            addCenterTableHeaderBoldAllignLeft(table, creditoDebito.getNote(), false, 12);
            String segno = "";
            if (creditoDebito.getTipo().equals("C")) {
                segno = "-";
                somma = somma - creditoDebito.getImporto();
            }
            if (creditoDebito.getTipo().equals("D")) {
                segno = "";
                somma = somma + creditoDebito.getImporto();
            }
            addCenterTableHeaderBold(table, "€ " + segno
                    + arrotonda(creditoDebito.getImporto()), false, 12);
        }

        document.add(table);

        addEmptyLine(document, 2);

        float[] widths1 = { 2f, 1f };
        PdfPTable table1 = new PdfPTable(widths1);
        table1.setHorizontalAlignment(Element.ALIGN_RIGHT);
        table1.setWidthPercentage(60);

        addCenterTableHeader(table1, "Totale Imponibile netto", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma), false);

        addCenterTableHeader(table1, "IVA", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma * 20 / 100), false);

        addCenterTableHeader(table1, "Totale Fattura", true);
        addCenterTableHeader(table1, "€ " + arrotonda(somma + somma * 20 / 100), false);

        document.add(table1);

        addEmptyLine(document, 2);

        paragrafoFattura.setAlignment(Element.ALIGN_LEFT);
        Chunk datiPagamento =
                new Chunk("Dettagli pagamento:\nMetodo: "
                        + fattura.getAzienda().getMetodoPagamento()
                        + "\nIBAN:  IT xx X xxxxx xxxxx xxxxxxxxxxx");
        document.add(datiPagamento);
        addEmptyLine(document, 5);
        Chunk dettagliEstrattoContoTesto =
                new Chunk(
                        "Per maggiori dettagli sulle richieste di preventivo e eventuali promozioni consultare l'estratto conto allegato");
        dettagliEstrattoContoTesto.setFont(new Font(Font.FontFamily.TIMES_ROMAN, 10,
                Font.NORMAL, BaseColor.BLACK));
        document.add(dettagliEstrattoContoTesto);
        document.close();
        docWriter.close();

        return baos;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一瞬间的火花 2025-01-02 01:39:02

尝试先压缩包含PDF的字符串,然后将其放入压缩的DB中,然后在拉出时解压缩。这将确保没有任何更改并且字符串被作为二进制处理。

Try compressing the string containing the PDF first, then putting it into the DB compressed, then uncompress it when pulling it out. This will ensure that nothing is changed and the string is handled as binary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文