diff --git a/README.md b/README.md
index ce28f974d..9d918e8d6 100644
--- a/README.md
+++ b/README.md
@@ -90,7 +90,7 @@ await page.GoToAsync("http://www.google.com"); // In case of fonts being loaded
await page.EvaluateExpressionHandleAsync("document.fonts.ready"); // Wait for fonts to be loaded. Omitting this might result in no text rendered in pdf.
await page.PdfAsync(outputFile);
```
-snippet source | anchor
+snippet source | anchor
### Inject HTML
diff --git a/lib/PuppeteerSharp.Tests/PageTests/PdfTests.cs b/lib/PuppeteerSharp.Tests/PageTests/PdfTests.cs
index 3cc0b7a92..ea4c2e917 100644
--- a/lib/PuppeteerSharp.Tests/PageTests/PdfTests.cs
+++ b/lib/PuppeteerSharp.Tests/PageTests/PdfTests.cs
@@ -3,6 +3,7 @@
using System.Text.Json;
using System.Threading.Tasks;
using NUnit.Framework;
+using PuppeteerSharp.Cdp;
using PuppeteerSharp.Media;
using PuppeteerSharp.Nunit;
@@ -127,6 +128,8 @@ public void PdfOptionsShouldBeSerializable()
{
var pdfOptions = new PdfOptions
{
+ Width = 100,
+ Height = 100,
Format = PaperFormat.A4,
DisplayHeaderFooter = true,
MarginOptions = new MarginOptions
@@ -145,25 +148,13 @@ public void PdfOptionsShouldBeSerializable()
}
[Test]
- public void PdfOptionsShouldWorkWithMarginWithNoUnits()
+ public void ConvertPrintParameterToInchesTests()
{
- var pdfOptions = new PdfOptions
- {
- Format = PaperFormat.A4,
- DisplayHeaderFooter = true,
- MarginOptions = new MarginOptions
- {
- Top = "0",
- Right = "0",
- Bottom = "0",
- Left = "0"
- },
- FooterTemplate = "
"
- };
-
- var serialized = JsonSerializer.Serialize(pdfOptions);
- var newPdfOptions = JsonSerializer.Deserialize(serialized);
- Assert.That(newPdfOptions, Is.EqualTo(pdfOptions));
+ Assert.That(CdpPage.ConvertPrintParameterToInches("10"), Is.EqualTo(10m / 96));
+ Assert.That(CdpPage.ConvertPrintParameterToInches("10px"), Is.EqualTo(10m / 96));
+ Assert.That(CdpPage.ConvertPrintParameterToInches("0"), Is.EqualTo(0));
+ Assert.That(CdpPage.ConvertPrintParameterToInches("0px"), Is.EqualTo(0));
+ Assert.That(CdpPage.ConvertPrintParameterToInches("10in"), Is.EqualTo(10));
}
}
}
diff --git a/lib/PuppeteerSharp/BrowserData/Chrome.cs b/lib/PuppeteerSharp/BrowserData/Chrome.cs
index 7522fa3d8..8b3fe7ef6 100644
--- a/lib/PuppeteerSharp/BrowserData/Chrome.cs
+++ b/lib/PuppeteerSharp/BrowserData/Chrome.cs
@@ -13,7 +13,7 @@ public static class Chrome
///
/// Default chrome build.
///
- public static string DefaultBuildId => "128.0.6613.119";
+ public static string DefaultBuildId => "129.0.6668.100";
internal static async Task ResolveBuildIdAsync(ChromeReleaseChannel channel)
=> (await GetLastKnownGoodReleaseForChannel(channel).ConfigureAwait(false)).Version;
diff --git a/lib/PuppeteerSharp/Cdp/CdpPage.cs b/lib/PuppeteerSharp/Cdp/CdpPage.cs
index 94db19b92..792a9f305 100644
--- a/lib/PuppeteerSharp/Cdp/CdpPage.cs
+++ b/lib/PuppeteerSharp/Cdp/CdpPage.cs
@@ -731,6 +731,48 @@ internal static async Task CreateAsync(
}
}
+ internal static decimal ConvertPrintParameterToInches(object parameter)
+ {
+ if (parameter == null)
+ {
+ return 0;
+ }
+
+ decimal pixels;
+ if (parameter is decimal or int)
+ {
+ pixels = Convert.ToDecimal(parameter, CultureInfo.CurrentCulture);
+ }
+ else
+ {
+ var text = parameter.ToString();
+ var unit = text.Length > 2 ? text.Substring(text.Length - 2).ToLower(CultureInfo.CurrentCulture) : string.Empty;
+ string valueText;
+ if (GetPixels(unit) is { })
+ {
+ valueText = text.Substring(0, text.Length - 2);
+ }
+ else
+ {
+ // In case of unknown unit try to parse the whole parameter as number of pixels.
+ // This is consistent with phantom's paperSize behavior.
+ unit = "px";
+ valueText = text;
+ }
+
+ if (decimal.TryParse(valueText, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var number))
+ {
+ pixels = number * GetPixels(unit).Value;
+ }
+ else
+ {
+ throw new ArgumentException($"Failed to parse parameter value: '{text}'", nameof(parameter));
+ }
+ }
+
+ return pixels / 96;
+ }
+
///
protected override async Task ExposeFunctionAsync(string name, Delegate puppeteerFunction)
{
@@ -1214,48 +1256,6 @@ await PrimaryTargetClient.SendAsync(
}
}
- private decimal ConvertPrintParameterToInches(object parameter)
- {
- if (parameter == null)
- {
- return 0;
- }
-
- decimal pixels;
- if (parameter is decimal or int)
- {
- pixels = Convert.ToDecimal(parameter, CultureInfo.CurrentCulture);
- }
- else
- {
- var text = parameter.ToString();
- var unit = text.Length > 2 ? text.Substring(text.Length - 2).ToLower(CultureInfo.CurrentCulture) : string.Empty;
- string valueText;
- if (GetPixels(unit) is { })
- {
- valueText = text.Substring(0, text.Length - 2);
- }
- else
- {
- // In case of unknown unit try to parse the whole parameter as number of pixels.
- // This is consistent with phantom's paperSize behavior.
- unit = "px";
- valueText = text;
- }
-
- if (decimal.TryParse(valueText, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var number))
- {
- pixels = number * GetPixels(unit).Value;
- }
- else
- {
- throw new ArgumentException($"Failed to parse parameter value: '{text}'", nameof(parameter));
- }
- }
-
- return pixels / 96;
- }
-
private Clip GetIntersectionRect(Clip clip, BoundingBox viewport)
{
var x = Math.Max(clip.X, viewport.X);
diff --git a/lib/PuppeteerSharp/Helpers/Json/PrimitiveTypeConverter.cs b/lib/PuppeteerSharp/Helpers/Json/PrimitiveTypeConverter.cs
new file mode 100644
index 000000000..e16772c64
--- /dev/null
+++ b/lib/PuppeteerSharp/Helpers/Json/PrimitiveTypeConverter.cs
@@ -0,0 +1,65 @@
+#nullable enable
+
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace PuppeteerSharp.Helpers.Json
+{
+ ///
+ /// Support types (, and )
+ /// used by and for serialization / deserialization.
+ /// For usecases like .
+ ///
+ internal sealed class PrimitiveTypeConverter : JsonConverter