首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式降低导出的BIRT PDF报表的页边距?

如何以编程方式降低导出的BIRT PDF报表的页边距?
EN

Stack Overflow用户
提问于 2012-02-24 09:28:58
回答 2查看 1.7K关注 0票数 1

是否有一种方法可以使用BIRT API来降低报表的页边距?

我尝试将PDF呈现选项设置为:

代码语言:javascript
复制
PDFRenderOption renderOption = new PDFRenderOption();
renderOption.setOutputFormat(PDFRenderOption.OUTPUT_FORMAT_PDF);
renderOption.setOption(IPDFRenderOption.PDF_HYPHENATION, true);
renderOption.setOption(IPDFRenderOption.PDF_TEXT_WRAPPING, true);
renderOption.setOption(IPDFRenderOption.PAGE_OVERFLOW,
                       IPDFRenderOption.ENLARGE_PAGE_SIZE);

基本上,我遇到的问题是,如果列中有一个较长的文本(从一个表中),它将在下一行得到它,但是如果我将IPDFRenderOption.PDF_HYPHENATION设置为false,我将在文本的中间分割文本(参见下面)。

IPDFRenderOption.PDF_HYPHENATION设置为true的PDF格式

IPDFRenderOption.PDF_HYPHENATION设置为false的PDF格式

因此,我试图将PDF的范围设置得更小,以克服这个问题,但我没有找到任何关于如何使用BIRT API实现此操作的文档.有修改母版页的,但是我有太多的报告无法手动修改它们。

我该如何处理这个问题?这是否可能使用BIRT API?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-27 17:07:44

我所需要做的就是遍历所有句柄,测试其中哪个是,并用以下键调用setProperty

  • MasterPageHandle.BOTTOM_MARGIN_PROP
  • MasterPageHandle.LEFT_MARGIN_PROP
  • MasterPageHandle.RIGHT_MARGIN_PROP
  • MasterPageHandle.TOP_MARGIN_PROP

还有我需要的。

代码样本

代码语言:javascript
复制
  @SuppressWarnings("unchecked")
  private void shrinkPageSizeForExport(IReportRunnable reportRunnable) {
    DesignElementHandle designHandle = reportRunnable.getDesignHandle();
    IElementDefn elementDefn = designHandle.getDefn();
    for (int i = 0; i < elementDefn.getSlotCount(); i++) {
      SlotHandle slotHandle = designHandle.getSlot(i);
      for (DesignElementHandle elementHandle: (List<DesignElementHandle>)slotHandle.getContents()) {
        if (!(elementHandle instanceof MasterPageHandle)) continue;

        MasterPageHandle mph = (MasterPageHandle)elementHandle;
        DimensionValue dv = new DimensionValue(0.1, "cm");
        setAllMarginsTo(mph, dv);
      }
    }
  }

  private void setAllMarginsTo(MasterPageHandle mph, DimensionValue dv) {
    try {
      mph.setProperty(MasterPageHandle.BOTTOM_MARGIN_PROP, dv);
      mph.setProperty(MasterPageHandle.LEFT_MARGIN_PROP, dv);
      mph.setProperty(MasterPageHandle.RIGHT_MARGIN_PROP, dv);
      mph.setProperty(MasterPageHandle.TOP_MARGIN_PROP, dv);
    } catch (SemanticException se) {
      throw new RuntimeException("Cannot set margins for report export!", se);
    }
  }
票数 2
EN

Stack Overflow用户

发布于 2013-03-29 17:41:27

备选建议:

在BIRT库中构建一个MasterPage,并在所有报表上使用它。然后,所有使用它的报告可以一次更新。如果您没有从库MasterPages开始,您可以用库母版页替换报表MasterPage,比尝试重新编码它们更快。

像DataSources和MasterPages这样的东西几乎总是比库项目更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9428330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档