我的csp页面:
<%@ page import="com.lowagie.text.*"%>
<%@ page import="com.lowagie.text.pdf.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.net.URL"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>PDF</title>
</head><body>
<%
 Document doc = new Document(); 
 PdfWriter writer =PdfWriter.getInstance(doc,new FileOutputStream("C:\\Helloworld2.PDF"));
 
 doc.open();
 
 PdfContentByte cb = new  PdfContentByte(writer);
 
 BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
 cb.setFontAndSize(bf, 12);
 
 cb.setLineWidth(0f);
 cb.moveTo(250, 500);
 cb.lineTo(250, 800);
 cb.moveTo(50, 700);
 cb.lineTo(400, 700);
 cb.moveTo(50, 650);
 cb.lineTo(400, 650);
 cb.moveTo(50, 600);
 cb.lineTo(400, 600);
 cb.stroke();
 
 cb.beginText();
 String text = "Sample text for alignment";
 cb.showTextAligned(PdfContentByte.ALIGN_CENTER, text + " Center", 250, 700, 0);
 cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, text + " Right", 250, 650, 0);
 cb.showTextAligned(PdfContentByte.ALIGN_LEFT, text + " Left", 250, 600, 0);
 
 cb.setTextMatrix(100, 400);
 cb.showText("Text at position 100,400.");
 
 cb.endText();
 
 doc.close();
 %>
<script language=Javascript>
alert("PDF is OK!");
</script>
</body>
</html>猫给的错误:
type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: The document has no pages.
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause 
ExceptionConverter: java.io.IOException: The document has no pages.
note The full stack trace of the root cause is available in the Tomcat logs.我在itext中看到PdfContentByte这个类,想用一下.但是不知道漏写了什么,老是不出pdf文件.
请高手帮忙.谢谢!

解决方案 »

  1.   

    没有高手了?急啊!晕啊!我看到了一个相关程序,它给pdf中加了一个form层,所有东西都写在form层.但不是我要的.我要的是自由排版!高手,高手,你快来啊!写不出来的话,我在公司里就太没面子了.救命啊!
      

  2.   

    你的问题出在这里:
    document.open();
    PdfContentByte cb = writer.getDirectContent();
    这样写就有page了,指代当前文件作为容器.
      

  3.   

    我也是在国外网站上看到的,例子如下,你可以模仿一下.
    handout_pdf.java 不是jsp , 请注意!!
    /*
     * $Id: handout_pdf.java,v 1.17 2004/12/14 10:59:06 blowagie Exp $
     * $Name:  $
     *
     * This code is free software. It may only be copied or modified
     * if you include the following copyright notice:
     *
     * This class by Bruno Lowagie. Copyright (c) 2002 Bruno Lowagie.
     *
     * This code is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     *
     * [email protected]
     *//**
     * This class demonstrates how to splot a PDF file using iText.
     * @author Bruno Lowagie
     */
    package com.lowagie.tools;import java.io.*;import com.lowagie.text.*;
    import com.lowagie.text.pdf.*;/**
     * Takes an existing PDF file and makes handouts.
     */
    public class handout_pdf extends java.lang.Object {
        
    /**
     * Makes handouts based on an existing PDF file.
     * @param args the command line arguments
     */
    public static void main (String args[]) {
    if (args.length != 3) {
    System.err.println("arguments: srcfile destfile pages");
    }
    else {
    try {
    int pages = Integer.parseInt(args[2]);
    if (pages < 2 || pages > 8) {
    throw new DocumentException("You can't have " + pages + " pages on one page (minimum 2; maximum 8).");
    }
                    
    float x1 = 30f;
    float x2 = 280f;
    float x3 = 320f;
    float x4 = 565f;
                    
    float[] y1 = new float[pages];
    float[] y2 = new float[pages];
                    
    float height = (778f - (20f * (pages - 1))) / pages;
    y1[0] = 812f;
    y2[0] = 812f - height;
                    
    for (int i = 1; i < pages; i++) {
    y1[i] = y2[i - 1] - 20f;
    y2[i] = y1[i] - height;
    }
                    
    // we create a reader for a certain document
    PdfReader reader = new PdfReader(args[0]);
    // we retrieve the total number of pages
    int n = reader.getNumberOfPages();
    System.out.println("There are " + n + " pages in the original file.");
                    
    // step 1: creation of a document-object
    Document document = new Document(PageSize.A4);
    // step 2: we create a writer that listens to the document
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(args[1]));
    // step 3: we open the document
    document.open();
    PdfContentByte cb = writer.getDirectContent();
    PdfImportedPage page;
    int rotation;
    int i = 0;
    int p = 0;
    // step 4: we add content
    while (i < n) {
    i++;
    Rectangle rect = reader.getPageSizeWithRotation(i);
    float factorx = (x2 - x1) / rect.width();
    float factory = (y1[p] - y2[p]) / rect.height();
    float factor = (factorx < factory ? factorx : factory);
    float dx = (factorx == factor ? 0f : ((x2 - x1) - rect.width() * factor) / 2f);
    float dy = (factory == factor ? 0f : ((y1[p] - y2[p]) - rect.height() * factor) / 2f);
    page = writer.getImportedPage(reader, i);
    rotation = reader.getPageRotation(i);
    if (rotation == 90 || rotation == 270) {
    cb.addTemplate(page, 0, -factor, factor, 0, x1 + dx, y2[p] + dy + rect.height() * factor);
    }
    else {
    cb.addTemplate(page, factor, 0, 0, factor, x1 + dx, y2[p] + dy);
    }
    cb.setRGBColorStroke(0xC0, 0xC0, 0xC0);
    cb.rectangle(x3 - 5f, y2[p] - 5f, x4 - x3 + 10f, y1[p] - y2[p] + 10f);
    for (float l = y1[p] - 19; l > y2[p]; l -= 16) {
    cb.moveTo(x3, l);
    cb.lineTo(x4, l);
    }
    cb.rectangle(x1 + dx, y2[p] + dy, rect.width() * factor, rect.height() * factor);
    cb.stroke();
    System.out.println("Processed page " + i);
    p++;
    if (p == pages) {
    p = 0;
    document.newPage();
    }
    }
    // step 5: we close the document
    document.close();
    }
    catch(Exception e) {
    System.err.println(e.getClass().getName() + ": " + e.getMessage());
    }
    }
        }
    }