【问题标题】:servlet read pdf with rectangleservlet用矩形读取pdf
【发布时间】:2015-11-13 15:20:20
【问题描述】:

enter code here 首先,我以这种方式制作我的 pdfFile:

PdfReader pdfr=new PdfReader(filepath1);//existing file
PdfStamper pdfs=new PdfStamper(pdfr, filepath2);//file to be modified
...
PdfContentByte cb=pdfs.getOverContent(1);
cb.setColorFill(new BaseColor(0x00,0x4E,0x44));
cb.rectangle(coordX,min_Y,60,haut);
cb.saveState();
PdfGState state=new PdfGState();
state.setFillOpacity(0.1f);
cb.setGState(state);
cb.fillStroke();
cb.restoreState();

文件 pdf 在 Adob​​e Reader XI 中是正确的, 但是当我尝试用 servlet 读取它时,我看不到任何矩形。 小服务程序:

protected void doPost(...){
File pdfFile=new File(filepath2);
FileInputStream fis=new FileInputStream(filepath2);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition","inline;filename=pdfFN);
response.setContentLength((int) filepath2.length());
OutputStream resOS=response.getOutputStream();
int length=1;
byte[] buffer=new byte[8192];
while((length=fis.read(buffer))!=-1)
{resOS.write(buffer,0,length);
}
fis.close();
resOS.flush();resOS.close();

会发生什么? 提前致谢。

【问题讨论】:

  • Servlet 不会“读取”PDF,当然也不会“查看”PDF,所以我敢肯定您正在尝试问其他问题,但就像对您投反对票的人一样问题,我不知道你在问什么。你能澄清你的问题吗?例如:为什么要在磁盘上创建文件?为什么不在内存中创建文件(这是在 servlet 上下文中处理 PDF 的最常用方法)。另外:您的代码 sn-ps 包含几个错误,使它们无法编译。我更正了一些错误,但您在发布问题时应该更准确。

标签: java servlets itext


【解决方案1】:

我很抱歉,我会说得更清楚。

  1. 首先,我使用 Itext 创建一个 pdf 文件 (File1),它是一个每周网格(包含日期和小时) -> 可以,使用 acrobat reader XI 查看File1 没问题。

  2. 我用pdfStamper修改File1:

    PdfReader pdfr=new PdfReader(File1);//existing file code here
    PdfStamper pdfs=new PdfStamper(pdfr, File2);//file to be modified
    ...
    PdfContentByte cb=pdfs.getOverContent(1);
    cb.setColorFill(new BaseColor(0x00,0x4E,0x44));
    cb.rectangle(coordX,min_Y,60,haut);
    Phrase phrase = new Phrase(text, new Font(bf, fontSize));//insert text in rectangle
            ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, phrase,
                // center horizontally
               (float) (coordX + coordX+60) / haut_c,   //haut_c
                    rect1,
                0); 
    cb.saveState();
    PdfGState state=new PdfGState();
    state.setFillOpacity(0.1f);//text is now visible
    cb.setGState(state);
    cb.fillStroke();
    cb.restoreState();
    
  3. 我尝试在jsp 中阅读File2:

    <object data="/Empl_temps/MyServlet?file='+File2+' type="application/pdf" width="600" height="900"></object>
    

    MyServlet:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String pdfFileName=request.getParameter("file")+".pdf";
        String contextPath="Y:\\Empl_temps\\";
        System.out.println("Lect_pdf -"+contextPath+pdfFileName);
        File pdfFile=new File(contextPath+pdfFileName);
        FileInputStream fis=new FileInputStream(pdfFile);
        response.setContentType("application/pdf");
        response.addHeader("Content-Disposition", "inline;filename="+pdfFileName);
        response.setContentLength((int)pdfFile.length());
        OutputStream responseOutputStream=response.getOutputStream();
        int length=-1;
        byte[] buffer=new byte[8192];
        while((length=fis.read(buffer))!=-1)
        {
            responseOutputStream.write(buffer, 0, length);
        }
        fis.close();
        responseOutputStream.flush();responseOutputStream.close();
    }
    
  4. 我可以阅读File2,但看不到矩形,我只能看到矩形中的文字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2023-04-03
    • 2014-08-10
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多