使用MemoryStream保存PdfCopy
本文关键字:PdfCopy 保存 MemoryStream 使用 | 更新日期: 2023-09-27 17:58:16
所以我在保存pdf时遇到了问题。我想创建一个基于模板的库存,一个没有acrofields的模板。该模板包含公司徽标和一些数据,如地址。我想做的是从模板中复制页面,将其粘贴到新文档中,然后向其中添加一个表(带有库存的表)。
我遇到的主要问题是我无法保存或显示结果。在我以前的所有项目中,我都使用了内存流,但现在当使用pdfCopy而不是pdfWriter时,这种方法似乎不起作用。
有人能帮我吗?这是我的密码。
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; }
}
打印按钮上的事件:
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();
}
}
您需要将MemoryStream写入一个文件。您可以开始使用文件流。
PS:copy.close()也将关闭创建它时使用的流。
PPS:我不太确定你是否可以将表/段落等添加到PdfCopy实例中。我怀疑你必须用PdfWriter正常构建一个PDF,保存它(保存到内存流中也可以),然后用另一个阅读器再次打开它,将其添加到PdfCopy中。
您希望原始页面和表在同一页面上,还是不同的页面上?
现在问题解决了。我的主要问题是我的Updatepanel,因为打印按钮没有引起真正的回发,所以无法完成文件的保存。这就是为什么我按下按钮时没有得到任何结果。现在我在更新面板中将它用作回发触发器,所有问题都解决了。
你们对pdfcopy的看法也是正确的,我把它改成了一个作家,现在一切都正常了。