mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-04-05 20:55:01 +08:00
Merge pull request #420 from MeVitae/writer-text-mode
Add `SetTextRenderingMode` method to `PdfPageBuilder`
This commit is contained in:
commit
eac36ceae3
@ -1,4 +1,4 @@
|
||||
namespace UglyToad.PdfPig.Graphics.Core
|
||||
namespace UglyToad.PdfPig.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// The text rendering mode determines whether showing text causes glyph outlines to be stroked, filled, used as a clipping boundary,
|
||||
@ -45,4 +45,4 @@
|
||||
/// </summary>
|
||||
NeitherClip = 7
|
||||
}
|
||||
}
|
||||
}
|
@ -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()
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
namespace UglyToad.PdfPig.Graphics.Operations.TextState
|
||||
{
|
||||
using System.IO;
|
||||
using PdfPig.Core;
|
||||
using Core;
|
||||
|
||||
/// <inheritdoc />
|
||||
@ -22,6 +23,14 @@
|
||||
/// </summary>
|
||||
public TextRenderingMode Mode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Create a new <see cref="SetTextRenderingMode"/>.
|
||||
/// </summary>
|
||||
public SetTextRenderingMode(TextRenderingMode mode)
|
||||
{
|
||||
Mode = mode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new <see cref="SetTextRenderingMode"/>.
|
||||
/// </summary>
|
||||
@ -48,4 +57,4 @@
|
||||
return $"{Mode} {Symbol}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -340,6 +340,17 @@
|
||||
return letters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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 <c>TextRenderingMode.Neither</c>.
|
||||
/// </summary>
|
||||
/// <param name="mode">Text rendering mode to set.</param>
|
||||
public void SetTextRenderingMode(TextRenderingMode mode)
|
||||
{
|
||||
currentStream.Add(new SetTextRenderingMode(mode));
|
||||
}
|
||||
|
||||
private NameToken GetAddedFont(PdfDocumentBuilder.AddedFont font)
|
||||
{
|
||||
if (!documentFonts.TryGetValue(font.Id, out NameToken value))
|
||||
|
Loading…
Reference in New Issue
Block a user