首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同的文件中打印报表页面,动态提供文件名

在不同的文件中打印报表页面,动态提供文件名
EN

Stack Overflow用户
提问于 2013-06-18 20:52:00
回答 2查看 351关注 0票数 1

我遇到了对报告和报告打印的挑战性要求。要求是:创建一个报告(假设5页),每一页应该保存在不同的文件中,并通过代码动态提供文件名(使用该页上的记录id )。

目前,我尝试使用Access和VBA,可以获得X页的报告,但无法将报告的每一页保存在单独的文件中。我该如何做到这一点?

有没有其他技术可以帮助我实现这个目标--比如用C#或Java编程?我被困在这件事上三天了。

谢谢

我的访问代码和问题:

代码语言:javascript
运行
复制
Private Sub Report_Click()
 Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim MyFilename As String
Dim MyPath As String
Dim temp As String
Set db = CurrentDb
MyPath = "c:\temp\"
Dim stremp As String
stremp = "select distinct(empno) from query2"
Set rs = db.OpenRecordset(stremp)
Do While Not rs.EOF
    temp = rs("Empno")
    MyFilename = rs("EMPNO") & ".PDF"
    DoCmd.OpenReport "FORM", acViewReport, "EMPNO" = " & temp"
    'DoCmd.OpenReport "form", acViewPreview, , "empno", acWindowNormal
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename
    'do.cmd.outputto
    DoCmd.Close acReport, "FORM"
     DoEvents
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
 End Sub

记录集有5条记录,即5页。它打印5次5页,例如,对于Record1,我得到所有5个记录,Record2 -所有5个记录,依此类推。相反,我应该只为Record1创建一个,为Record2创建一个,依此类推。

有没有人能帮我找出我的代码哪里错了/哪里不合适。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 21:28:07

您可以将任务拆分为:

  1. 将完整报告生成为一个文件
  2. 将报告的每一页存储为不同的文件。

如果你已经完成了第一部分,如果你可以将你的报告保存为pdf文件,对于第二部分,我可以建议使用iText。它是java库,但也有到c#的端口。

小示例:

代码语言:javascript
运行
复制
    String folder = "/home/user/report/";
    InputStream is = new FileInputStream(folder + "test.pdf");
    PdfReader reader = new PdfReader(is);

    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        File tmp = new File(folder + "out" + i +".pdf");
        FileOutputStream outStream = new FileOutputStream(tmp);
        Document pdDoc = new Document(PageSize.A4);
        PdfWriter writer = PdfWriter.getInstance(pdDoc, outStream);
        pdDoc.open();
        PdfContentByte cb = writer.getDirectContent();
        PdfImportedPage page = writer.getImportedPage(reader, i);
        pdDoc.newPage();
        cb.addTemplate(page, 0, 0);
        pdDoc.close();
    }
票数 1
EN

Stack Overflow用户

发布于 2013-06-19 01:19:17

你能告诉我为什么我的访问代码不能完成这项工作吗?

此语句存在问题:

代码语言:javascript
运行
复制
DoCmd.OpenReport "FORM", acViewReport, "EMPNO" = " & temp"

DoCmd.OpenReport的第三个参数是[FilterName],它是“一个字符串表达式,它是当前数据库中查询的有效名称”。不幸的是,

代码语言:javascript
运行
复制
"EMPNO" = " & temp"

是一个始终为False的布尔表达式,因为这两个字符串不相等。我想你的脑海中有更多类似的东西:

代码语言:javascript
运行
复制
DoCmd.OpenReport "FORM", acViewReport, , "EMPNO = " & temp

其中,第四个参数[WhereCondition]是“一个字符串表达式,它是一个有效的SQL where子句,不带WHERE一词。”

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

https://stackoverflow.com/questions/17169366

复制
相关文章

相似问题

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