Save PdfCopy with MemoryStream
所以我在保存我的PDF文件时遇到了问题。我想基于一个模板创建一个清单,一个没有acrofeld的模板。模板包含公司徽标和一些数据,如地址。我要做的是从模板中复制页面,将其粘贴到新文档中,然后向其中添加表(包含清单的表)。
我遇到的主要问题是我无法保存或显示结果。在我以前的所有项目中,我都使用了memoryStream,但现在当使用pdfcopy而不是pdfwritter时,这个方法似乎不起作用。
有人能帮我吗?这是我的密码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public void PrintInventory(string path, MemoryStream ms) { VoorraadService vService = new VoorraadService(); PdfReader reader; Document document; PdfCopy copy; try { var stock = vService.GetInventaris(); reader = new PdfReader(path +"Images/Inventaris_Template.pdf"); document = new Document(reader.GetPageSizeWithRotation(1)); copy = new PdfCopy(document, ms); document.Open(); while(stock.Count >0) { copy.AddPage(copy.GetImportedPage(reader, 1)); PdfPTable table = new PdfPTable(6); table.WidthPercentage = 100; for (int i = 0; i < 15 && stock.Count > 0; i++) { table.AddCell(new Phrase(stock[0].ArtikelID)); table.AddCell(new Phrase(stock[0].ExternArtikelID)); table.AddCell(new Phrase(stock[0].Naam)); table.AddCell(new Phrase(stock[0].Aankoopprijs.ToString())); table.AddCell(new Phrase(stock[0].Aantal.ToString())); table.AddCell(new Phrase(stock[0].Totaal.ToString())); stock.Remove(stock[0]); } table.CompleteRow(); copy.Add(table); } document.Close(); reader.Close(); } catch (Exception e) { return; } } |
打印按钮上的事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | protected void btnPrinten_Click(object sender, EventArgs e) { using (MemoryStream ms = new MemoryStream()) { ms.Position = 0; PdfGenerator pdf = new PdfGenerator(); pdf.PrintInventory(Request.Url.OriginalString.Replace("Applicatie/Voorraad/Inventory.aspx",""), ms); Response.ContentType ="application/pdf"; Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); Response.OutputStream.Flush(); Response.OutputStream.Close(); } } |
号
问题现在解决了。我的主要问题是更新面板,因为printButton没有引起真正的回发,所以无法完成文件的保存。这就是为什么我按下按钮时没有得到任何结果。现在,我把它用作updatepanel中的回发触发器,一切都解决了。
你们也说得对,我把它改成了一个作家,现在一切都正常了。
您需要将内存流写到一个文件中。您可以改为开始使用文件流。
ps:copy.close()还将关闭用它创建的流。
PPS:我不太确定您是否可以将表/段落等添加到pdfcopy实例中。我怀疑你必须用pdwriter正常地构建一个pdf文件,保存它(保存到一个memorystream是好的),然后用另一个阅读器再次打开它备份,把它添加到pdfcopy中。
您希望原始页和您的表位于同一页还是不同的页上?