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;
    }
}
4

1 回答 1

0

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

于 2012-01-11T11:41:24.163 回答