当前位置: 首页 > 知识库问答 >
问题:

itextsharp stamper vs smartcopy,在浏览器中显示pdf,不带工具栏或导航窗格

卫沈义
2023-03-14

我的应用程序从数据库中获取pdf字节,并使用itextsharp库将pdf发送到iframe。当pdf显示在iframe中时,工具栏和导航窗格将显示,但我们希望隐藏它们。在加载pdf文档时,只需使用#toolbar=0键入pdf的url即可

应用程序逻辑是使用PdfStamper向pdf添加一些按钮和其他数据。当我将pdf文件写入响应时。Outputstream,pdf显示了添加的按钮,除了我无法摆脱工具栏和导航窗格之外,一切都很好。我已尝试添加“toolbar=0”

我已经编写了一个测试应用程序,它表明使用PdfSmartCopy而不是stamper可以完美地工作——pdf显示在浏览器中,默认情况下隐藏工具栏和导航窗格。

问题是,我仍然需要通过母版向pdf添加一些按钮。我已经编写了一个测试应用程序,它通过压模添加按钮,然后智能复制从压模中抓取每页,并将所有这些内容写入响应。输出pdf显示在浏览器中,没有工具栏或导航窗格,但按钮不在那里。

以下是使用压模和智能副本的代码——非常感谢您的帮助:

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();
    }
}

共有1个答案

轩辕越泽
2023-03-14

如果我正确理解你的问题,你想使用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。也许我错过了什么。另外:在您的代码中也有一些奇怪的错误:您从未关闭过压模实例,但是您将一个页面从压模导入到复制实例中。我从未见过有人尝试过。这当然不是我写iText时的想法。你的代码让我很困惑。

 类似资料:
  • 问题内容: 如何在Web浏览器中的.html页面上显示pdf? 问题答案: 我使用的是Google文档可嵌入的PDF查看器。这些文档不必上传到Google文档,但必须在线提供。

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: 如何使用servlet在jsp中显示pdf文件 我从数据库中检索pdf文件,并将其放入这样的文件中 现在这是在服务器端。在我的客户端中,每当用户单击jsp页面中的说 href = pdf(pdf是我的servlet名称) 的链接时 ,我都应该在客户端的浏览器上显示从数据库检索到的文件。 我该怎么办? 问题答案: 将响应的内容类型

  • 问题内容: 在我的servlet中,我使用下面的代码在浏览器中打开PDF文件,但是,它显示了一个下载对话框。 我做错了什么? 问题答案: 你可以尝试用

  • 问题内容: 我是expressjs的新手,我无法使用数据对象发送响应。二进制内容在浏览器中可见。给我建议如何处理? 问题答案: 我测试了您的代码,它在chrome中对我有效,但有一个更改:更改为 编辑:由于您似乎认为仅POST服务器是一个好主意,请阅读:http : //net.tutsplus.com/tutorials/other/a-beginners-introduction-to-htt

  • 我的应用程序是一个全屏游戏的覆盖图(alwaysOnTop),当用户点击我的覆盖图时,它会聚焦并在游戏顶部显示任务栏。集中注意力是好的,但我不能有任务栏显示。 null 不是不能关注的工具箱窗口 这意味着有可能创建一个无法关注的窗口。 有人知道如何创建一个工具箱窗口,或者简单地避免在点击电子窗口时显示任务栏吗? 我应该提到我已经尝试了 和 。我还有 和 。 我创建的覆盖是“安全,中线,离线”按钮。

  • 在向应用添加导航栏和工具栏之前,我们需要决定使用哪种布局。 Framework7在这方面很自由,有3种不同类型的导航栏/工具栏布局,它们对应着在页面/视图中的不同位置。 静态布局 静态布局可能是最少使用的布局。在这种情况下,导航栏和工具栏只是可以滚动的页面内容的一部分,每个页面都有它自己的导航栏和工具栏: <body> ... <div class="views"> <div cl