itextSharp - 合并 pdf 文件会禁用扩展阅读器权限

2023-11-30

我正在使用 Itextsharp v5.1 并创建了启用的阅读器 pdf 文件。 我编写了一个 C# 类来填写表单并保留每个单独的 pdf 文件扩展阅读器。 但是,当我在这里使用这个 MergeFiles 函数时,它会创建一个新的合并文件而不是扩展阅读器,我需要您的帮助,请将其变成扩展阅读器...

我的 MergeFiles 函数是:

public static void MergeFiles(string destinationFile, string[] sourceFiles)
{
    try
    {
        //1:  Create the MemoryStream for the destination document.
        using (MemoryStream ms = new MemoryStream())
        {
            //2:  Create the PdfCopyFields object.
            PdfCopyFields copy = new PdfCopyFields(ms);
            // - Set the security and other settings for the destination file.
            //copy.Writer.SetEncryption(PdfWriter.STRENGTH128BITS, null, "1234", PdfWriter.AllowPrinting | PdfWriter.AllowCopy | PdfWriter.AllowFillIn);
            copy.Writer.ViewerPreferences = PdfWriter.PageModeUseOutlines;

            // - Create an arraylist to hold bookmarks for later use.
            ArrayList outlines = new ArrayList();
            int pageOffset = 0;
            int f = 0;
            //3:  Import the documents specified in args[1], args[2], etc...
            while (f < sourceFiles.Length)
            {
                //  Grab the file from args[] and open it with PdfReader.
                string file = sourceFiles[f];
                PdfReader reader = new PdfReader(file, PdfEncodings.ConvertToBytes("1234", null));
               // PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create), '\0', true);

                //  Import the pages from the current file.
                copy.AddDocument(reader);

                //  Create an ArrayList of bookmarks in the file being imported.
                //      ArrayList bookmarkLst = SimpleBookmark.GetBookmark(reader);
                //  Shift the pages to accomidate any pages that were imported before the current document.
                //     SimpleBookmark.ShiftPageNumbers(bookmarkLst, pageOffset, null);
                //  Fill the outlines ArrayList with each bookmark as a HashTable.
                //      foreach (Hashtable ht in bookmarkLst)
                //      {
                //         outlines.Add(ht);
                //     }
                //  Set the page offset to the last page imported.
                pageOffset += reader.NumberOfPages;
                f++;
            }
            //4:  Put the outlines from all documents under a new "Root" outline and 
            //    set them for destination document 
            //   copy.Writer.Outlines = GetBookmarks("Root", ((Hashtable)outlines[0])["Page"], outlines);
            //5:  Close the PdfCopyFields object.
                copy.Close();
            //6:  Save the MemoryStream to a file.
                MemoryStreamToFile(ms, destinationFile);
        }
    }
    catch (System.Exception e)
    {
        Console.Error.WriteLine(e.Message);
        Console.Error.WriteLine(e.StackTrace);
        Console.ReadLine();
    }
}
#endregion


#region MemoryStreamToFile
/// <summary>
/// Saves a MemoryStream to the specified file name
/// </summary>
/// <param name="MS">MemoryStream to save</param>
/// <param name="FileName">File name to save MemoryStream as</param>
public static void MemoryStreamToFile(MemoryStream MS, string FileName)
{
    using (FileStream fs = new FileStream(@FileName, FileMode.Create))
    {
        byte[] data = MS.ToArray();
        fs.Write(data, 0, data.Length);
        fs.Close();
    }
}
#endregion

读者权限只能由 Adob​​e 产品启用。它们基于自定义数字签名,该数字签名在文件修改后会失效。该数字签名的证书由 Adob​​e 所有,并且不公开,并且该数字签名的计算也没有记录。合并文件后,您无法以任何方式重新启用读者权限,除非您对合并的文件使用 Acrobat。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

itextSharp - 合并 pdf 文件会禁用扩展阅读器权限 的相关文章

  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 如何自定义 DataTable 列的排序

    我需要对数据表列的值进行排序 该列包含字符串 整数或混合文本 例如 数据表列包含如下值 23 18 12 store 23 store a1 1283 25 如果我使用对值进行排序Dataview sort 方法会按此顺序产生 12 128
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 将UIWebView显示的PDF保存到本地

    我有一个UIViewController与UIWebView显示一个 pdf 文件 具体取决于之前单击的行UITableView 现在我想添加一个按钮 供用户在本地保存此 pdf 文件以供离线使用 然后还有第二个UITableView它应该
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode

随机推荐

  • 带希腊字母、换行符和变量值的 R 绘图标题

    我正在尝试绘制标题 希腊字符以及变量的平均值 我希望我的情节标题看起来像这样 但居中 Title 1 2 我做了一些尝试 d lt rnorm 100 hist d main expression paste Title n mu mean
  • Thymeleaf:无法在 null 上找到获取属性或字段。列表内列表的迭代

    我正在尝试使用 thymeleaf 在我的 html 中迭代交易列表 在 AllTransaction 对象内 我进行了调试 并且在添加到模型时对象已正确填充 但在尝试迭代时给出了此异常 需要迭代 AllTransactions 中的交易列
  • Node.js:语法错误:无法在模块外部使用 import 语句

    我收到这个错误SyntaxError Cannot use import statement outside a module当尝试从另一个 javascript 文件导入时 这是我第一次尝试这样的事情 主要文件是main js模块文件是m
  • 浏览器的卸载事件

    HI 我想从客户端页面超时会话 我尝试了下面的代码 但无法执行代码 需要一些帮助来处理来自用户的 确定 或 取消 事件 The 卸载前事件只能用于向用户显示一个对话框 表明他 她将离开当
  • 成员变量和局部变量有什么区别?

    成员变量和局部变量有什么区别 它们是一样的吗 局部变量是您在函数中声明的变量 成员变量是您在类定义中声明的变量
  • 如何在Spring Interceptor preHandle方法中获取控制器方法名称

    在我使用的基于 spring mvc 和 spring security 的应用程序中 Controller用于配置控制器的注释 我已经配置了Spring 处理程序拦截器 and in preHandle method 我想获取将由拦截器调
  • 在复杂性分析中,为什么 ++ 被认为是 2 个操作?

    在我的计算机科学II课上 教授认为 等是2个操作 然而 在程序集级别 这实际上并不是两个操作 有人可以解释一下还是这只是为了简单起见 我实际上认为它是 3 个操作 读取 递增 或其他 写入 假设它从某种共享内存读取到某种本地存储 例如寄存器
  • 服务数据更改时更新范围值

    我的应用程序中有以下服务 uaInProgressApp factory uaProgressService function uaApiInterface timeout rootScope var factory factory tas
  • 解析/操作嵌套 JSON 时递归确保 tibbles 而不是数据帧

    我必须处理包含以下内容的 JSON 文档嵌套文档并且在某种程度上有一个array其中又包含个人文件从概念上讲 在 R 中读取 解析 JSON 时会映射回 数据框行 一阶问题 问题 我正在寻找一种方法来确保 要么全部data frames总是
  • css nth-child(2n+1) 过滤掉列表项后重新绘制CSS

    我有 20 多个项目的清单 使用 nth child 2n 1 选择器更改背景颜色 即偶数项黑色 奇数项白色 当我单击按钮使用 jQuery Isotope 插件过滤掉特定项目时 它会向我想要过滤掉的项目添加一个 isotope hidde
  • 从 Powershell 中的递归中排除文件夹

    我编写了以下脚本 将特定文件夹中的所有 MP4 文件移动到根文件夹 但是我希望该脚本忽略一个名为 Camera 的特定文件夹 我使用排除命令无济于事 有人可以帮忙吗 ignore Camera Get Childitem C Root ex
  • php脚本中最佳的MYSQL查询数是多少?

    我不是专业程序员 所以我不能确定这一点 您的脚本在一页上发送了多少个 mysql 查询 以及您的最佳查询数量是多少 例如 在 stackoverflow 的主页上 它列出了问题 显示了这些问题的作者 stackoverflow 为每个问题发
  • SSL 连接、Windows 证书存储和 CAPI 引擎

    我正在创建一个SSL使用 OpenSSL API 进行连接 众所周知 在 SSL 握手中 服务器或客户端会发生一系列证书身份验证 现在对于客户端证书身份验证 客户端的证书和关联的私钥存储在Windows Certificate Store
  • 如何处理重复条目的错误?

    我有一个 PHP 表单 可以将数据输入到我的 MySQL 数据库中 我的主键是用户输入的值之一 当用户输入表中已存在的值时 会返回 MySQL 错误 Duplicate entry entered value for key 1 我想提醒用
  • 如何创建带有描述的计划任务?

    我将 Microsoft Graph API 与 Net SDK 结合使用 我正在尝试创建一个新的 PlannerTask 并在执行此操作时提供描述 PlannerTask 的描述位于相关对象 PlannerTaskDetails 上 因此
  • 我应该担心指针转换期间的对齐吗?

    在我的项目中 我们有一段这样的代码 raw data consists of 4 ints unsigned char data 16 int i1 i2 i3 i4 i1 int data i2 int data 4 i3 int dat
  • 在 Play 框架中混合 scala 和 java

    我有一个如下所示的 Java 文件 package AuthorizeNetFingerprint class Fingerprint private static Log logger LogFactory getLog Fingerpr
  • 如何将 .npy 文件转换为 .binaryproto?

    我使用 python 创建了一个平均图像文件并将其保存到 numpy 文件中 我想知道如何将此 npy 文件转换为 binaryproto 文件 我正在使用此文件来使用 GoogLeNet 进行训练 您可以简单地使用 numpy 创建 bi
  • 将行指针 URL 生成到 Github Pull 请求中

    我正在尝试自动生成一个 URL 该 URL 可以指向 GitHub Pull 请求的文件差异视图中的行号 基本上 给定 URLhttps github com weppos whois pull 90 files我想生成如下 URLhttp
  • itextSharp - 合并 pdf 文件会禁用扩展阅读器权限

    我正在使用 Itextsharp v5 1 并创建了启用的阅读器 pdf 文件 我编写了一个 C 类来填写表单并保留每个单独的 pdf 文件扩展阅读器 但是 当我在这里使用这个 MergeFiles 函数时 它会创建一个新的合并文件而不是扩