【问题标题】:Concatenate PDF files with PDFSharp return blank pages使用 PDFSharp 连接 PDF 文件返回空白页
【发布时间】:2011-10-15 18:17:46
【问题描述】:

我尝试连接 rdlc 报告中的 2 个 PDF 数据。

问题是结果是空白页。

我不知道为什么,请有人帮助我。

这是我的代码:

private ActionResult ConcatPdf(byte[] pdfData1, byte[] pdfData2)
{
    MemoryStream ms1 = new MemoryStream(pdfData1);
    MemoryStream ms2 = new MemoryStream(pdfData2);

    PdfDocument inputDoc1 = PdfReader.Open(ms1, PdfDocumentOpenMode.Import);
    PdfDocument inputDoc2 = PdfReader.Open(ms2, PdfDocumentOpenMode.Import);

    PdfDocument outputDoc = new PdfDocument();

    foreach (PdfPage page in inputDoc1.Pages)
    {
        outputDoc.AddPage(page);
    }

    foreach (PdfPage page in inputDoc2.Pages)
    {
        outputDoc.AddPage(page);
    }

    MemoryStream outputMs = new MemoryStream();
    outputDoc.Save(outputMs);

    return File(outputMs.ToArray(), "application/pdf");
}

在生成报告功能如下:

public ActionResult TestPDF(int id)
{
    // Set report path.
    LocalReport rep = viewer.LocalReport;
    rep.ReportPath = Server.MapPath("~/Reports/rptExternalTransferIndividual.rdlc");
    rep.DataSources.Clear();


    //
    // Set data and parameter to report.
    //
    ...
    ...

    return ConcatPdf(viewer.LocalReport.Render("PDF"), viewer.LocalReport.Render("PDF"));
}

【问题讨论】:

    标签: c# pdf rdlc pdfsharp


    【解决方案1】:

    我知道这是旧的,但添加 HumanReadablePDF:

     string deviceInfo = "<DeviceInfo>" +
                        "  <OutputFormat>PDF</OutputFormat>" +
                        "  <PageWidth>29.7cm</PageWidth>" +
                        "  <PageHeight>21cm</PageHeight>" +
                        "  <MarginTop>0cm</MarginTop>" +
                        "  <MarginLeft>0cm</MarginLeft>" +
                        "  <MarginRight>0cm</MarginRight>" +
                        "  <MarginBottom>0cm</MarginBottom>" +
                        "  <HumanReadablePDF>True</HumanReadablePDF>" +
                        "</DeviceInfo>";
    
      byte[] reportBytes = LocalReport.Render(
                    "PDF", deviceInfo, out mimeType, out encoding,
                    out extension,
                    out streamids, out warnings);
    

    然后将字节数组返回给 PdfSharp。

    【讨论】:

    • 如果您不想修改所有尺寸,我只需要使用"&lt;DeviceInfo&gt;&lt;OutputFormat&gt;PDF&lt;/OutputFormat&gt;&lt;HumanReadablePDF&gt;True&lt;/HumanReadablePDF&gt;&lt;/DeviceInfo&gt;"
    【解决方案2】:

    报告查看器生成的 PDF 文件可能有一些不寻常之处。 我们需要样本文件来检查它。

    另见:

    http://forum.pdfsharp.net/viewtopic.php?f=3&t=1818&p=5174

    http://forum.pdfsharp.net/viewtopic.php?f=3&t=1730

    【讨论】:

    • 感谢您,我在使用 Report Viewer 生成的 PDF 时遇到了同样的问题,第二个链接中的信息修复了它...出于兴趣,该修复程序是否会合并到库的未来版本中?
    【解决方案3】:

    我使用 iTextSharp 做同样的事情。

    传递相同的参数 --> viewer.LocalReport.Render("PDF")。效果很好。

    这是我的代码:

    private ActionResult ConcatPdf(List<byte[]> pdfDataList)
    {
        MemoryStream outputMS = new MemoryStream();
        Document document = new Document();
        PdfCopy writer = new PdfCopy(document, outputMS);
        PdfImportedPage page = null;
    
        document.Open();
    
        foreach (byte[] pdfData in pdfDataList)
        {
            PdfReader reader = new PdfReader(pdfData);
            int n = reader.NumberOfPages;
    
            for (int i = 1; i <= n; i++)
            {
                page = writer.GetImportedPage(reader, i);
                writer.AddPage(page);
            }
    
            PRAcroForm form = reader.AcroForm;
            if (form != null)
                writer.CopyAcroForm(reader);
        }
    
        document.Close();
    
        return File(outputMS.ToArray(), "application/pdf");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      相关资源
      最近更新 更多