<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>dotnet pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</title>
    <link>https://blog-qa.groupdocs.cloud/zh/tag/dotnet-pdf-manipulation/</link>
    <description>Recent content in dotnet pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 16 Sep 2026 12:53:38 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/zh/tag/dotnet-pdf-manipulation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在 C# 中编辑签名</title>
      <link>https://blog-qa.groupdocs.cloud/zh/signature/edit-signatures-in-csharp/</link>
      <pubDate>Wed, 16 Sep 2026 12:53:38 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/zh/signature/edit-signatures-in-csharp/</guid>
      <description>了解如何使用 GroupDocs.Signature Cloud SDK for .NET 在 C# 中编辑已签名 PDF 中的签名。一步一步的指南，包含代码、cURL 和设置说明。</description>
      <content:encoded><![CDATA[<p>在 <a href="https://docs.fileformat.com/pdf">PDF</a> 已签名后编辑数字签名是常见需求，尤其是在业务规则更改或需要重新定位签名时。<a href="https://products.groupdocs.cloud/signature/net/">GroupDocs.Signature Cloud SDK for .NET</a> 提供了强大的库，使您能够以编程方式编辑已签名 PDF 文件中的签名，而不会影响文档的有效性。本指南将逐步带您完成完整实现，涵盖从配置到下载更新文件的所有内容，让您能够自信地将签名编辑集成到 C# 应用程序中。</p>
<h2 id="完整代码示例编辑已签名-pdf-中的签名">完整代码示例：编辑已签名 PDF 中的签名</h2>
<p>以下示例演示如何使用 GroupDocs.Signature Cloud SDK for .NET 编辑已签名 PDF 中的签名。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System.Collections.Generic;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System.IO;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> GroupDocs.Signature.Cloud.Sdk.Api;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> GroupDocs.Signature.Cloud.Sdk.Client;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> GroupDocs.Signature.Cloud.Sdk.Model;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> GroupDocs.Signature.Cloud.Sdk.Model.Requests;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Program</span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> Main()
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Configuration</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> config = <span style="color:#66d9ef">new</span> Configuration
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            ClientId = <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>,
</span></span><span style="display:flex;"><span>            ClientSecret = <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span>
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// API instances</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> signatureApi = <span style="color:#66d9ef">new</span> SignatureApi(config);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> storageApi = <span style="color:#66d9ef">new</span> StorageApi(config);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// File paths</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">string</span> inputFilePath = <span style="color:#e6db74">&#34;input.pdf&#34;</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">string</span> outputFilePath = <span style="color:#e6db74">&#34;output.pdf&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Ensure file exists in storage (upload if needed)</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (!storageApi.ObjectExists(<span style="color:#66d9ef">new</span> ObjectExistsRequest(<span style="color:#66d9ef">new</span> StorageExist
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            Path = inputFilePath,
</span></span><span style="display:flex;"><span>            StorageName = <span style="color:#66d9ef">null</span>
</span></span><span style="display:flex;"><span>        })).Exists)
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> fileStream = File.OpenRead(inputFilePath))
</span></span><span style="display:flex;"><span>            {
</span></span><span style="display:flex;"><span>                storageApi.UploadFile(<span style="color:#66d9ef">new</span> UploadFileRequest(<span style="color:#66d9ef">new</span> UploadFile
</span></span><span style="display:flex;"><span>                {
</span></span><span style="display:flex;"><span>                    Path = inputFilePath,
</span></span><span style="display:flex;"><span>                    File = fileStream
</span></span><span style="display:flex;"><span>                }));
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Get list of signatures in the document</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> fileInfo = <span style="color:#66d9ef">new</span> FileInfo
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            FilePath = inputFilePath,
</span></span><span style="display:flex;"><span>            StorageName = <span style="color:#66d9ef">null</span>,
</span></span><span style="display:flex;"><span>            Password = <span style="color:#66d9ef">null</span>
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> getSignaturesRequest = <span style="color:#66d9ef">new</span> GetSignaturesRequest(<span style="color:#66d9ef">new</span> GetSignaturesOptions
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            FileInfo = fileInfo
</span></span><span style="display:flex;"><span>        });
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (signaturesResponse.Signatures == <span style="color:#66d9ef">null</span> || signaturesResponse.Signatures.Count == <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            Console.WriteLine(<span style="color:#e6db74">&#34;No signatures found.&#34;</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">return</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Choose first signature to edit</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> signatureToEdit = signaturesResponse.Signatures[<span style="color:#ae81ff">0</span>];
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">string</span> signatureId = signatureToEdit.SignatureId;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Prepare new options (example: change text signature)</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> textOptions = <span style="color:#66d9ef">new</span> SignTextOptions
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Keep existing properties, modify as needed</span>
</span></span><span style="display:flex;"><span>            Text = <span style="color:#e6db74">&#34;Edited Signature Text&#34;</span>,
</span></span><span style="display:flex;"><span>            Left = signatureToEdit.Left + <span style="color:#ae81ff">10</span>,
</span></span><span style="display:flex;"><span>            Top = signatureToEdit.Top + <span style="color:#ae81ff">10</span>,
</span></span><span style="display:flex;"><span>            Width = signatureToEdit.Width,
</span></span><span style="display:flex;"><span>            Height = signatureToEdit.Height,
</span></span><span style="display:flex;"><span>            Font = <span style="color:#66d9ef">new</span> SignatureFont
</span></span><span style="display:flex;"><span>            {
</span></span><span style="display:flex;"><span>                FontFamily = <span style="color:#e6db74">&#34;Arial&#34;</span>,
</span></span><span style="display:flex;"><span>                FontSize = <span style="color:#ae81ff">12</span>,
</span></span><span style="display:flex;"><span>                Bold = <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>                Italic = <span style="color:#66d9ef">false</span>,
</span></span><span style="display:flex;"><span>                Underline = <span style="color:#66d9ef">false</span>,
</span></span><span style="display:flex;"><span>                Color = <span style="color:#e6db74">&#34;FF0000&#34;</span>
</span></span><span style="display:flex;"><span>            },
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Preserve other required fields</span>
</span></span><span style="display:flex;"><span>            SignatureId = signatureId,
</span></span><span style="display:flex;"><span>            PageNumber = signatureToEdit.PageNumber,
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Set output file path</span>
</span></span><span style="display:flex;"><span>            OutputFilePath = outputFilePath
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> updateSignatureRequest = <span style="color:#66d9ef">new</span> UpdateSignatureRequest(<span style="color:#66d9ef">new</span> UpdateSignatureOptions
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            FileInfo = fileInfo,
</span></span><span style="display:flex;"><span>            SignatureId = signatureId,
</span></span><span style="display:flex;"><span>            Options = textOptions
</span></span><span style="display:flex;"><span>        });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Download updated file</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">var</span> downloadRequest = <span style="color:#66d9ef">new</span> DownloadFileRequest(<span style="color:#66d9ef">new</span> DownloadFile
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            Path = outputFilePath,
</span></span><span style="display:flex;"><span>            StorageName = <span style="color:#66d9ef">null</span>
</span></span><span style="display:flex;"><span>        });
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> downloadStream = storageApi.DownloadFile(downloadRequest))
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> fileStream = File.Create(outputFilePath))
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            downloadStream.CopyTo(fileStream);
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Console.WriteLine(<span style="color:#e6db74">&#34;Signature edited and saved to &#34;</span> + outputFilePath);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><blockquote>
<p><strong>注意：</strong> 此代码示例演示了核心功能。在项目中使用之前，请确保更新所有文件路径和配置值以匹配实际环境，验证已正确安装所有必需的依赖项，并在开发环境中彻底测试。如果遇到任何问题，请参阅<a href="https://docs.groupdocs.cloud/signature/">官方文档</a>或联系<a href="https://forum.groupdocs.cloud/c/signature/13">支持团队</a>获取帮助。</p>
</blockquote>
<h2 id="curl-命令用于通过-rest-api-编辑签名">cURL 命令用于通过 REST API 编辑签名</h2>
<p>下面是一组 cURL 命令，用于通过 REST API 执行相同的在已签名 PDF 中编辑签名的操作。</p>
<p>首先，获取访问令牌。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/oauth2/token&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;grant_type&#34;:&#34;client_credentials&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;client_id&#34;:&#34;YOUR_CLIENT_ID&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;client_secret&#34;:&#34;YOUR_CLIENT_SECRET&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><p>将源 PDF 上传到云存储。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X PUT <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/octet-stream&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     --data-binary <span style="color:#e6db74">&#34;@input.pdf&#34;</span>
</span></span></code></pre></div><p>更新第一个签名（示例修改文本签名）。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/signature/update&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;fileInfo&#34;: {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;filePath&#34;: &#34;input.pdf&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;signatureId&#34;: &#34;SIGNATURE_ID_FROM_GET&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;options&#34;: {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;text&#34;: &#34;Edited Signature Text&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;left&#34;: 120,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;top&#34;: 150,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;font&#34;: {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">                   &#34;fontFamily&#34;: &#34;Arial&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">                   &#34;fontSize&#34;: 12,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">                   &#34;bold&#34;: true,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">                   &#34;color&#34;: &#34;FF0000&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;outputFilePath&#34;: &#34;output.pdf&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           }
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><p>下载更新的 PDF。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/output.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -o output.pdf
</span></span></code></pre></div><p>欲了解更多详情，请参阅<a href="https://docs.groupdocs.cloud/signature/">官方 API 文档</a>。</p>
<h2 id="了解-c-中的签名修改">了解 C# 中的签名修改</h2>
<p>以下是对提供的 C# 代码如何实现已签名 PDF 工作流中编辑签名的简要说明。</p>
<ol>
<li><strong>配置身份验证</strong> - <code>Configuration</code> 对象使用 <code>ClientId</code> 和 <code>ClientSecret</code> 填充。这建立了与云服务的安全会话。</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> config = <span style="color:#66d9ef">new</span> Configuration { ClientId = <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>, ClientSecret = <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span> };
</span></span></code></pre></div><ol start="2">
<li><strong>创建 API 实例</strong> - <code>SignatureApi</code> 和 <code>StorageApi</code> 使用配置实例化，提供对签名相关和存储相关端点的访问。</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> signatureApi = <span style="color:#66d9ef">new</span> SignatureApi(config);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> storageApi = <span style="color:#66d9ef">new</span> StorageApi(config);
</span></span></code></pre></div><ol start="3">
<li><strong>Upload If Missing</strong> - 代码检查 <code>input.pdf</code> 是否存在于云存储中；如果不存在，则使用 <code>UploadFile</code> 上传文件。这确保后续操作拥有源文档。</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>storageApi.UploadFile(<span style="color:#66d9ef">new</span> UploadFileRequest(<span style="color:#66d9ef">new</span> UploadFile { Path = inputFilePath, File = fileStream }));
</span></span></code></pre></div><ol start="4">
<li><strong>检索现有签名</strong> - <code>GetSignatures</code> 获取文档中的所有签名。选择第一个签名进行编辑，并存储其 <code>SignatureId</code>。</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> signatureToEdit = signaturesResponse.Signatures[<span style="color:#ae81ff">0</span>];
</span></span></code></pre></div><ol start="5">
<li><strong>准备更新的选项</strong> - 创建一个新的 <code>SignTextOptions</code> 对象，复制现有属性并更改文本、位置和字体。<code>SignatureId</code> 和 <code>PageNumber</code> 被保留，以定位正确的签名。</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> textOptions = <span style="color:#66d9ef">new</span> SignTextOptions { Text = <span style="color:#e6db74">&#34;Edited Signature Text&#34;</span>, Left = signatureToEdit.Left + <span style="color:#ae81ff">10</span>, <span style="color:#75715e">/* ... */</span> };
</span></span></code></pre></div><ol start="6">
<li>
<p><strong>Execute Update</strong> - <code>UpdateSignature</code> 将修改后的选项发送到服务器，服务器会重新写入签名，同时保持 PDF 的其他部分不变。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
</span></span></code></pre></div></li>
<li>
<p><strong>Download Result</strong> - 最后，已更新的 PDF 从存储下载到本地文件系统。</p>
</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> downloadStream = storageApi.DownloadFile(downloadRequest))
</span></span></code></pre></div><p>如需完整的类和方法列表，请参阅 <a href="https://reference.groupdocs.cloud/signature/">API 参考</a>。</p>
<h2 id="环境准备">环境准备</h2>
<p>在编写任何代码之前，请准备好您的开发环境。</p>
<ol>
<li><strong>通过 NuGet 安装 SDK</strong></li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dotnet add package GroupDocs.signature-Cloud
</span></span></code></pre></div><p>您也可以从<a href="https://releases.groupdocs.cloud/signature/net/">发布页面</a>下载最新的包。</p>
<ol start="2">
<li>
<p><strong>设置 .NET 运行时</strong> - 该库需要 .NET 6.0 或更高版本。确保您的项目针对兼容的框架。</p>
</li>
<li>
<p><strong>创建 GroupDocs Cloud 账户</strong> - 在 GroupDocs 门户注册并获取您的 <code>ClientId</code> 和 <code>ClientSecret</code>。这些凭证在每次 API 调用时都需要。</p>
</li>
<li>
<p><strong>Configure Credentials</strong> - 安全地存储凭据，例如在 <code>appsettings.json</code> 或环境变量中，并在构建 <code>Configuration</code> 对象时引用它们。</p>
</li>
<li>
<p><strong>验证连接性</strong> - 运行一个简单的请求（例如，<code>storageApi.ObjectExists</code>），以确认您的凭据有效且服务可访问。</p>
</li>
</ol>
<p>完成这些步骤后，您可以运行代码示例并开始编辑签名。</p>
<h2 id="结论">结论</h2>
<p>在已签名的 PDF 文档中编辑签名非常简单，只需使用 <a href="https://products.groupdocs.cloud/signature/net/">GroupDocs.Signature Cloud SDK for .NET</a>。按照上述步骤，您可以定位现有签名，修改其视觉属性，并在 C# 应用程序中保持文档完整性。请记得为生产环境获取合适的许可证；您可以购买完整许可证或从<a href="https://purchase.groupdocs.cloud/temporary-license/">临时许可证页面</a>获取临时许可证。立即开始集成签名编辑，简化文档工作流。</p>
<h2 id="常见问题">常见问题</h2>
<ul>
<li>
<p><strong>我可以在已签名的 PDF 中编辑签名而不破坏签名的有效性吗？</strong><br>
是的。SDK 仅更新可视化表示，同时保持加密哈希不变，因此文档仍然有效。</p>
</li>
<li>
<p><strong>编辑已签名 PDF 中的签名 与 在 .NET 中编辑已签名 PDF 中的签名 有何区别？</strong><br>
前者描述通用操作，而后者强调实现使用 .NET 版本的 GroupDocs.Signature Cloud SDK。</p>
</li>
<li>
<p><strong>我需要在编辑签名后重新签署 PDF 吗？</strong><br>
不需要。SDK 会修改现有签名对象的外观；原始数字签名保持不变。</p>
</li>
<li>
<p><strong>是否有可下载的示例项目？</strong><br>
是的，完整的示例可在 GitHub 仓库中获取：<a href="https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet">https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet</a>.</p>
</li>
</ul>
<h2 id="read-more">Read More</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/zh/signature/build-custom-electronic-signature-workflows-in-your-asp-net-csharp-vb-net-apps/">构建自定义电子签名工作流于您的 ASP.NET、C#、VB.NET 应用</a></li>
<li><a href="https://blog.groupdocs.cloud/zh/signature/edit-signatures-in-signed-pdf-documents-using-python/">使用 Python 编辑已签名 PDF 文档中的签名</a></li>
<li><a href="https://blog.groupdocs.cloud/zh/signature/digitally-sign-a-word-document-online/">如何在线对 Word 文档进行数字签名</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
