PDF至bytearrayoutpustream空白

PDF至bytearrayoutpustream空白,pdf,blob,bytearrayoutputstream,Pdf,Blob,Bytearrayoutputstream,我有一个java代码来创建一个PDF临时文件并将其保存到BLOB字段数据库中。正确生成PDF,并将BLOB保存到数据库中。当我重新创建PDF时,它返回时没有空格字符!问题可能是bytearrayoutputstream的基于64的编码。这是我的密码 public ByteArrayOutputStream generaFatturaStampaPDF(Fattura fattura) { try { Document document = new Document(Pag

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

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;
    }
}
public ByteArrayOutputStream generaFatturaStampaPDF(Fattura Fattura){
试一试{
文件=新文件(PageSize.A4、72、72、120、90);
字符串tempdir=System.getProperty(“java.io.tmpdir”);
if(!(tempdir.endsWith(“/”)| | tempdir.endsWith(“\\”))
tempdir=tempdir+System.getProperty(“file.separator”);
文件tempFattura=File.createTempFile(“fattura”,“.pdf”,新文件(tempdir));
tempFattura.deleteOnExit();
setFileTempFattura(tempFattura.toString());
PdfWriter writer=PdfWriter.getInstance(文档,新文件输出流(tempFattura));
writer.setPdfVersion(PdfWriter.VERSION_1_7);
writer.setPageEvent(new HeaderFooter());
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
PdfWriter docWriter=null;
docWriter=PdfWriter.getInstance(文档,BAS);
docWriter.setPdfVersion(PdfWriter.VERSION_1_7);
setPageEvent(新HeaderFooter());
document.open();
addMetaDataFattura(文件);
Font catFont=新字体(Font.FontFamily.TIMES_ROMAN,18,Font.BOLD,BASECLOR.BLACK);
段落paragrafoFattura=新段落();
paragrafoFattura.setAlignment(元素对齐_中心);
区块c=新区块(“Fattura”);
c、 setFont(catFont);
paragrafoFattura.添加(c);
文件.增补(paragrafoFattura);
intestazioneFatturaStampa(作家,法图拉);
intestazioneFatturaStampa(文件撰写人,法图拉);
addEmptyLine(第7号文件);
浮动[]宽度={8f,2f};
PdfPTable表格=新PdfPTable(宽度);
表.设置水平对齐(元素.对齐\中心);
表1.设定宽度百分比(100);
表2.setHeaderRows(1);
addCenterTableHeaderBold(表“描述”,正确,12);
addCenterTableHeaderBold(表“总计”,真,12);
双somma=0.0;
迭代器迭代器=fattura.getFatturaDettaglios().Iterator();
while(iterator.hasNext()){
FatturaDettaglio FatturaDettaglio=迭代器.next();
somma+=fatturaDettaglio.getPrezzo();
}
addCenterTableHeaderBoldAllignLeft(表,fattura.getFatturadeTaglios().size())
+“Richieste di Preventivo”,假,12);
addCenterTableHeaderBold(表,“€”+arrotonda(somma),假,12);
迭代器迭代器2=fattura.getCreditoDebitos().Iterator();
while(iterator2.hasNext()){
CreditoDebito CreditoDebito=iterator2.next();
addCenterTableHeaderBoldAllignLeft(表,creditoDebito.getNote(),false,12);
字符串segno=“”;
if(creditoDebito.getTipo().equals(“C”)){
segno=“-”;
somma=somma-creditoDebito.getImporto();
}
if(creditoDebito.getTipo().equals(“D”)){
segno=“”;
somma=somma+creditoDebito.getImporto();
}
addCenterTableHeaderBold(表“€”+segno
+arrotonda(creditoDebito.getImporto()),false,12);
}
文件。添加(表);
addEmptyLine(文件,2);
浮动[]宽度1={2f,1f};
PdfPTable TABLE 1=新PdfPTable(宽度1);
表1.设置水平对齐(Element.ALIGN_RIGHT);
表1.固定宽度百分比(60);
addCenterTableHeader(表1,“总计不可删除净值”,真);
addCenterTableHeader(表1,“€”+arrotonda(somma),假);
addCenterTableHeader(表1,“IVA”,真);
addCenterTableHeader(表1,“€”+arrotonda(somma*20/100),假);
addCenterTableHeader(表1,“Totale Fattura”,真);
addCenterTableHeader(表1,“€”+arrotonda(somma+somma*20/100),假);
文件.增补(表1);
addEmptyLine(文件,2);
paragrafoFattura.setAlignment(Element.ALIGN_左);
块datiPagamento=
新块(“Dettagli-pagamento:\nMetodo:”
+fattura.getAzienda().getMetodoPagamento()
+“\nIBAN:IT xx X xxxxx xxxxx xxxxxxxxxx”);
文件。添加(datiPagamento);
addEmptyLine(文件,5);
Chunk DettaglieStratToOnToTesto=
新块(
“根据maggiori dettagli sulle richieste di preventivo e eventality Promotioni Consultator l'estratto conto allegato”);
DetTaglieStratToOnToTesto.setFont(新字体(Font.FontFamily.TIMES_ROMAN,10,
Font.NORMAL、BaseColor.BLACK));
文件。添加(dettagliEstrattoContoTesto);
document.close();
docWriter.close();
返回宝;
}捕获(例外e){
e、 printStackTrace();
返回null;
}
}

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

没有空格字符是什么意思?空白是从什么地方丢失的?当我重新创建PDF时,这个字符串“Per maggiori dettagli sulle richieste di preventivo e eventivational Promotioni I l'estratto conto allegato领事馆”写的是“Permagioride Itagilerichiestide Preventivoe Ventualipromozioniconsultarel'estratto ContoAllegato”PDF文件不能在不完全损坏的情况下进行修改,因此,如果文件中发生了更改,您甚至不可能打开它。您确定此错误不会发生在您的原始文件中吗?另外,为什么需要base64编码?你不能将其存储为二进制文件吗?PDF文件可以