0

我只想将我的数据库中的一些值放在 A4 页面上(我有一个 JPG 模板),并创建一个每页插入的 PDF 书/报告。我使用iReport 编辑器使用 NetBeans Java Jasper Reports轻松完成了它。

在 Visual Studio C# Crystal Reports 中似乎要困难得多。我真的搜索过水晶报表的教程,但没有一个是使用 A4 图像作为模板的。如果您知道任何此类教程,请帮助我。

我更喜欢以编程方式而不是通过向导工作的解决方案。我已经用我的程序管理了我的数据库。我只需要报告和一些有关如何为报告提供输入值的文档。我什至不需要报告访问数据库。我可以获得程序中的所有值。对我来说最好的解决方案是一个模板,其中我的 JPG 文件作为背景和框(如文本框),我通过函数的参数从我的程序中提供文本。像 Jasper Reports / iReport。

4

2 回答 2

1

好的,我花了一些时间找到一个简单的解决方案,我得到了以下信息:

首先,我没有使用 Crystal Reports,而是使用Windows Reports(rdlc 文件)。Windows 报告更加简单易用,可以添加图像作为背景,并在该图像上方添加一些引用字符串参数的文本框(正是我需要的)。默认情况下它们在 Visual Studio 中,您可以在 Visual Studio 中设计报告(在解决方案资源管理器中右键单击 --> 添加报告)

然后我找到了一个将报告转换为 PDF 文件的代码示例,我用它编写了以下类:

public class XReport
{
    private ReportViewer reportViewer = new ReportViewer();

    public XReport()
    {
    }
    public XReport(String reportFilePath)
    {
        setReportFile(reportFilePath);
    }
    // set rdlc file
    public void setReportFile(String reportFilePath)
    {
        reportViewer.Reset();
        reportViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = reportFilePath;
    }
    public void setParameters(List<ReportParameter> parameters)
    {
        reportViewer.LocalReport.SetParameters(parameters.ToArray());
        reportViewer.LocalReport.Refresh();
    }
    public void setParameters(Dictionary<String, String> parameters)
    {
        XList<ReportParameter> parameterList = new List<ReportParameter>();
        XList<String> parameterKeys = parameters.getKeys();
        foreach (String parameterKey in parameterKeys) {
            parameterList.Add(new ReportParameter(parameterKey, parameters.get(parameterKey))); }
        setParameters(parameterList);
    }
    public void exportToPDF(String pdfFilePath)
    {
        Warning[] warnings;
        string[] streamids;
        string mimeType = string.Empty;
        string encoding = string.Empty;
        string extension = string.Empty;
        byte[] bytes = null;
        // render PDF file
        try { bytes = reportViewer.LocalReport.Render( "PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); }
        catch (Exception ex) { System.Console.Write(ex.Message); }
        // write PDF file
        using (FileStream fs = new FileStream(pdfFilePath, FileMode.Create)) { fs.Write(bytes, 0, bytes.Length); fs.Close(); }
        // release reportViewer resources to avoid errors
        reportViewer.LocalReport.ReleaseSandboxAppDomain();
    }
}

有用。试试看。小心两件事:

  • 为 reportFilePath 和 pdfFilePath 使用正确的路径。(pdfFilePath 仅适用于我的非相对路径)

  • 确保您已在 rdlc 报告中添加了具有正确名称的所有参数。您可以在 View --> Report Data --> Add New Parameter (右键单击 Parameters) 中添加它们。另请参阅:在 rdlc 报告中创建参数

希望我有所帮助。它对我很有用。

于 2012-08-28T13:22:48.390 回答
0

您可以使用 Crystal 本身中的以下选项设置报告的纸张大小。首先打开报告,然后转到文件 -> 页面设置在此处输入图像描述

于 2012-07-22T09:09:55.807 回答