CARVIEW |
Select Language
HTTP/2 200
date: Wed, 23 Jul 2025 20:41:58 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"cf1b961fcd8ff67391e5a1a9818cbd49"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=%2B955g%2Fphm7FG7AF4dHlO4iVGiH2FaMsn%2B%2FIhoO8A%2FzXW5tHKLxL2xNwDSCwIV80lTsM8rY8Q5KTwAxYeji9P6kNQXVZuyVh3v%2FMLlFviev6s3J7iwJsjuikXcTYm3JhiQOB7C88cdEGOtS1yAE08jCr354cIOp%2BghZ1AiVCTDq%2BDDxBbv3hivZY5cfT4SE6nhLkyj%2B56AltpJxGI%2BWFesyF7Bepker%2FK%2FxtghvYt4iQ6UTr3J89rInSCYTc9u%2FntoJ%2FcyOQRn6%2F8izxK1rSy%2Fw%3D%3D--NVVG%2F5un2u5236pV--GJbATRV3jTP3ITgwAiLOfQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1037035375.1753303317; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 20:41:57 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 20:41:57 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: AE3C:3AEC1B:E18E5:125BD4:68814915
Forms (AcroForms) · UglyToad/PdfPig Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 270
Forms (AcroForms)
davebrokit edited this page Jun 25, 2024
·
1 revision
Form fields for interactive forms (AcroForms) can be retrieved using:
bool hasForm = document.TryGetForm(out AcroForm form);
This will return false if the document does not contain a form.
The fields can be accessed using the AcroForm's Fields property. Since the form is defined at the document level this will return fields from all pages in the document. Fields are of the types defined by the enum AcroFieldType, for example PushButton, Checkbox, Text, etc.
Please note the forms are readonly and values cannot be changed or added using PdfPig.
using UglyToad.PdfPig;
using UglyToad.PdfPig.AcroForms;
using UglyToad.PdfPig.AcroForms.Fields;
using UglyToad.PdfPig.Core;
using UglyToad.PdfPig.Fonts.Standard14Fonts;
using UglyToad.PdfPig.Geometry;
using UglyToad.PdfPig.Writer;
var sourcePdfPath = @"C:\Users\David\Downloads\Aviva.pdf";
var outputPath = @"C:\Users\David\Downloads\Aviva.out.pdf";
var pageNumber = 1;
using (var document = PdfDocument.Open(sourcePdfPath))
{
var builder = new PdfDocumentBuilder { };
var boundingBlocks = new List<PdfRectangle>();
PdfDocumentBuilder.AddedFont font = builder.AddStandard14Font(Standard14Font.Helvetica);
var pageBuilder = builder.AddPage(document, pageNumber);
pageBuilder.SetStrokeColor(0, 255, 0);
var page = document.GetPage(pageNumber);
// 1. Check if has form fields
bool hasForm = document.TryGetForm(out AcroForm form);
// 2. Get fields for page
var fieldsForPage = form.GetFieldsForPage(pageNumber);
// 3. Iterate through each field pulling out information want/need
foreach (var field in fieldsForPage)
{
if (field is AcroTextField text)
{
// Text box. Can be single or multi line
Console.WriteLine($"TextField Value: {text.Value ?? ""}. Multiline: {text.IsMultiline}");
boundingBlocks.Add(field.Bounds.Value);
}
else if (field is AcroCheckboxField checkbox)
{
// Check box
Console.WriteLine($"Checkbox Value: {checkbox.CurrentValue.Data}");
boundingBlocks.Add(field.Bounds.Value);
}
else if (field is AcroComboBoxField comboBox)
{
// Combo box
Console.WriteLine($"Selected Options: {string.Join(",", comboBox.SelectedOptions)}");
boundingBlocks.Add(field.Bounds.Value);
}
else if (field is AcroNonTerminalField container)
{
// Checkbox or radio buttons. We need to recreate a bounding box containing all of them
var points = container.Children.Select(x => x.Bounds).SelectMany(ToPoints);
var containingBox = GeometryExtensions.MinimumAreaRectangle(points);
boundingBlocks.Add(containingBox);
}
else if (field is AcroSignatureField signatureField)
{
// ...
}
else if (field is AcroListBoxField listbox)
{
// ...
}
else if (field is AcroPushButtonField)
{
// ...
}
}
// 4. Add debug info - Bounding boxes
foreach (var bbox in boundingBlocks)
{
pageBuilder.DrawRectangle(bbox.BottomLeft, bbox.Width, bbox.Height);
}
// 5. Write result to a file
byte[] fileBytes = builder.Build();
File.WriteAllBytes(outputPath, fileBytes); // save to file
}
IEnumerable<PdfPoint> ToPoints(PdfRectangle? rectangle)
{
if (rectangle == null)
return Enumerable.Empty<PdfPoint>();
var pdfRectangle = rectangle.Value;
return new[] { pdfRectangle.BottomLeft, pdfRectangle.TopLeft, pdfRectangle.TopRight, pdfRectangle.BottomRight };
}
Clone this wiki locally
You can’t perform that action at this time.