diff --git a/src/UglyToad.PdfPig/Graphics/Core/TextRenderingMode.cs b/src/UglyToad.PdfPig.Core/TextRenderingMode.cs
similarity index 97%
rename from src/UglyToad.PdfPig/Graphics/Core/TextRenderingMode.cs
rename to src/UglyToad.PdfPig.Core/TextRenderingMode.cs
index fd1749a1..58c3b0db 100644
--- a/src/UglyToad.PdfPig/Graphics/Core/TextRenderingMode.cs
+++ b/src/UglyToad.PdfPig.Core/TextRenderingMode.cs
@@ -1,4 +1,4 @@
-namespace UglyToad.PdfPig.Graphics.Core
+namespace UglyToad.PdfPig.Core
{
///
/// The text rendering mode determines whether showing text causes glyph outlines to be stroked, filled, used as a clipping boundary,
@@ -45,4 +45,4 @@
///
NeitherClip = 7
}
-}
\ No newline at end of file
+}
diff --git a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
index fbadf78e..84a0f02f 100644
--- a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
+++ b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs
@@ -189,6 +189,62 @@
}
}
+ [Fact]
+ public void CanWriteSinglePageInvisibleHelloWorld()
+ {
+ var builder = new PdfDocumentBuilder();
+
+ PdfPageBuilder page = builder.AddPage(PageSize.A4);
+
+ PdfDocumentBuilder.AddedFont font = builder.AddStandard14Font(Standard14Font.Helvetica);
+
+ page.SetTextRenderingMode(TextRenderingMode.Neither);
+
+ page.AddText("Hello World!", 12, new PdfPoint(25, 520), font);
+
+ var b = builder.Build();
+
+ WriteFile(nameof(CanWriteSinglePageInvisibleHelloWorld), b);
+
+ using (var document = PdfDocument.Open(b))
+ {
+ var page1 = document.GetPage(1);
+
+ Assert.Equal(new[] { "Hello", "World!" }, page1.GetWords().Select(x => x.Text));
+ }
+ }
+
+ [Fact]
+ public void CanWriteSinglePageMixedRenderingMode()
+ {
+ var builder = new PdfDocumentBuilder();
+
+ PdfPageBuilder page = builder.AddPage(PageSize.A4);
+
+ PdfDocumentBuilder.AddedFont font = builder.AddStandard14Font(Standard14Font.Helvetica);
+
+ page.AddText("Hello World!", 12, new PdfPoint(25, 520), font);
+
+ page.SetTextRenderingMode(TextRenderingMode.Neither);
+
+ page.AddText("Invisible!", 12, new PdfPoint(25, 500), font);
+
+ page.SetTextRenderingMode(TextRenderingMode.Fill);
+
+ page.AddText("Filled again!", 12, new PdfPoint(25, 480), font);
+
+ var b = builder.Build();
+
+ WriteFile(nameof(CanWriteSinglePageMixedRenderingMode), b);
+
+ using (var document = PdfDocument.Open(b))
+ {
+ var page1 = document.GetPage(1);
+
+ Assert.Equal(new[] { "Hello", "World!", "Invisible!", "Filled", "again!" }, page1.GetWords().Select(x => x.Text));
+ }
+ }
+
[Fact]
public void CanWriteSinglePageHelloWorld()
{
diff --git a/src/UglyToad.PdfPig/Graphics/Core/RenderingModeExtensions.cs b/src/UglyToad.PdfPig/Graphics/Core/RenderingModeExtensions.cs
index b5db796e..88fafb64 100644
--- a/src/UglyToad.PdfPig/Graphics/Core/RenderingModeExtensions.cs
+++ b/src/UglyToad.PdfPig/Graphics/Core/RenderingModeExtensions.cs
@@ -1,5 +1,7 @@
namespace UglyToad.PdfPig.Graphics.Core
{
+ using UglyToad.PdfPig.Core;
+
internal static class RenderingModeExtensions
{
public static bool IsFill(this TextRenderingMode mode)
@@ -26,4 +28,4 @@
|| mode == TextRenderingMode.NeitherClip;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UglyToad.PdfPig/Graphics/Operations/TextState/SetTextRenderingMode.cs b/src/UglyToad.PdfPig/Graphics/Operations/TextState/SetTextRenderingMode.cs
index 8e4119cb..c7279566 100644
--- a/src/UglyToad.PdfPig/Graphics/Operations/TextState/SetTextRenderingMode.cs
+++ b/src/UglyToad.PdfPig/Graphics/Operations/TextState/SetTextRenderingMode.cs
@@ -1,6 +1,7 @@
namespace UglyToad.PdfPig.Graphics.Operations.TextState
{
using System.IO;
+ using PdfPig.Core;
using Core;
///
@@ -22,6 +23,14 @@
///
public TextRenderingMode Mode { get; }
+ ///
+ /// Create a new .
+ ///
+ public SetTextRenderingMode(TextRenderingMode mode)
+ {
+ Mode = mode;
+ }
+
///
/// Create a new .
///
@@ -48,4 +57,4 @@
return $"{Mode} {Symbol}";
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UglyToad.PdfPig/Writer/PdfPageBuilder.cs b/src/UglyToad.PdfPig/Writer/PdfPageBuilder.cs
index a16230e9..2279ed7c 100644
--- a/src/UglyToad.PdfPig/Writer/PdfPageBuilder.cs
+++ b/src/UglyToad.PdfPig/Writer/PdfPageBuilder.cs
@@ -340,6 +340,17 @@
return letters;
}
+ ///
+ /// Set the text rendering mode. This will apply to all future calls to AddText until called again.
+ ///
+ /// To insert invisible text, for example output of OCR, use TextRenderingMode.Neither.
+ ///
+ /// Text rendering mode to set.
+ public void SetTextRenderingMode(TextRenderingMode mode)
+ {
+ currentStream.Add(new SetTextRenderingMode(mode));
+ }
+
private NameToken GetAddedFont(PdfDocumentBuilder.AddedFont font)
{
if (!documentFonts.TryGetValue(font.Id, out NameToken value))