我正在使用 BIRT 生成包含数据图表和数据表的 PDF 报告。我有创建 BIRT PDF 的 TestNG 单元测试,然后我想将创建的 PDF 与基线报告进行比较。我不能使用 MD5 散列,因为每个报告在页脚中都有时间戳,并且时间戳总是在变化。我尝试使用 PDPage 和 PDResources 从 PDF 中获取所有图像,但图表似乎不是图像 b/c 从 PDResources 对象调用 getImages 返回 0 个图像。使用 PDFBox 我可以抓取 PDF 的其他哪些元素并与基线 PDF 进行比较以验证相等性?PDF 的格式如下,第 1 页将包含标题、开始日期/时间标签、结束日期/时间标签、报告说明,然后是一个或多个图表,然后是 1 个表格。
问问题
217 次
1 回答
0
我使用的解决方案是使用 PDFBox 解析 BIRT PDF 报告,但删除包含页脚的预定义文本字符串并比较两个 ArrayList。
pdfDoc = PDDocument.load(docname);
List pages = pdfDoc.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while(iter.hasNext())
{
PDPage page = (PDPage) iter.next();
String unparsedLine = page.getContents().getInputStreamAsString();
documentStreamList.add(unparsedLine.replaceAll(DATE_FOOTER_FORMAT, ""));
}
此代码将返回 PDF 包含的字符串列表,并将其与基线 BIRT 报告进行比较。所有数据都将得到同等解析,并且当它们相同时报告匹配。我从来没有找到直接比较生成的图表的方法。
于 2013-02-04T21:14:54.737 回答