jjzjj

java - 如何在 JasperReport 中将打印顺序设置为 "horizontal"时自动拉伸(stretch)细节带?

coder 2024-03-21 原文

我有一个水平打印的主报告。它有 5 列。 我想在每一列上放置一个子报告。所以我创建了这个:

子报表是这样的:

问题是,当我运行时出现以下异常:

net.sf.jasperreports.engine.JRRuntimeException: Subreport overflowed on a band that does not support overflow.

当其中有子报表并且打印顺序设置为水平时,jasper 报表似乎无法垂直拉伸(stretch)详细信息带。

我该怎么做才能避免这个错误并实现我想要的?

最佳答案

我找到了这个问题的解决方案。经过深入搜索,我发现遗憾的是,在 Jasper Reports 上无法执行此操作,因为无论如何,当您水平打印报告时,“详细信息”区域永远不会改变它的高度。因此,溢出的子报表或文本字段将抛出异常。

这个问题的解决方法是在没有报告的情况下工作,例如使用像 iText 这样的 PDF 生成器。 如果有人需要,这是我用 iText 实现我想要的代码:

Document document = new Document();
File arquivo = new File("C:\\Users\\Mateus\\Desktop\\testezãozarãozão.pdf");
PdfWriter.getInstance(document, new FileOutputStream(arquivo));
document.open();

LinkedHashMap<Produto, LinkedHashMap<String, List<PrePedidoItem>>> produtos = createStructuredHashMap();

for (Produto produto : produtos.keySet()) {
    PdfPTable table = new PdfPTable(5);
    PdfPCell cellProduto = new PdfPCell();
    Phrase phraseProduto = new Phrase(String.valueOf(produto));
    phraseProduto.setFont(new Font(Font.FontFamily.HELVETICA, 11, Font.BOLD|Font.UNDERLINE, new BaseColor(50, 65, 200)));
    cellProduto.addElement(phraseProduto);
    cellProduto.setColspan(5);
    cellProduto.setHorizontalAlignment(PdfPCell.ALIGN_MIDDLE);
    cellProduto.setBorder(Rectangle.NO_BORDER);
    cellProduto.setPaddingBottom(10);
    cellProduto.setPaddingTop(20);
    table.addCell(cellProduto);
    LinkedHashMap<String, List<PrePedidoItem>> mapas = produtos.get(produto);
    int mapasAdicionados = 0;
    for (String mapa : mapas.keySet()) {
        PdfPCell cellMapa = new PdfPCell();
        Phrase phraseMapa = new Phrase(mapa);
        phraseMapa.setFont(new Font(Font.FontFamily.HELVETICA, 9, Font.BOLD, new BaseColor(215, 100, 0)));
        cellMapa.addElement(phraseMapa);
        List<PrePedidoItem> itensDoMapa = mapas.get(mapa);
        for (PrePedidoItem item : itensDoMapa) {
            DecimalFormat df = new DecimalFormat("###,##0.00");
            Phrase phraseItem = new Phrase(df.format(item.getLargura()) + " x " + df.format(item.getComprimento()));
            phraseItem.setFont(new Font(Font.FontFamily.HELVETICA, 9, Font.NORMAL, BaseColor.BLACK));
            cellMapa.addElement(phraseItem);
        }
        cellMapa.setBorder(Rectangle.NO_BORDER);
        table.addCell(cellMapa);
        mapasAdicionados ++;
        if(mapasAdicionados == 5) {
            mapasAdicionados = 0;
        }
    }
    PdfPCell celulaPreenchimentoMapas = new PdfPCell();
    celulaPreenchimentoMapas.setColspan(5 - mapasAdicionados);
    celulaPreenchimentoMapas.setBorder(Rectangle.NO_BORDER);
    table.addCell(celulaPreenchimentoMapas);
    document.add(table);
}

document.close();
Desktop.getDesktop().open(arquivo);

关于java - 如何在 JasperReport 中将打印顺序设置为 "horizontal"时自动拉伸(stretch)细节带?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717250/

有关java - 如何在 JasperReport 中将打印顺序设置为 "horizontal"时自动拉伸(stretch)细节带?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  5. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  6. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  7. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  8. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  9. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  10. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

随机推荐