【问题标题】:How to Convert itextsharp document to byte array如何将 itextsharp 文档转换为字节数组
【发布时间】:2018-03-10 14:08:23
【问题描述】:

我正在尝试在此方法中合并两个 PDF 但成功添加后,我无法将 iTextSharp.text.Document 转换为 byte 数组。请帮帮我。

protected byte[] MergePDFs(byte[] First, byte[] Second, string RptTitle)
{

    iTextSharp.text.Document doc = new iTextSharp.text.Document();
    iTextSharp.text.pdf.PdfReader reader = null;
    int numberOfPages = 0;
    int currentPageNumber = 0;
    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, MemStream);
    doc.Open();
    iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
    iTextSharp.text.pdf.PdfImportedPage page = null;
    //Third, append all the PDFs--THIS IS THE MAGIC PART
    if (First != null)
    {
        reader = new iTextSharp.text.pdf.PdfReader(First);
        numberOfPages = reader.NumberOfPages;
        currentPageNumber = 0;
        while ((currentPageNumber < numberOfPages))
        {
            currentPageNumber += 1;
            doc.SetPageSize(iTextSharp.text.PageSize.A4);
            doc.NewPage();
            page = writer.GetImportedPage(reader, currentPageNumber);
            //we know that the page would always be in Potrait Format
            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 1);

        }
    }

    if (Second != null)
    {
        reader = new iTextSharp.text.pdf.PdfReader(Second);
        numberOfPages = reader.NumberOfPages;
        currentPageNumber = 0;
        while ((currentPageNumber < numberOfPages))
        {
            currentPageNumber += 1;
            doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
            //.Rotate());
            doc.NewPage();
            page = writer.GetImportedPage(reader, currentPageNumber);
            //we know that the page would always be in LandScape Format
            //  cb.AddTemplate(page,0, -1f, 1f, 0,0, reader.GetPageSizeWithRotation(currentPageNumber).Height+300);
            cb.AddTemplate(page, 1, 0, 0, 1, 0, 0);
        }
    }

    doc.Close();
    byte[] cc = StringToByteArray(doc.ToString());
    return cc;

【问题讨论】:

  • 请回答 Paolo 的问题:你从哪里得到这个例子?因此,我们可以追踪错误示例的来源,并对其进行更正或删除。您的合作有助于提高 iText 的质量。

标签: c# arrays itext pdf-generation


【解决方案1】:

我不知道你们从哪里得到这些例子,他们完全错了。

首先,使用PdfCopy,而不是PdfWriter。这样就可以正确导入正确的页面大小和方向。

其次,如果您的MemStreamMemoryStream,您将使用MemStream.ToArray() 来获取PDF 字节。

PS:doc.ToString() 的发明从何而来?完全是垃圾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多