Я новичок в PDF Clown и в модификации PDF в целом. Я хочу добавить текст в новом слое/OCG в PDF-файл. В этом коде нужно добавить имя и номер в PDF-файл. Моя проблема в том, что этот текст/слой/OCG появляется под содержимым PDF. Я хочу добавить текст поверх содержимого. Вариант использования: если форма уже заполнена, я могу добавить белый прямоугольник поверх заполненной части и добавить текст поверх белого прямоугольника, но это не сработает, это добавляется только под содержание. Это мой код прямо сейчас:
using System;
using System.Drawing;
using org.pdfclown.documents;
using org.pdfclown.documents.contents;
using org.pdfclown.documents.contents.colorSpaces;
using org.pdfclown.documents.contents.composition;
using org.pdfclown.documents.contents.fonts;
using org.pdfclown.documents.contents.layers;
using org.pdfclown.files;
using org.pdfclown.objects;
namespace PDFClownOverlayReport
{
internal class Program
{
static void Main(string[] args)
{
string inputPath = @"C:\input.pdf";
string outputPath = @"C:\output.pdf";
using (var file = new org.pdfclown.files.File(inputPath))
{
Document document = file.Document;
Page page = document.Pages[0];
// Ensure layer definition exists
if (document.Layer == null)
{
document.Layer = new LayerDefinition(document);
}
//// Create a new layer for the rectangle
//Layer rectangleLayer = new Layer(document, "Rectangle Layer");
//// Add the rectangle layer to the document's layer collection
//document.Layer.Layers.Add(rectangleLayer);
//rectangleLayer.Visible = true;
// Create a content composer for the pagex
PrimitiveComposer composer = new PrimitiveComposer(page);
// Flush the existing content
composer.Flush();
// Begin a new content block
composer.BeginLocalState();
//// Begin the rectangle layer block
//composer.BeginLayer(rectangleLayer);
//// Set fill color to light blue for visibility
//composer.SetFillColor(new DeviceRGBColor(0.5, 0.5, 1)); // Light blue color
//// Draw a rectangle
//composer.DrawRectangle(new RectangleF(105, 115, 190, 20));
//composer.Fill();
//// End the local state for rectangle layer
//composer.End();
//// Flush the content for rectangle layer
//composer.Flush();
// Create a new layer for the text
Layer textLayer = new Layer(document, "Text Layer");
// Add the text layer to the document's layer collection
document.Layer.Layers.Add(textLayer);
textLayer.Visible = true;
// Begin a new content block for text layer
composer.BeginLocalState();
// Begin the text layer block
composer.BeginLayer(textLayer);
// Set font and size
composer.SetFont(new StandardType1Font(document, StandardType1Font.FamilyEnum.Helvetica, true, false), 12);
// Set text color to red for visibility
composer.SetFillColor(new DeviceRGBColor(0, 0, 0)); // Red color
// Add text on top of the rectangle
composer.ShowText("John Smith", new PointF(106, 128));
composer.ShowText("1234567890", new PointF(61, 147));
// End the local state for text layer
composer.End();
// Flush the content for text layer
composer.Flush();
// Save the modified document
file.Save(outputPath, SerializationModeEnum.Standard);
}
Console.WriteLine("PDF modified and saved successfully.");
}
}
}
Я попробовал запустить код и ожидал, что текст будет нарисован поверх содержимого, но вместо этого он был нарисован под содержимым.
Я новичок в PDF Clown и в модификации PDF в целом. Я хочу добавить текст в новом слое/OCG в PDF-файл. В этом коде нужно добавить имя и номер в PDF-файл. Моя проблема в том, что этот текст/слой/OCG появляется под содержимым PDF. Я хочу добавить текст поверх содержимого. Вариант использования: если форма уже заполнена, я могу добавить белый прямоугольник поверх заполненной части и добавить текст поверх белого прямоугольника, но это не сработает, это добавляется только под содержание. Это мой код прямо сейчас: [code]using System; using System.Drawing; using org.pdfclown.documents; using org.pdfclown.documents.contents; using org.pdfclown.documents.contents.colorSpaces; using org.pdfclown.documents.contents.composition; using org.pdfclown.documents.contents.fonts; using org.pdfclown.documents.contents.layers; using org.pdfclown.files; using org.pdfclown.objects;
namespace PDFClownOverlayReport { internal class Program { static void Main(string[] args) { string inputPath = @"C:\input.pdf"; string outputPath = @"C:\output.pdf";
using (var file = new org.pdfclown.files.File(inputPath)) { Document document = file.Document; Page page = document.Pages[0];
// Ensure layer definition exists if (document.Layer == null) { document.Layer = new LayerDefinition(document); }
//// Create a new layer for the rectangle //Layer rectangleLayer = new Layer(document, "Rectangle Layer");
//// Add the rectangle layer to the document's layer collection //document.Layer.Layers.Add(rectangleLayer); //rectangleLayer.Visible = true;
// Create a content composer for the pagex PrimitiveComposer composer = new PrimitiveComposer(page);
// Flush the existing content composer.Flush();
// Begin a new content block composer.BeginLocalState();
//// Begin the rectangle layer block //composer.BeginLayer(rectangleLayer);
//// Set fill color to light blue for visibility //composer.SetFillColor(new DeviceRGBColor(0.5, 0.5, 1)); // Light blue color
//// Draw a rectangle //composer.DrawRectangle(new RectangleF(105, 115, 190, 20)); //composer.Fill();
//// End the local state for rectangle layer //composer.End();
//// Flush the content for rectangle layer //composer.Flush();
// Create a new layer for the text Layer textLayer = new Layer(document, "Text Layer");
// Add the text layer to the document's layer collection document.Layer.Layers.Add(textLayer); textLayer.Visible = true;
// Begin a new content block for text layer composer.BeginLocalState();
// Begin the text layer block composer.BeginLayer(textLayer);
// Set font and size composer.SetFont(new StandardType1Font(document, StandardType1Font.FamilyEnum.Helvetica, true, false), 12);
// Set text color to red for visibility composer.SetFillColor(new DeviceRGBColor(0, 0, 0)); // Red color
// Add text on top of the rectangle composer.ShowText("John Smith", new PointF(106, 128)); composer.ShowText("1234567890", new PointF(61, 147));
// End the local state for text layer composer.End();
// Flush the content for text layer composer.Flush();
// Save the modified document file.Save(outputPath, SerializationModeEnum.Standard); }
Console.WriteLine("PDF modified and saved successfully."); } } }
[/code] Я попробовал запустить код и ожидал, что текст будет нарисован поверх содержимого, но вместо этого он был нарисован под содержимым.