java ItextPDF迁移到pdfbox

zf2sa74q  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(75)

我有下面的代码,我从itextpdf迁移到pdfbox。

@RequestMapping(value = "/displaypdf.action", method = RequestMethod.GET)
            public void displaypdf(HttpServletRequest p_objRequest, HttpServletResponse p_objResponse,
                    @RequestParam("filename") String p_sFilename) throws Exception {
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug(ClmSrDebugConstant.DISPLAYPDF);
                }
                String l_sReportName;
                Blob l_bContent = null;
                String l_sTcn = (String) p_objRequest.getSession().getAttribute(ClmSrConstant.TCN);
                ServletOutputStream l_objServletOutputStream = p_objResponse.getOutputStream();
                Map<String, Object> l_mapConfigFile = new HashMap<String, Object>();
//PDDocument doc = null;
    
                Document document = null;
                try {
                    l_mapConfigFile = m_objClinicalService.retrieveMap(l_sTcn);
                    Iterator<String> it = l_mapConfigFile.keySet().iterator();
                    while (it.hasNext()) {
                        String key = it.next();
                        if (key.contains(p_sFilename)) {
                            l_bContent = (Blob) l_mapConfigFile.get(key);
                        }
                    }
                    l_sReportName = p_sFilename;
                    if (l_bContent != null) {
//doc = new PDDocument();
                    //PDPage firstpage = new PDPage();
                    //doc.addPage(firstpage);
                        document = new Document(PageSize.A4);
                        PdfWriter writer = PdfWriter.getInstance(document, l_objServletOutputStream);
                        document.open();
                        document.addTitle(l_sReportName);
                        p_objResponse.setContentType("application/pdf");
                        byte[] l_bytes = l_bContent.getBytes(1, (int) l_bContent.length());
                        InputStream l_inptStrm = l_bContent.getBinaryStream();
                        PdfReader l_pdfReader = new PdfReader(l_inptStrm, l_bytes);
                        PdfContentByte l_cb = writer.getDirectContent(); // Holds the PDF
                        PdfImportedPage l_page;
                        int l_currentPageNumber = 0;
                        int l_pageOfCurrentReaderPDF = 0;
                        while (l_pageOfCurrentReaderPDF < l_pdfReader.getNumberOfPages()) {
                            if (l_pageOfCurrentReaderPDF > 0) {
                                document.newPage();
                            }
                            l_pageOfCurrentReaderPDF++;
                            l_currentPageNumber++;
                            l_page = writer.getImportedPage(l_pdfReader, l_pageOfCurrentReaderPDF);
                            l_cb.addTemplate(l_page, 0, 0);
                        }
                        writer.freeReader(l_pdfReader);
                    } else {
                        p_objResponse.setContentType(ClmSrConstant.TXT_CNTN_TYP);
                        p_objResponse.getOutputStream().print(ClmSrConstant.NLP_REPORT_ERROR);
                    }
        
                    l_objServletOutputStream.flush();
                    if (document != null) {
                        document.close();
                    }
                    l_objServletOutputStream.close();
        
                } catch (Exception exExp) {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.error(ClmSrDebugConstant.EXCEP_DISPLAYPDF, exExp);
                    }
                }
            }

字符串
我不明白我怎么能转换这条线
PdfWriter writer = PdfWriter.getInstance(document,l_objServletOutputStream); PdfReader l_pdfReader = new PdfReader(l_inttStrm,l_bytes); PdfContentByte l_cb = writer.getDirectContent(); //保存PDF
进一步转化。
请发现我现在正在使用pdfbox --但无法在PDFBOX中找到PDFwriter和PDFReader

b5lpy0ml

b5lpy0ml1#

PDFbox和itextpdf都使用不同的方法,itextpdf跳过html部分,你首先要看看itextpdf会生成什么,在html中重新创建相同的内容,然后将其输入到html-to-pdf转换器中。
我们可以使用openhtmltopdf-pdfbox和flying-saucer-pdf-openpdf.

相关问题