mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-14 02:44:58 +08:00
Merge pull request #229 from BobLd/fix-point-size
Fix Letter's PointSize computation
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -68,7 +68,6 @@
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The size of the font in points.
|
/// The size of the font in points.
|
||||||
/// <para>This is considered experimental because the calculated value is incorrect for some documents at present.</para>
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double PointSize { get; }
|
public double PointSize { get; }
|
||||||
|
|
||||||
|
@@ -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())
|
||||||
{
|
{
|
||||||
@@ -292,7 +279,7 @@
|
|||||||
var boundingBox = font.GetBoundingBox(code);
|
var boundingBox = font.GetBoundingBox(code);
|
||||||
|
|
||||||
var transformedGlyphBounds = PerformantRectangleTransformer
|
var transformedGlyphBounds = PerformantRectangleTransformer
|
||||||
.Transform(renderingMatrix, textMatrix, transformationMatrix, boundingBox.GlyphBounds);
|
.Transform(renderingMatrix, textMatrix, transformationMatrix, boundingBox.GlyphBounds);
|
||||||
|
|
||||||
var transformedPdfBounds = PerformantRectangleTransformer
|
var transformedPdfBounds = PerformantRectangleTransformer
|
||||||
.Transform(renderingMatrix, textMatrix, transformationMatrix, new PdfRectangle(0, 0, boundingBox.Width, 0));
|
.Transform(renderingMatrix, textMatrix, transformationMatrix, new PdfRectangle(0, 0, boundingBox.Width, 0));
|
||||||
|
Reference in New Issue
Block a user