所以我在保存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();
}
}
答案 0 :(得分:0)
您需要将MemoryStream写入文件。您可以开始使用文件流。
PS:copy.close()也将关闭它创建的流。
PPS:我不太确定你可以将表/段落等添加到PdfCopy实例中。我怀疑你必须使用PdfWriter正常构建PDF,保存它(保存到内存流),然后再用另一个读取器将其重新打开以将其添加到PdfCopy中。
您希望原始页面和表格位于同一页面上还是不同页面上?
答案 1 :(得分:0)
问题现在解决了。 我的主要问题是我的Updatepanel,因为printbutton没有导致真正的回发,所以无法完成文件的保存。 这就是我按下按钮时没有得到任何结果的原因。 现在我在updatepanel中将它用作回发触发器,所有问题都解决了。
你们对pdfcopy的看法也是正确的我把它改成了作家,现在一切都按照应有的方式进行。