java - 如何移动整个布局以适应不同打印机上的预打印表单

标签 java jasper-reports

我们有使用 Java、Hibernate、Spring 和 Jasper Report 5.6 开发的美国医疗保健医疗计费产品。使用 CMS 1500 和 UB04 表格打印。

我们希望打印预打印表单中的值,即用户将将此预打印表单保留在打印机中,并且我们需要从应用程序打印框中的值。

因此,我们在 Jasper 报告中附加了图像,并将文本框放入每个框中。它打印正确,但如果用户更换打印机,则对齐就会成为问题。作为替代的脏选项,我们获取副本并为该打印机进行对齐,因此现在对于每台打印机,我们都有单独的 jasper 报告文件,即使打印的值相同。

我的客户要求为他们提供一个选项,以单独的形式设置 X 和 Y 值,然后使用这些值正确打印。

所以问题是我们可以在 jasper reports 中做到这一点吗?

Pre printed form

最佳答案

移动所有报表元素的最简单方法是修改报表边距

jrxml加载到JasperDesign对象中并根据需要切换边距。您可以在 x 中移动的最小值是原始报告边距,最大值取决于您的报告(当然,columWidth 不能变为 0,但没有真正意义检查此更好地定义最大值)

示例:

JasperDesign design = JRXmlLoader.load("YourReport.jrxml");
moveDesign(design,x,y);
JasperReport report = JasperCompileManager.compileReport(design);

private void moveDesign(JasperDesign design, int x, int y) {
    int maxX = 100; //I define it so that elements is not out of report
    int maxY = 100;

    int pageWidth = design.getPageWidth();
    int intitalLeftMargin = design.getLeftMargin();
    int intitalRightMargin = design.getRightMargin();
    int intitalTopMargin= design.getTopMargin();

    //Check that not less then 0 and not more then my max       
    int newLeftMargin = Math.min(Math.max(intitalLeftMargin+x,0),maxX);
    int newTopMargin = Math.min(Math.max(intitalTopMargin+y,0),maxY);

    //set our new margins
    int newColumWidth = pageWidth - newLeftMargin - intitalRightMargin;
    design.setLeftMargin(newLeftMargin);
    design.setTopMargin(newTopMargin);
    design.setColumnWidth(newColumWidth);
}

这样做的缺点是您需要重新编译您的报告(这将需要几毫秒)。

如果执行速度至关重要,另一种解决方案(更复杂但可能更快)是移动 JasperPrint 中每个页面中的所有元素

我会将完整的代码留给OP,但它会与此类似

List<JRPrintPage> pages = jasperPrint.getPages();
for (JRPrintPage jrPrintPage : pages) {
    List<JRPrintElement> elements = jrPrintPage.getElements();
    for (JRPrintElement jjpe : elements) {
        jjpe.setX(newX);
        jjpe.setY(newX);    
    }   
}

关于java - 如何移动整个布局以适应不同打印机上的预打印表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696385/

相关文章:

jasper-reports - 将数据均匀分布到多列中

java - 如何在运行时以编程方式加载字体扩展?

java - JasperReport 与 struts2 一起使用的问题 - 在最终 PDF 文件中获取 null

java - 使用比较器对数组进行排序时出现 ClassCastException

java - 什么是 "Java Bean"?

java - 将最终变量传递给 MouseListener 方法并返回结果

java - 在weblogic 11 + linux中无法成功导出excel

java - 使用 OpenCSV 将 CSV 解析为多个/嵌套 bean 类型?

java - 如何配置 jetty 与 Guice 和 Vaadin 一起运行

java - 给出 Java 项目 (Netbeans) 中文件的固定路径