如何合并多个pdf文件(在运行时生成)ItextSharp然后打印它们.
我找到了以下链接,但该方法需要pdf名称考虑到存储的pdf文件,这不是我的情况.
我有多个报告我会pdf files通过这种方法将它们转换为:
private void AddReportToResponse(LocalReport followsReport)
{
string mimeType;
string encoding;
string extension;
string[] streams = new string[100];
Warning[] warnings = new Warning[100];
byte[] pdfStream = followsReport.Render("PDF", "", out mimeType, out encoding, out extension, out streams, out warnings);
//Response.Clear();
//Response.ContentType = mimeType;
//Response.AddHeader("content-disposition", "attachment; filename=Application." + extension);
//Response.BinaryWrite(pdfStream);
//Response.End();
}
Run Code Online (Sandbox Code Playgroud)
现在我想将所有生成的文件(Bytes)合并到一个pdf文件中进行打印
我是新手使用iTextSharp并使用Pdf文件,但我认为我走在正确的轨道上.
我遍历一个pdf文件列表,将它们转换为字节,并将所有结果字节推送到一个字节数组中.从那里我将字节数组传递给concatAndAddContent()以将所有pdf合并为一个大的pdf.目前我刚刚获得列表中的最后一个pdf(它们似乎被覆盖)
public static byte[] concatAndAddContent(List<byte[]> pdfByteContent)
{
byte[] allBytes;
using (MemoryStream ms = new MemoryStream())
{
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.SetPageSize(PageSize.LETTER);
doc.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
PdfReader reader;
foreach (byte[] p in pdfByteContent)
{
reader = new PdfReader(p);
int pages = reader.NumberOfPages;
// loop over document pages
for (int i = 1; i <= pages; i++)
{
doc.SetPageSize(PageSize.LETTER);
doc.NewPage();
page = writer.GetImportedPage(reader, i);
cb.AddTemplate(page, 0, 0);
}
}
doc.Close();
allBytes = …Run Code Online (Sandbox Code Playgroud) 我怎么会合并多个PDF页面转换成一个与iTextSharp它同时还支持有合并的网页形式的元素,如textboxes,checkboxes等.
我通过谷歌搜索尝试了这么多,但没有什么运作良好.
这就是我想要的,我想将页码添加到我动态生成的每个 pdf 页面中。
我使用了结束页方法,但即使我添加了文档下边距,它也没有成功。
我决定在从文件路径生成pdf后添加页码。这是我生成pdf的代码:
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("t5.pdf", FileMode.Create));
doc.Open();//Open Document to write
iTextSharp.text.Font font8 = FontFactory.GetFont("ARIAL", 7);
Paragraph paragraph = new Paragraph("Some content");
doc.Add(paragraph);
doc.Add(paragraph);// add paragraph to the document
doc.Close();
FileStream stream = File.OpenRead("t5.pdf");
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();
AddPageNumbers(fileBytes);
using (Stream file = File.OpenWrite("t5.pdf"))
{
file.Write(fileBytes, 0, fileBytes.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
她是我的添加页码方法:
MemoryStream ms = new MemoryStream();
PdfReader reader = new PdfReader(pdf); …Run Code Online (Sandbox Code Playgroud)