【发布时间】:2011-09-07 18:17:41
【问题描述】:
所以我在保存 pdf 时遇到了问题。 我想创建一个基于模板的清单,一个没有 acrofields 的模板。 该模板包含公司徽标和地址等一些数据。 我要做的是从模板中复制页面,将其粘贴到新文档中,然后向其中添加一个表格(带有库存的表格)。
我遇到的主要问题是我无法保存或显示结果。在我之前的所有项目中,我都使用了 memorystream,但现在使用 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();
}
}
【问题讨论】:
-
PdfCopy仅支持使用AddPage添加内容,您需要使用PdfWriter并使用PdfReader导入页面。 -
我按照你告诉我的 Lazarus 做了什么,但这对我也没有帮助。那时我发现页面上有 2 个更新面板,一个来自母版页,一个来自页面本身。这些面板具有相同的名称。一旦我删除了页面上的那个,一切都被修复了。
标签: c# asp.net itextsharp