C# 合并PDF时,第二个字节[]覆盖第一个字节[]

C# 合并PDF时,第二个字节[]覆盖第一个字节[],c#,arrays,asp.net-mvc-4,pdf,itext,C#,Arrays,Asp.net Mvc 4,Pdf,Itext,我已经生成了两个PDF字节数组,并将这两个数组组合成一个字节数组。现在,当我通过Controller中的ActionMethod呈现PDF时,它只为Combine()方法中传递的第二个字节[]生成PDF。 如: (一) 如果我写上面的代码,它只生成带有pdfbytes 2数组数据的PDF,并且pdfbytes 1数组数据被覆盖 2) 现在,如果更改顺序并写入: public ActionResult ShowPdf(string id1, string id2) {

我已经生成了两个PDF字节数组,并将这两个数组组合成一个字节数组。现在,当我通过
Controller
中的
ActionMethod
呈现PDF时,它只为
Combine()
方法中传递的第二个
字节[]
生成PDF。 如: (一)

如果我写上面的代码,它只生成带有
pdfbytes 2
数组数据的PDF,并且
pdfbytes 1
数组数据被覆盖

2) 现在,如果更改顺序并写入:

 public ActionResult ShowPdf(string id1, string id2)
        {
            byte[] pdfBytes1 = CreatePdf1(id1);
            byte[] pdfBytes2 = CreatePdf2(id2);
            byte[] combinedPdfData = Combine(pdfBytes2, pdfBytes1);
            return File(combinedPdfData, "application/pdf");
        }
此方法仅使用
pdfBytes1
数组数据生成PDF

我的Combine()方法代码是:

public static byte[] Combine(byte[] first, byte[] second)
        {
            byte[] ret = new byte[first.Length + second.Length];
            Buffer.BlockCopy(first, 0, ret, 0, first.Length);
            Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
            return ret;
        }

调试时,我可以看到
combinedPdfData
数组包含总字节数,即
pdfBytes1[]+pdfBytes2[]
,但在打印时,它只打印一个数组的数据。请告诉我哪里做错了

您错误地认为可以通过连接字节来连接两个pdf文件


您需要使用pdf创作库读入两个旧文档并将它们合并为新文档。

您错误地认为可以通过连接字节来连接两个pdf文件


您需要使用pdf创作库来读入两个旧文档并将它们合并为一个新文档。

您不能仅仅将两个pdf字节数组串联起来,然后期望结果将是一个有效的pdf文档。您需要一个库来创建新的PDF(
输出
),并将两个原始PDF合并到一个新的有效PDF中

在iText 5(iText的旧版本)中,代码如下所示:

Document doc = new Document();
PdfCopy copy = new PdfCopy(document, output);
document.Open();
PdfReader reader1 = new PdfReader(pdfBytes1);
copy.AddDocument(reader1);
PdfReader reader2 = new PdfReader(pdfBytes2);
copy.AddDocument(reader2);
reader1.Close();
reader2.Close();
document.Close(); 
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages());
firstSourcePdf.Close();
secondSourcePdf.Close();
pdf.Close();
在iText 7(iText的新版本;推荐)中,代码如下所示:

Document doc = new Document();
PdfCopy copy = new PdfCopy(document, output);
document.Open();
PdfReader reader1 = new PdfReader(pdfBytes1);
copy.AddDocument(reader1);
PdfReader reader2 = new PdfReader(pdfBytes2);
copy.AddDocument(reader2);
reader1.Close();
reader2.Close();
document.Close(); 
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages());
firstSourcePdf.Close();
secondSourcePdf.Close();
pdf.Close();

您不能仅仅连接2个PDF字节数组,并期望结果将是一个有效的PDF文档。您需要一个库来创建新的PDF(
输出
),并将两个原始PDF合并到一个新的有效PDF中

在iText 5(iText的旧版本)中,代码如下所示:

Document doc = new Document();
PdfCopy copy = new PdfCopy(document, output);
document.Open();
PdfReader reader1 = new PdfReader(pdfBytes1);
copy.AddDocument(reader1);
PdfReader reader2 = new PdfReader(pdfBytes2);
copy.AddDocument(reader2);
reader1.Close();
reader2.Close();
document.Close(); 
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages());
firstSourcePdf.Close();
secondSourcePdf.Close();
pdf.Close();
在iText 7(iText的新版本;推荐)中,代码如下所示:

Document doc = new Document();
PdfCopy copy = new PdfCopy(document, output);
document.Open();
PdfReader reader1 = new PdfReader(pdfBytes1);
copy.AddDocument(reader1);
PdfReader reader2 = new PdfReader(pdfBytes2);
copy.AddDocument(reader2);
reader1.Close();
reader2.Close();
document.Close(); 
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages());
firstSourcePdf.Close();
secondSourcePdf.Close();
pdf.Close();

标记问题时:可以使用iText(夏普)合并pdf文件。标记问题时:可以使用iText(夏普)合并pdf文件。