如何试用itext中的dfContentByte类进行文字定位和旋转?请高手帮忙!

letsgogogo 2005-11-10 04:10:48
我的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文件.
请高手帮忙.谢谢!
...全文
551 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
songyh627 2010-06-03
  • 打赏
  • 举报
回复
我不太明白呢!也出现这样的错误了,应该怎样解决呢!
letsgogogo 2005-11-14
  • 打赏
  • 举报
回复
谢谢,出来,终于搞懂了!
jimmyhe 2005-11-14
  • 打赏
  • 举报
回复
我也是在国外网站上看到的,例子如下,你可以模仿一下.
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.
*
* itext@lowagie.com
*/

/**
* 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());
}
}
}
}
jimmyhe 2005-11-14
  • 打赏
  • 举报
回复
你的问题出在这里:
document.open();
PdfContentByte cb = writer.getDirectContent();
这样写就有page了,指代当前文件作为容器.
letsgogogo 2005-11-11
  • 打赏
  • 举报
回复
看样子只有自己研究了!
letsgogogo 2005-11-11
  • 打赏
  • 举报
回复
救命啊!
letsgogogo 2005-11-11
  • 打赏
  • 举报
回复
没有高手了?急啊!晕啊!我看到了一个相关程序,它给pdf中加了一个form层,所有东西都写在form层.但不是我要的.我要的是自由排版!高手,高手,你快来啊!写不出来的话,我在公司里就太没面子了.救命啊!

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧