Servlet 中的 iText PDF

2024-04-13

因此,我正在使用此代码从我的服务器创建一个报告 PDF 文件

response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
List<Integer> cartas1 = new ArrayList<Integer>();
DeudorDAO DDAO = new DeudorDAO();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
    baos = DocumentoCartaCobranza.CrearDocumento(
        getServletContext().getRealPath("static/images/pdf_banner.jpg"),
        getServletContext().getRealPath("static/images/firmaJG.png"),
        getServletContext().getRealPath("static/images/firmaAB.jpg"),
        DDAO.getDatosFullDeudores(cartas1)
    );
} catch (DocumentException e) {
    e.printStackTrace();
}
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();

And

public static ByteArrayOutputStream CrearDocumento(
    String imgCabecera,
    String imgFirma,
    String imgAbogado,
    java.util.List<Deudor> carta1) throws DocumentException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            PdfWriter pdfw = null;
            pdfw = PdfWriter.getInstance( Documento, baos );
            Documento.open();
            for (Deudor D : carta1){
                //Imagen cabecera
                Image imgHead = Image.getInstance(imgCabecera);
                //imgHead.setAbsolutePosition(35, 770);
                imgHead.scaleAbsolute(125, 40);
                Documento.add(imgHead);
                Carta1(D);
                //Imagen Firma
                Image imgSign = Image.getInstance(imgFirma);
                //imgHead.setAbsolutePosition(35, 770);
                imgSign.scaleAbsolute(110, 105);
                Documento.add(imgSign);
                Documento.newPage();
            }
            Documento.close();
        }
        catch(DocumentException e) {
            System.out.println(e.getMessage());
        } catch (MalformedURLException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        return baos;
    }

所以我的 servlet 调用一个类并返回一个 ByteArrayOutputStream。 到目前为止,一切都很好。有用 !

当我调用另一个报告时,问题就开始了……servlet 没有响应。它说:

该文件已关闭。您无法添加任何元素。

当然,第一次电话就关闭了。但这是对不同报告的新呼吁。

我猜它与 PDFWriter 有关......

谢谢 !!

EDIT !

以防万一你问:

private static float Espaciado = 15;
private static Document Documento = new Document();

private static void Carta1(Deudor D) throws DocumentException {
        //Cabecera Cuerpo
        Paragraph persona = new Paragraph(); persona.add(Chunk.NEWLINE); persona.add(new Chunk("Señor(a)"));
        persona.add(Chunk.NEWLINE); persona.add(new Chunk(D.getPaciente().getNombre()).append(" ").
                append(D.getPaciente().getApepat()).append(" ").append(D.getPaciente().getApemat()).toString());
        persona.add(Chunk.NEWLINE); persona.add(new Chunk(D.getPaciente().getRut().toString()).append("-").append(D.getPaciente().getDV()).toString());
        persona.add(Chunk.NEWLINE); persona.add(new Chunk(D.getPaciente().getDireccion()+", "+D.getPaciente().getCiudad()+", "+D.getPaciente().getComuna()));
        persona.setAlignment(Element.ALIGN_LEFT);

        Paragraph folio = new Paragraph();
        Chunk c = new Chunk(D.getIngreso().toString()+"-"+D.getDV(), new Font(folio.getFont().getFamily(), 20, Font.BOLD)); c.setUnderline(0.5f, -1.5f); folio.add(c);
        folio.add(Chunk.NEWLINE); folio.add(new Chunk("Ref: Valorización PAM"));
        folio.setAlignment(Element.ALIGN_RIGHT);

        Paragraph cc = new Paragraph(new Chunk("Estimado Paciente:"));
        cc.setAlignment(Element.ALIGN_LEFT); cc.setSpacingAfter(Espaciado);
        //Cuerpo
        Paragraph p2 = new Paragraph(new Chunk("En CLINICA IQUIQUE S.A. bla bla").toString());
        p2.setFirstLineIndent(50); p2.setSpacingAfter(Espaciado); p2.setAlignment(Element.ALIGN_JUSTIFIED);

        Documento.add(persona); Documento.add(folio); Documento.add(cc);
        Documento.add(p2); 
    }

这很简单:创建一个静态文档:

 private static Document Documento = new Document();

然后你调用 close :

Documento.close();

所以这个错误是合乎逻辑的。将文档创建为方法属性并将其传递,而不是将其用作静态属性。在 servlet 中使用静态字段只对缓存有好处,其他任何事情都会带来麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Servlet 中的 iText PDF 的相关文章

随机推荐

  • 从新的 Firebase 检索数据

    请帮忙 迁移到新的 Firebase 后 我无法检索数据 使用这个结构 let ref FIRDatabase database reference override func viewDidLoad super viewDidLoad r
  • Spring/Java 错误:命名空间元素“annotation-config”...在 JDK 1.5 及更高版本上

    我有 Spring Java 应用程序 它是用编译器合规级别 1 5 我下载了一个新的 Linux 设置阿帕奇汤姆猫 8 0 8 我下载了JDK 8u5 我在bash中设置的路径如下 PATH PATH HOME jdk1 8 0 05 b
  • 在Android中压缩带有大图像的pdf

    这个问题通过java压缩带有大图像的pdf https stackoverflow com questions 20614350 compress pdf with large images via java给出了在 Java 中使用 iT
  • 您可以同时使用 Protractor 和 Appium 来测试混合应用程序吗?

    这是我的场景 我有一个基于 Angular JS 构建的网站 我能够使用量角器使网站自动化 然而 在网站上执行的某些操作会反映在 Android 和 IOS 设备中 这就是我想要实现的目标 像平常一样在网站上运行我的测试 但我也想触发命令来
  • 如何通过 .NET 将图像插入 Access OLE 字段

    我有一个 Access mdb 数据库 我想从 Visual C 2010 开发的应用程序中插入图像 图片存储在数据库中的 OLE 对象字段中 直接在 Access 中添加图像后 它们将以位图图像的格式存储 双击这些图片即可在 Access
  • Cypress - 验证一列中的每个表行是否包含相同的项目

    我有一个表 但是某种由 DIV 创建的 ag grid 而不是真正的表元素 div div Name 1 div div 25 div div div div Name 1 div div 25 div div 我想验证每个字段是否带有co
  • 有谁知道 CVS 命令行选项来获取上次签入的详细信息?

    我在 Windows 上使用 CVS 带有 WinCVS 前端 并且希望在构建失败时将上次签入的详细信息添加到我们的自动构建过程中的电子邮件中 以便更容易修复 我需要知道已更改的文件 更改它们的用户以及评论 我一直在尝试制定命令行选项 但似
  • 来自 links-own 的参数值

    我需要帮助 所以我想将代理拥有的参数指定为链接拥有的参数值的平均值 frienships own strength household own influence factor to create influence if friendsh
  • 在 Rails 资产管道的 js.coffee 文件中使用 erb 时出错

    我有以下代码 assets javascripts home js coffee erb jQuery gt addClickListeners gt document on click add chord link addChord do
  • C IEEE-Floats inf 等于 inf

    在 C 中 在使用 IEEE 754 浮点数的实现中 当我比较两个 NaN 浮点数时 它返回 0 或 false 但是为什么两个都为 inf 的浮点数会被视为相等呢 该程序打印 equal 至少在带有 gcc 的 Linux AMD64 下
  • 使用 strtotime() 在 php 中计算相对日期

    我正在寻找一种可靠的方法来返回指定工作日 例如 星期一 的完整日期current week 由于今天是 2012 年 6 月 13 日星期三 我预计以导致2012 06 11 而是 php 返回2012 06 18好像它解释了本星期作为意义
  • 核心数据:3表连接?

    我知道 Core Data 不是数据库 有很多区别 是这个吗 在数据库中 我通常会有以下内容 A gt gt B gt gt C A 有很多 B B 有很多 C 查询 给我所有具有 c attr X 的 A 很容易写成 select fro
  • 关于 string.c_str() 生命周期

    我想知道是否void func const char str 参考有效的str如果我写如下 auto str string hello c str func str 它与下面的代码有何不同 func string hello c str 在
  • 查找数据集中所有点距离最近的点 - Python

    我有一个数据集如下 Id Latitude longitude 1 25 42 55 47 2 25 39 55 47 3 24 48 54 38 4 24 51 54 54 我想找到数据集每个点的最近距离 我在互联网上找到了以下距离函数
  • BufferedWriter在java中如何工作

    我经常将文本输出到文件中 我想知道一件事 怎么办BufferedWriterwork 当我打电话时它会在文件中写入文本吗writer write text 如果不写文本 我需要使用flush函数来写数据吗 例如 File file new
  • 使用 BeautifulSoup 进行网页抓取时,我可以接受或忽略 Google 隐私声明吗?

    从控制台运行以下代码时 我无法查看 Google 新闻页面的 HTML 我看到的 HTML 是 Google 隐私声明的 HTML 以 在继续之前 开头的 HTML from bs4 import BeautifulSoup import
  • 如何将数据从服务器代码传递到ejs模板?

    我有一个简单的服务器 我可以通过浏览器完美地获取 url 上的数据 我正在尝试获取 ejs 模板中的数据 这就是我获取数据的方式 app get some function req res next var size 3 var curr
  • 使用 LINQ 使用 2 个列表创建字典

    我正在尝试从 2 个列表创建一本字典 其中一个列表包含键 一个列表包含值 我可以使用 for 循环来完成此操作 但我正在尝试查找是否有一种使用 LINQ 来完成此操作的方法 示例代码会很有帮助 谢谢 在 NET4中你可以使用内置的Zip h
  • 如何更改杰克逊的默认具体地图类型?

    我有一个非常简单的 Jackson 代码来反序列化嵌套的 JSON 对象 public class MapTest public static void main String args throws Exception final Str
  • Servlet 中的 iText PDF

    因此 我正在使用此代码从我的服务器创建一个报告 PDF 文件 response setHeader Expires 0 response setHeader Cache Control must revalidate post check