C# 合并PDF时,第二个字节[]覆盖第一个字节[]
我已经生成了两个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) {
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文件。