GVKun编程网logo

在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误(java pdf导出)

11

在本文中,我们将为您详细介绍在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误的相关知识,并且为您解答关于javapdf导出的疑问,此外,我们还会提供一些关于html表格以pdf格式导

在本文中,我们将为您详细介绍在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误的相关知识,并且为您解答关于java pdf导出的疑问,此外,我们还会提供一些关于html表格以pdf格式导出到本地、Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档。将对象复制到当前的pdf文档中。”、Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档将对象复制到当前的pdf文档中”、java web将数据导出为pdf格式文件代码片段的有用信息。

本文目录一览:

在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误(java pdf导出)

在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误(java pdf导出)

  public static void expordpdfmap(List<LinkedHashMap<String,Object>> list,
          String []keys,String[]  columnNames,
         HttpServletRequest request, HttpServletResponse response) throws Exception {

 
    Document document = new Document();

    document.setPageSize(PageSize.A3);

    

    BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
        BaseFont.NOT_EMBEDDED);  
    Font font = new Font(bfChinese, 12, Font.NORMAL);
    document.open();
    
    
    int length = list.size();
    int size = keys.length;

    for (int x = 0;x < length;x++) {
      for (int y = 0;y < size;y++) {  
        Object object = list.get(x).get(keys[y]);
        String inf = "";
        if (object !=  null) {
          inf = object.toString();
        }
        if (y ==  0) {
          int n = x + 1;
          String info = n + "、"  + columnNames[y] + ":  "  + inf;
          document.add(new Paragraph(info,font));
        } else {
          String info = columnNames[y] + ":  "  + inf;
          String key = "";
          if (info.length() > 150) {
            key = info.substring(0,150) + "...";
          } else {
            key = info;
          }
          document.add(new Paragraph(key, font));
        }
      }  
      document.add(new Paragraph("\n\r"));
    }

    document.close();
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter writer = PdfWriter.getInstance(document,baos);
 
    writer.close();

    response.setContentType("application/octet-stream;charset=UTF-8");
    response.setHeader("Content-disposition","attachment;filename = \""  + URLEncoder.encode(getNname(), "UTF-8")  
            + ".pdf\"");   
    response.setContentLength(baos.size());   
    ServletOutputStream outputStream = response.getOutputStream();
    baos.writeTo(outputStream);   
    outputStream.flush();   
    outputStream.close();
  } 

html表格以pdf格式导出到本地

html表格以pdf格式导出到本地

引入插件 jsPdf.js 以及 html2canvas.js,具体文件可上github找,实测可行
html2canvas(document.getElementById("downBox")).then(function (canvas) {

var imgData = canvas.toDataURL();
var arrDPI = js_getDPI();//获取显示器dpi
var dpiX = 96;
var dpiY = 96;
if (arrDPI.length > 0) {
dpiX = arrDPI[0];
dpiY = arrDPI[1];
}
var doc = new jsPDF(''l'', ''in'', [(canvas.width + 10) / dpiX, (canvas.height + 10) / dpiY]);

doc.addImage(imgData, ''png'', 7/dpiX,5/dpiY);

var pdfName = "12134";
doc.save(pdfName + ".pdf");
});

 

 

//获取显示器的dpi
function js_getDPI() {
var arrDPI = new Array();
if (window.screen.deviceXDPI != undefined) {
arrDPI[0] = window.screen.deviceXDPI;
arrDPI[1] = window.screen.deviceYDPI;
}
else {
var tmpNode = document.createElement("DIV");
tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
document.body.appendChild(tmpNode);
arrDPI[0] = parseInt(tmpNode.offsetWidth);
arrDPI[1] = parseInt(tmpNode.offsetHeight);
tmpNode.parentNode.removeChild(tmpNode);
}
return arrDPI;
}

Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档。将对象复制到当前的pdf文档中。”

Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档。将对象复制到当前的pdf文档中。”

我想用itext 7生成pdf,但是我们发生了一些错误:

com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document.at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:195) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:185) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:187) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:187) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:383) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:289) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1572) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:159) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:127) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:94) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:495) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:454) ~[kernel-7.0.2.jar:na]at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:785) ~[kernel-7.0.2.jar:na]at com.itextpdf.layout.Document.close(Document.java:120) ~[layout-7.0.2.jar:na]at com.xcz.afbp.thirdparty.service.impl.GeneratePDFService.generatePDF(GeneratePDFService.java:160) ~[classes/:na]

我的生成代码:

public void generatePDF(CreditQueryData creditQueryData, Map<String, UserCreditContentView> contentViewMap, List<PackageCreditContentView> needRetrievedCreditContentList, File pdfFile, BigDecimal score) throws Exception {    if (!pdfFile.exists()) {        boolean x = pdfFile.createNewFile();        if (!x) {            LOG.error("生成文件出错" + pdfFile.getPath());            return;        }    }    PdfDocument pdf = new PdfDocument(new PdfWriter(new FileOutputStream(pdfFile)));    Document document = new Document(pdf, PageSize.A4);    document.setRenderer(new DocumentRenderer(document));    pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkingEventHandler());    try {        //operate code just add tableA tableB tableC...    } catch (Exception e) {        LOG.info();    } finally {        document.close(); //exception throws here    }}

我在itext7中唯一的样式代码:

 private PdfFont bfChinese = null;

将在服务构造函数中初始化init:

 public GeneratePDFService() {    String PdfFontPath = EnvironmentUtils.getClasspathFilePath("font/MSYH.TTF");    try {        bfChinese =  PdfFontFactory.createFont(PdfFontPath, "Identity-H", true);    } catch (Exception e) {        e.printStackTrace();    }}

我尝试将我的字体设置为 static ,但是不起作用。

这是地方抛出异常:

private void write(PdfIndirectReference indirectReference) {        if (document != null && !indirectReference.getDocument().equals(document)) {            throw new PdfException(PdfException.PdfIndirectObjectBelongsToOtherPdfDocument);        }        if (indirectReference.getRefersTo() == null) {            write(PdfNull.PDF_NULL);        } else if (indirectReference.getGenNumber() == 0) {            writeInteger(indirectReference.getObjNumber()).                    writeBytes(endIndirectWithZeroGenNr);        } else {            writeInteger(indirectReference.getObjNumber()).                    writeSpace().                    writeInteger(indirectReference.getGenNumber()).                    writeBytes(endIndirect);        }    }

这意味着我有两个不同的文档,但是我不知道何时创建另一个文档。在此先感谢您的建议。

答案1

小编典典

我本人也遇到过同样的问题(花了我几个小时才能发现我做错了什么)。事实证明,您只能将一个特定PdfFont实例用于一个文档。使用PdfFont实例后,该实例便立即链接到该文档,并且您不能再在其他文档中使用它。

例如:

class ThisGoesWrong {    protected PdfFont font;    public ThisGoesWrong() {        font = PdfFontFactory.createFont(...);    }    public void createPdf() {        ...        Paragraph p = new Paragraph("test").setFont(font);        document.add(p);        ...    }}

该类ThisGoesWrong在您第一次调用时会创建正确的PDF createPdf(),但它会在您第二次调用时显示您所拥有的异常。

我发现这解决了问题:

class ThisWorksOK {    public ThisWorksOK() {    }    public void createPdf() {        ...        PdfFont font = PdfFontFactory.createFont(...);        Paragraph p = new Paragraph("test").setFont(font);        document.add(p);        ...    }}

我不知道这是否是一个错误(肯定感觉像是一个错误),因此我将在iText Group上创建内部票证。

Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档将对象复制到当前的pdf文档中”

Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档将对象复制到当前的pdf文档中”

我想用itext 7生成pdf,但是我们发生了一些错误:

com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document.
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:195) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:185) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:187) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:187) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:115) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:383) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:289) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1572) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:159) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:127) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:94) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:495) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:454) ~[kernel-7.0.2.jar:na]
at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:785) ~[kernel-7.0.2.jar:na]
at com.itextpdf.layout.Document.close(Document.java:120) ~[layout-7.0.2.jar:na]
at com.xcz.afbp.thirdparty.service.impl.GeneratePDFService.generatePDF(GeneratePDFService.java:160) ~[classes/:na]

我的生成代码:

public void generatePDF(CreditQueryData creditQueryData,Map<String,UserCreditContentView> contentViewMap,List<PackageCreditContentView> needRetrievedCreditContentList,File pdfFile,BigDecimal score) throws Exception {

    if (!pdfFile.exists()) {
        boolean x = pdfFile.createNewFile();
        if (!x) {
            LOG.error("生成文件出错" + pdfFile.getPath());
            return;
        }
    }

    PdfDocument pdf = new PdfDocument(new PdfWriter(new FileOutputStream(pdfFile)));
    Document document = new Document(pdf,PageSize.A4);
    document.setRenderer(new DocumentRenderer(document));

    pdf.addEventHandler(PdfDocumentEvent.END_PAGE,new WatermarkingEventHandler());

    try {
        //operate code just add tableA tableB tableC...

    } catch (Exception e) {
        LOG.info();
    } finally {
        document.close(); //exception throws here
    }


}

我在itext7中唯一的样式代码:

 private PdfFont bfChinese = null;

将在服务构造函数中初始化init:

 public GeneratePDFService() {
    String PdfFontPath = EnvironmentUtils.getClasspathFilePath("font/MSYH.TTF");
    try {
        bfChinese =  PdfFontFactory.createFont(PdfFontPath,"Identity-H",true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我尝试将我的字体设置为 static ,但是不起作用。

这是地方抛出异常:

private void write(PdfIndirectReference indirectReference) {
        if (document != null && !indirectReference.getDocument().equals(document)) {
            throw new PdfException(PdfException.PdfIndirectObjectBelongsToOtherPdfDocument);
        }
        if (indirectReference.getRefersTo() == null) {
            write(PdfNull.PDF_NULL);
        } else if (indirectReference.getGenNumber() == 0) {
            writeInteger(indirectReference.getObjNumber()).
                    writeBytes(endIndirectWithZeroGenNr);
        } else {
            writeInteger(indirectReference.getObjNumber()).
                    writeSpace().
                    writeInteger(indirectReference.getGenNumber()).
                    writeBytes(endIndirect);
        }
    }

这意味着我有两个不同的文档,但是我不知道何时创建另一个文档。在此先感谢您的建议。

java web将数据导出为pdf格式文件代码片段

java web将数据导出为pdf格式文件代码片段

这篇文章主要为大家详细介绍了java web将数据导出为pdf格式文件代码片段,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

此片段达到的效果是:访问此请求,浏览器将打开新的界面并显示pdf文件预览,在文件预览界面可以下载该pdf文件。

1、jsp界面代码

2、js代码

function getVerPdf() { window.open('/pms/jsp/version/getPrdVerListPdf?page=' + $("#getPage").html() + '&key=' + $("#select").val()); }

3、java代码

/** * * Purpose :将产品版本列表导出为pdf格式 * * @param req * 请求 * @param resp * 应答 * @param page * 当前页数 */ @RequestMapping(value = "getPrdVerListPdf") public void getPrdTypeList(HttpServletRequest req, HttpServletResponse resp, Integer page, String key) { resp.setContentType("application/pdf"); // 弹框选择保存路径和文件名 // resp.setHeader("content-disposition", // "attachment;filename=PrdVerList.pdf"); // 得到当前页的数据 List verList = prdVersionSer.getAllPrdVersion(key); if (verList.size() == 0) { // 如果没有数据,则返回主界面并显示提示消息 req.setAttribute("getFileMsg", "没有符合条件的信息!"); req.setAttribute("select", key); try { req.getRequestdispatcher("/jsp/version/ver_list.jsp").forward(req, resp); } catch (Exception e) { e.printstacktrace(); } } else { // 如果有数据,则显示pdf文件 JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(verList); String reportPath = null; Map map = new HashMap(); if (key != "") { map.put("prdName", verList.get(0).getPrdName()); } else { map.put("prdName", ""); } reportPath = req.getServletContext().getRealPath("/reports/prdVerListByPrdName.jasper"); InputStream is = null; try { is = new FileInputStream(reportPath); JasperRunManager.runReportToPdfStream(is, resp.getoutputStream(), map, ds); } catch (Exception e) { e.printstacktrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printstacktrace(); } } } } }

关于在java中PDF格式导出数据后,打开时报无法加载pdf文档的错误java pdf导出的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于html表格以pdf格式导出到本地、Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档。将对象复制到当前的pdf文档中。”、Itext7生成pdf,但异常“ Pdf间接对象属于其他PDF文档将对象复制到当前的pdf文档中”、java web将数据导出为pdf格式文件代码片段等相关知识的信息别忘了在本站进行查找喔。

本文标签: