Exemplo n.º 1
0
        public void VerifyPageTextAndFontTest()
        {
            var file = new PdfFile();
            var page = PdfPage.NewLetter();
            var text = new PdfText("foo", new PdfFontType1(PdfFontType1Type.Helvetica), PdfMeasurement.Points(12.0), new PdfPoint(PdfMeasurement.Inches(1.0), PdfMeasurement.Inches(2.0)));

            page.Items.Add(text);
            file.Pages.Add(page);
            AssertFileContains(file, @"
BT
    /F1 12.00 Tf
    72.00 144.00 Td
    [(foo)] TJ
ET
");

            AssertFileContains(file, @"
/Resources <</Font <</F1 5 0 R>>>>
");

            AssertFileContains(file, "<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>");

            text.CharacterWidth = PdfMeasurement.Points(0.25);
            AssertFileContains(file, @"
BT
    /F1 12.00 Tf
    72.00 144.00 Td
    0.25 Tc
    [(foo)] TJ
ET
");
        }
Exemplo n.º 2
0
        private static IEnumerable <IPdfPathItem> ConvertPoint(DxfModelPoint point, DxfLayer layer, Matrix4 affine, Matrix4 scale)
        {
            var p         = affine.Transform(point.Location).ToPdfPoint(PdfMeasurementType.Point);
            var thickness = scale.Transform(new Vector(point.Thickness, 0, 0)).ToPdfPoint(PdfMeasurementType.Point).X;

            if (thickness.RawValue < 1)
            {
                thickness = PdfMeasurement.Points(1);
            }
            // TODO fill circle? For now fake it via stroke thickness.
            var pdfStreamState = new PdfStreamState(
                strokeColor: GetPdfColor(point, layer),
                strokeWidth: thickness);

            yield return(new PdfCircle(p, thickness / 2, pdfStreamState));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates a PDF destination rectangle from the given DXF rectangle and keeps the aspect ratio.
        /// Optionally, a <paramref name="margin"/> can be defined.
        /// </summary>
        /// <param name="srcRect">The DXF source rectangle.</param>
        /// <param name="maxWidth">The maximum width of the PDF output including <paramref name="margin"/>.</param>
        /// <param name="maxHeight">The maximum height of the PDF output including <paramref name="margin"/>.</param>
        /// <param name="margin">[optional] The margin.</param>
        /// <returns>The PDF destination rectangle.</returns>
        public static ConverterPdfRect KeepAspectRatio(ConverterDxfRect srcRect, PdfMeasurement maxWidth,
                                                       PdfMeasurement maxHeight, PdfMeasurement margin = default(PdfMeasurement))
        {
            double maxWidthPts  = maxWidth.AsPoints();
            double maxHeightPts = maxHeight.AsPoints();
            double marginPts    = margin.AsPoints();

            double scaleX = (maxWidthPts - 2 * marginPts) / srcRect.Width;
            double scaleY = (maxHeightPts - 2 * marginPts) / srcRect.Height;
            double scale  = Math.Min(scaleX, scaleY);

            PdfMeasurement left   = margin;
            PdfMeasurement right  = PdfMeasurement.Points(marginPts + scale * srcRect.Width);
            PdfMeasurement bottom = margin;
            PdfMeasurement top    = PdfMeasurement.Points(marginPts + scale * srcRect.Height);

            return(new ConverterPdfRect(left, right, bottom, top));
        }
Exemplo n.º 4
0
        public void VerifyFillTest()
        {
            var builder = new PdfPathBuilder()
            {
                new PdfLine(
                    new PdfPoint(PdfMeasurement.Points(0.0), PdfMeasurement.Points(0.0)),
                    new PdfPoint(PdfMeasurement.Points(1.0), PdfMeasurement.Points(1.0))),
                new PdfLine(
                    new PdfPoint(PdfMeasurement.Points(2.0), PdfMeasurement.Points(2.0)),
                    new PdfPoint(PdfMeasurement.Points(3.0), PdfMeasurement.Points(3.0)),
                    state: new PdfStreamState(strokeWidth: PdfMeasurement.Points(1.1))),
                new PdfLine(
                    new PdfPoint(PdfMeasurement.Points(4.0), PdfMeasurement.Points(4.0)),
                    new PdfPoint(PdfMeasurement.Points(5.0), PdfMeasurement.Points(5.0)),
                    state: new PdfStreamState(nonStrokeColor: new PdfColor(1.0, 0.0, 0.0))),
                new PdfLine(
                    new PdfPoint(PdfMeasurement.Points(6.0), PdfMeasurement.Points(6.0)),
                    new PdfPoint(PdfMeasurement.Points(7.0), PdfMeasurement.Points(7.0)),
                    state: new PdfStreamState(nonStrokeColor: new PdfColor(0.0, 1.0, 0.0), strokeWidth: PdfMeasurement.Points(2.2)))
            };

            AssertPathBuilderContains(builder, @"
0 w
0 0 0 RG
0 0 0 rg
0.00 0.00 m
1.00 1.00 l
S
1.1 w
2.00 2.00 m
3.00 3.00 l
S
0 w
1 0 0 rg
4.00 4.00 m
5.00 5.00 l
S
2.2 w
0 1 0 rg
6.00 6.00 m
7.00 7.00 l
S
");
        }
Exemplo n.º 5
0
        public void AspectRatioIsKept(int maxWidth, int maxHeight)
        {
            ConverterDxfRect src          = new ConverterDxfRect(0, 5, 0, 5);
            PdfMeasurement   pdfMaxWidth  = PdfMeasurement.Points(maxWidth);
            PdfMeasurement   pdfMaxHeight = PdfMeasurement.Points(maxHeight);
            ConverterPdfRect sut          = ConverterPdfRect.KeepAspectRatio(src, pdfMaxWidth, pdfMaxHeight);

            Assert.True(sut.Width.AsPoints() <= maxWidth);
            Assert.True(sut.Height.AsPoints() <= maxHeight);

            Assert.Equal(src.Width, src.Height); // otherwise test below is wrong
            if (maxWidth > maxHeight)
            {
                Assert.Equal(pdfMaxHeight, sut.Height);
            }
            else
            {
                Assert.Equal(pdfMaxWidth, sut.Width);
            }
        }
Exemplo n.º 6
0
        public void VerifyFontsAreReusedTest()
        {
            var file = new PdfFile();
            var page = PdfPage.NewLetter();
            var font = new PdfFontType1(PdfFontType1Type.Helvetica);

            // font used twice on one page
            page.Items.Add(new PdfText("foo", font, PdfMeasurement.Points(12.0), new PdfPoint()));
            page.Items.Add(new PdfText("foo", font, PdfMeasurement.Points(12.0), new PdfPoint()));
            file.Pages.Add(page);

            // font used a third time on another page
            page = PdfPage.NewLetter();
            page.Items.Add(new PdfText("foo", font, PdfMeasurement.Points(12.0), new PdfPoint()));
            file.Pages.Add(page);

            // font objects should only be listed once
            AssertFileContains(file, "/Resources <</Font <</F1 5 0 R>>>>");
            AssertFileDoesNotContain(file, "/Resources <</Font <</F1 5 0 R>> /Font <</F1 5 0 R>>"); // duplicate font resource object
            AssertFileDoesNotContain(file, "/Resources <</Font <</F1 5 0 R>> /Font <</F2 6 0 R>>"); // duplicate font resource
            AssertFileContainsCount(file, "<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>", 1);
        }
Exemplo n.º 7
0
        public void SourceDestinationTransformTest()
        {
            var dxf = new DxfFile();

            // line from (2,2) to (3,3)
            dxf.Entities.Add(new DxfLine(new DxfPoint(2, 2, 0), new DxfPoint(3, 3, 0)));
            var options = new DxfToPdfConverterOptions(PdfMeasurement.Mm(210), PdfMeasurement.Mm(297),
                                                       new ConverterDxfRect(2, 3, 2, 3),
                                                       new ConverterPdfRect(PdfMeasurement.Points(100), PdfMeasurement.Points(200), PdfMeasurement.Points(300), PdfMeasurement.Points(400)));

            var pdf = ConvertToString(dxf, options);
            // expected line from (100,300)pt to (200,400)pt
            var expected = NormalizeCrLf(@"
stream
0 w
0 0 0 RG
0 0 0 rg
100.00 300.00 m
200.00 400.00 l
S
endstream".Trim());

            Assert.Contains(expected, pdf);
        }
Exemplo n.º 8
0
        private static PdfMeasurement GetStrokeWidth(DxfEntity entity, DxfLayer layer)
        {
            // TODO many entities have a Thickness property (which is often zero).
            DxfLineWeight lw = new DxfLineWeight {
                Value = entity.LineweightEnumValue
            };
            DxfLineWeightType type = lw.LineWeightType;

            if (type == DxfLineWeightType.ByLayer)
            {
                lw = layer.LineWeight;
            }
            if (lw.Value == 0)
            {
                return(default(PdfMeasurement));
            }
            if (lw.Value < 0)
            {
                return(PdfMeasurement.Points(1)); // smallest valid stroke width
            }
            // TODO What is the meaning of this short? Some default app-dependent table? DXF spec doesn't tell.
            // QCad 1mm => lw.Value==100
            return(PdfMeasurement.Mm(lw.Value / 100.0));
        }
Exemplo n.º 9
0
        public void VerifyStreamFilterTest()
        {
            var page = new PdfPage(PdfMeasurement.Inches(8.5), PdfMeasurement.Inches(11.0), new ASCIIHexEncoder());
            var text = new PdfText("foo", new PdfFontType1(PdfFontType1Type.Helvetica), PdfMeasurement.Points(12.0), new PdfPoint(PdfMeasurement.Inches(1.0), PdfMeasurement.Inches(1.0)));

            page.Items.Add(text);

            var expected = @"
<</Length 185
  /Filter [/ASCIIHexDecode]
>>
stream
3020770D0A30203020302052470D0A30203020302072670D0A42540D0A202020202F46312031322E30302054660D0A2020202037322E30302037322E30302054
640D0A202020205B28666F6F295D20544A0D0A45540D0A530D0A>
endstream
endobj
";

            AssertPageContains(page, expected);
        }
Exemplo n.º 10
0
        public void VerifyFontsAreAddedOnSaveTest()
        {
            var file = new PdfFile();
            var page = PdfPage.NewLetter();
            var text = new PdfText("foo", new PdfFontType1(PdfFontType1Type.Helvetica), PdfMeasurement.Points(12.0), new PdfPoint());

            page.Items.Add(text);
            file.Pages.Add(page);
            Assert.Equal(0, file.Fonts.Count);

            using (var ms = new MemoryStream())
            {
                file.Save(ms);
            }

            Assert.True(ReferenceEquals(text.Font, file.Fonts.Single()));
        }
Exemplo n.º 11
0
        public void StringEscapeSequencesTest()
        {
            var page = PdfPage.NewLetter();
            var text = new PdfText(@"outer (inner \backslash) after", new PdfFontType1(PdfFontType1Type.Helvetica), PdfMeasurement.Points(12.0), new PdfPoint());

            page.Items.Add(text);
            AssertPageContains(page, @"[(outer \(inner \\backslash\) after)] TJ");
        }
Exemplo n.º 12
0
        public void RawPointsNoopTest()
        {
            var m = PdfMeasurement.Points(42.0);

            Assert.Equal(42.0, m.AsPoints());
        }