java导出pdf横版_Crystal Report - 以横向和纵向导出为PDF

在纵向中将第一页导出为PDF

在横向中将第二页导出为PDF

使用第三方库合并两个PDF

这有点棘手,如果你使用的是ExportToStream,因为主要是公共的

report.ExportToStream(ExportFormatType formatType)

它会忽略FormatOptions . 相反,你需要使用

report.FormatEngine.ExportToStream(ExportRequestContext reqContext)

此代码应该执行您想要的操作(使用PdfSharp组合):

using CrystalDecisions.CrystalReports.Engine;

using CrystalDecisions.Shared;

using PdfSharp.Pdf;

using PdfSharp.Pdf.IO;

...

using (var report = new ReportClass { FileName = Server.MapPath("/Crystal/Reports/DosBatches.rpt") })

{

report.Load();

/* set data source connections */

/* set parameters */

// export the first page

report.PrintOptions.PaperOrientation = PaperOrientation.Portrait;

var exportOptions1 = new ExportOptions

{

ExportFormatType = ExportFormatType.PortableDocFormat,

FormatOptions = new PdfFormatOptions { UsePageRange = true, FirstPageNumber = 1, LastPageNumber = 1 }

};

exportRequestContext.ExportInfo = exportOptions1;

var stream1 = report.FormatEngine.ExportToStream(exportRequestContext);

stream1.Seek(0, SeekOrigin.Begin);

// export the second page

report.PrintOptions.PaperOrientation = PaperOrientation.Landscape;

var exportOptions2 = new ExportOptions

{

ExportFormatType = ExportFormatType.PortableDocFormat,

FormatOptions = new PdfFormatOptions { UsePageRange = true, FirstPageNumber = 2, LastPageNumber = 2 }

};

exportRequestContext.ExportInfo = exportOptions2;

var stream2 = report.FormatEngine.ExportToStream(exportRequestContext);

stream2.Seek(0, SeekOrigin.Begin);

// merge the two PDF streams

var combinedPdf = new PdfDocument();

foreach (PdfPage page in PdfReader.Open(stream1, PdfDocumentOpenMode.Import).Pages)

combinedPdf.AddPage(page);

foreach (PdfPage page in PdfReader.Open(stream2, PdfDocumentOpenMode.Import).Pages)

combinedPdf.AddPage(page);

// probably not the most efficient, but works

var output = new MemoryStream();

combinedPdf.Save(output, false);

return new FileStreamResult(output, "application/pdf");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值