mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-14 02:44:58 +08:00
- fix letter's PointSize computation by applying the transform to a rectangle of height fontSize
- add test with rotated letters
This commit is contained in:
22
src/UglyToad.PdfPig.Tests/Fonts/PointSizeTests.cs
Normal file
22
src/UglyToad.PdfPig.Tests/Fonts/PointSizeTests.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
namespace UglyToad.PdfPig.Tests.Fonts
|
||||||
|
{
|
||||||
|
using UglyToad.PdfPig.Tests.Dla;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
public class PointSizeTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void RotatedText()
|
||||||
|
{
|
||||||
|
using (var document = PdfDocument.Open(DlaHelper.GetDocumentPath("complex rotated")))
|
||||||
|
{
|
||||||
|
var page = document.GetPage(1);
|
||||||
|
|
||||||
|
foreach (var letter in page.Letters)
|
||||||
|
{
|
||||||
|
Assert.Equal(12, letter.PointSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -241,20 +241,7 @@
|
|||||||
var renderingMatrix =
|
var renderingMatrix =
|
||||||
TransformationMatrix.FromValues(fontSize * horizontalScaling, 0, 0, fontSize, 0, rise);
|
TransformationMatrix.FromValues(fontSize * horizontalScaling, 0, 0, fontSize, 0, rise);
|
||||||
|
|
||||||
// TODO: this does not seem correct, produces the correct result for now but we need to revisit.
|
var pointSize = Math.Round(transformationMatrix.Multiply(TextMatrices.TextMatrix).Transform(new PdfRectangle(0, 0, 1, fontSize)).Height, 2);
|
||||||
// see: https://stackoverflow.com/questions/48010235/pdf-specification-get-font-size-in-points
|
|
||||||
var fontSizeMatrix = transformationMatrix.Multiply(TextMatrices.TextMatrix).Multiply(fontSize);
|
|
||||||
var pointSize = Math.Round(fontSizeMatrix.A, 2);
|
|
||||||
// Assume a rotated letter
|
|
||||||
if (pointSize == 0)
|
|
||||||
{
|
|
||||||
pointSize = Math.Round(fontSizeMatrix.B, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pointSize < 0)
|
|
||||||
{
|
|
||||||
pointSize *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (bytes.MoveNext())
|
while (bytes.MoveNext())
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user