我的应用程序从我们的数据库中获取pdf字节,并使用itextsharp库将pdf发送到iframe。当pdf显示在iframe中时,工具栏和导航窗格会显示,但我们想隐藏这些内容。当我通过使用#toolbar = 0& navpanes = 0输入pdf的url来加载pdf文档时,我会看到我正在寻找的结果。
应用程序逻辑正在使用PdfStamper向pdf添加一些按钮和其他数据。当我将pdf写入Response.Outputstream时,pdf会显示添加的按钮,除了我无法摆脱工具栏和navpanes之外,一切都很好。我已经尝试将“toolbar = 0& navpanes = 0”添加到响应标头中的url,但无济于事。
我写了一个测试应用程序,显示使用PdfSmartCopy而不是压模工作完美 - pdf显示在浏览器中,默认隐藏工具栏和navpane。
问题是我仍然需要通过压模向pdf添加一些按钮。我写了一个测试应用程序,通过压模添加按钮,然后智能副本从压模抓取每个页面并将所有这些写入Response.Output。 pdf在浏览器中显示没有工具栏或navpanes,但按钮不存在。
以下是使用压模和智能副本的代码 - 非常感谢您的帮助:
private void SendStamperToCopy()
{
try
{
String filePath = @"C:\debug\PerfIndicWithDefaults.pdf";
byte[] pdfBytes = ReadFile(filePath);
Document document = new Document();
PdfSmartCopy copy = new PdfSmartCopy(document, Response.OutputStream);
document.Open();
MemoryStream memStream = new MemoryStream();
PdfReader reader = new PdfReader(pdfBytes);
PdfStamper pdfStamper = new PdfStamper(reader, memStream);
// add a button with the stamper
iTextSharp.text.Rectangle rectCancel = new iTextSharp.text.Rectangle(50, 50, 20, 20);
PushbuttonField btnCancel = new PushbuttonField(pdfStamper.Writer, rectCancel, "Cancel");
btnCancel.Text = "Cancel";
iTextSharp.text.pdf.PdfAnnotation fieldCancel = btnCancel.Field;
pdfStamper.AddAnnotation(fieldCancel, 1);
int numOfPgs = reader.NumberOfPages;
for (int n = 1; n <= numOfPgs; n++)
{
copy.AddPage(pdfStamper.GetImportedPage(reader, n));
}
String headerStr = "inline; filename=PerfIndicWithDefaults.pdf";
Response.AppendHeader("content-disposition", headerStr);
Response.ContentType = "application/pdf";
Response.OutputStream.Flush();
document.Close();
Response.OutputStream.Close();
}
catch (Exception ex)
{
Console.Write(ex);
Response.OutputStream.Flush();
Response.OutputStream.Close();
}
}
答案 0 :(得分:0)
如果我正确理解您的问题,您希望使用PdfStamper
添加按钮,并且您想要更改查看器首选项。这可以这样做:
PdfReader reader = new PdfReader(source);
System.IO.MemoryStream m = new System.IO.MemoryStream();
PdfStamper stamper = new PdfStamper(reader, m);
PdfStamper.ViewerPreferences = PdfWriter.HideToolbar | PdfWriter.PageModeUseNone;
stamper.Close();
reader.Close();
HideToolbar
会隐藏工具栏,而PageModeUseNone
则表示您不显示任何面板(例如书签面板等)。
目前尚不清楚为什么在此上下文中需要PdfSmartCopy
。也许我错过了什么。另外:您的代码中存在一些奇怪的错误:您从未关闭stamper
实例,但是您将页面从stamper
导入copy
实例。我从来没有见过任何人尝试过。当我写iText时,这肯定不是我想到的。你的代码对我来说很混乱。