在不同的文件中打印报表页面,动态提供文件名
本文关键字:动态 文件名 报表 文件 打印 | 更新日期: 2023-09-27 18:18:49
我遇到了一个具有挑战性的报告和报告打印需求。需求是:创建一个报告(假设有5页),每一页应该保存在不同的文件中,并通过代码动态地提供文件名(使用该页上的记录id)。
目前,我尝试使用Access和VBA,我可以得到X页的报告,但无法将报告的每一页保存在单独的文件中。
有没有其他技术可以帮助我实现这个目标-也许c#或Java编程可以帮助我?我已经为此纠结了3天了
感谢我的访问码和问题:
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创建1个,为Record2创建1个,等等。
谁能帮我知道我的代码是错误的/不合适的。
谢谢
您可以将任务拆分为:
-
生成完整的报告作为一个文件
-
将每一页报告保存为不同的文件
如果您已经完成了第一部分,并且如果您可以将报告存储为pdf文件,那么第二部分我可以建议使用iText
。它是一个java库,但也有c#的端口。
小例子:
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();
}
你能告诉我,为什么我的Access代码不能工作吗?
这个语句有问题:
DoCmd.OpenReport "FORM", acViewReport, "EMPNO" = " & temp"
DoCmd.OpenReport
的第三个参数是[FilterName]
,它是"当前数据库中查询的有效名称的字符串表达式"。不幸的是,
"EMPNO" = " & temp"
是一个布尔表达式,它总是False
,因为两个字符串不相等。我想你的想法应该是这样的:
DoCmd.OpenReport "FORM", acViewReport, , "EMPNO = " & temp
其中第四个参数[WhereCondition]
是"一个字符串表达式,它是一个有效的SQL where子句,不包含单词where。"