Skip to content

Commit

Permalink
Added method SetDiskCache to tell Chrome where to cache its content
Browse files Browse the repository at this point in the history
  • Loading branch information
Kees committed Sep 6, 2021
1 parent 0465732 commit a37b130
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 32 deletions.
12 changes: 12 additions & 0 deletions ChromeHtmlToPdfConsole/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,18 @@ public class Options
/// </summary>
[Option("log-network-traffic", Required = false, HelpText = "When enabled network traffic is also logged")]
public bool LogNetworkTraffic { get; set; }

/// <summary>
/// When set then Chrome uses this directory for caching
/// </summary>
[Option("disk-cache-directory", Required = false, Default = false, HelpText = "When set then Chrome uses this directory for caching")]
public string DiskCacheDirectory { get; set; }

/// <summary>
/// When set then Chrome uses this directory for caching
/// </summary>
[Option("disk-cache-size", Required = false, Default = false, HelpText = "The size for the 'disk-cache-directory' in megabytes")]
public long? DiskCacheSize { get; set; }
#endregion
}
}
4 changes: 4 additions & 0 deletions ChromeHtmlToPdfConsole/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,10 @@ private static void SetConverterSettings(Converter converter, Options options)

converter.CaptureSnapshot = options.Snapshot;
converter.LogNetworkTraffic = options.LogNetworkTraffic;

if (!string.IsNullOrWhiteSpace(options.CacheDirectory))
converter.SetDiskCache(options.CacheDirectory, options.CacheSize);

}
#endregion

Expand Down
2 changes: 1 addition & 1 deletion ChromeHtmlToPdfConsole/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"profiles": {
"ChromeHtmlToPdf": {
"commandName": "Project",
"commandLineArgs": "--input \"d:\\test.htm\" --output d:\\test.pdf --media-load-timeout 5000 --image-resize --sanitize-html --log-network-traffic"
"commandLineArgs": "--input \"d:\\test.htm\" --output d:\\test.pdf --media-load-timeout 5000 --log-network-traffic"
}
}
}
2 changes: 1 addition & 1 deletion ChromeHtmlToPdfLib/Browser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ private void _pageConnection_MessageReceived(object sender, string data)

var messageHandler = new EventHandler<string>(delegate(object sender, string data)
{
//System.IO.File.AppendAllText("d:\\logs.txt", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff") + " - " + data + Environment.NewLine);
//System.IO.File.AppendAllText("d:\\logs.txt", $"{DateTime.Now:yyyy-MM-ddTHH:mm:ss.fff} - {data}{Environment.NewLine}");
var message = Message.FromJson(data);

switch (message.Method)
Expand Down
8 changes: 4 additions & 4 deletions ChromeHtmlToPdfLib/ChromeHtmlToPdfLib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;netstandard2.0</TargetFrameworks>
<Version>2.5.2</Version>
<Version>2.5.3</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<Description>ChromeHtmlToPdf is a 100% managed C# .NETStandard 2.0 library that can be used to convert HTML to PDF or PNG format with the use of Google Chrome</Description>
<Copyright>(C)2017-2021 Kees van Spelde</Copyright>
<PackageReleaseNotes>- Updated nuget packages</PackageReleaseNotes>
<PackageReleaseNotes>- Added method SetDiskCache to tell Chrome where to cache its content</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/Sicos1977/ChromeHtmlToPdf</PackageProjectUrl>
<RepositoryUrl>https://github.com/Sicos1977/ChromeHtmlToPdf</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType>
Expand All @@ -19,8 +19,8 @@
<Company>Magic-Sessions</Company>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>ChromeHtmlToPdf.snk</AssemblyOriginatorKeyFile>
<AssemblyVersion>2.5.2.0</AssemblyVersion>
<FileVersion>2.5.2.0</FileVersion>
<AssemblyVersion>2.5.3.0</AssemblyVersion>
<FileVersion>2.5.3.0</FileVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
73 changes: 47 additions & 26 deletions ChromeHtmlToPdfLib/Converter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ private WebProxy WebProxy

_userProfileSet = true;
_devToolsActivePortFile = Path.Combine(userProfileDirectory.FullName, "DevToolsActivePort");
AddChromedArgument("--user-data-dir", userProfileDirectory.FullName);
AddChromeArgument("--user-data-dir", userProfileDirectory.FullName);
}

/// <summary>
Expand Down Expand Up @@ -718,7 +718,7 @@ public void ResetChromeArguments()
AddChromeArgument("--metrics-recording-only");
AddChromeArgument("--no-first-run");
AddChromeArgument("--disable-crash-reporter");
AddChromedArgument("--remote-debugging-port", "0");
AddChromeArgument("--remote-debugging-port", "0");
SetWindowSize(WindowSize.HD_1366_768);
}
#endregion
Expand Down Expand Up @@ -788,7 +788,7 @@ public void AddChromeArgument(string argument)
/// </remarks>
/// <param name="argument">The Chrome argument</param>
/// <param name="value">The argument value</param>
public void AddChromedArgument(string argument, string value)
public void AddChromeArgument(string argument, string value)
{
if (IsChromeRunning)
throw new ChromeException($"Chrome is already running, you need to set the argument '{argument}' before staring Chrome");
Expand Down Expand Up @@ -833,7 +833,7 @@ public void AddChromedArgument(string argument, string value)
public void SetProxyServer(string value)
{
_proxyServer = value;
AddChromedArgument("--proxy-server", value);
AddChromeArgument("--proxy-server", value);
}
#endregion

Expand All @@ -858,7 +858,7 @@ public void SetProxyServer(string value)
public void SetProxyBypassList(string values)
{
_proxyBypassList = values;
AddChromedArgument("--proxy-bypass-list", values);
AddChromeArgument("--proxy-bypass-list", values);
}
#endregion

Expand All @@ -876,7 +876,7 @@ public void SetProxyBypassList(string values)
/// </remarks>
public void SetProxyPacUrl(string value)
{
AddChromedArgument("--proxy-pac-url", value);
AddChromeArgument("--proxy-pac-url", value);
}
#endregion

Expand All @@ -890,7 +890,28 @@ public void SetProxyPacUrl(string value)
/// </remarks>
public void SetUserAgent(string value)
{
AddChromedArgument("--user-agent", value);
AddChromeArgument("--user-agent", value);
}
#endregion

#region SetDiskCache
/// <summary>
/// This tells Chrome to cache it's content to the given <paramref name="directory"/>
/// </summary>
/// <param name="directory">The cache directory</param>
/// <param name="size">The maximum size in megabytes for the cache directory, <c>null</c> for unlimited</param>
public void SetDiskCache(string directory, long? size)
{
if (!Directory.Exists(directory))
throw new DirectoryNotFoundException($"The directory '{directory}' does not exists");

AddChromeArgument("--disk-cache-dir", directory);

if (!size.HasValue) return;
if (size.Value <= 0)
throw new ArgumentException("Has to be a value of 1 or greater", nameof(size));

AddChromeArgument("--disk-cache-size", (size.Value * 1024 * 1024).ToString());
}
#endregion

Expand Down Expand Up @@ -933,7 +954,7 @@ public void SetWindowSize(int width, int height)
if (height <= 0)
throw new ArgumentOutOfRangeException(nameof(height));

AddChromedArgument("--window-size", width + "," + height);
AddChromeArgument("--window-size", width + "," + height);
}

/// <summary>
Expand All @@ -945,58 +966,58 @@ public void SetWindowSize(WindowSize size)
switch (size)
{
case WindowSize.SVGA:
AddChromedArgument("--window-size", 800 + "," + 600);
AddChromeArgument("--window-size", 800 + "," + 600);
break;
case WindowSize.WSVGA:
AddChromedArgument("--window-size", 1024 + "," + 600);
AddChromeArgument("--window-size", 1024 + "," + 600);
break;
case WindowSize.XGA:
AddChromedArgument("--window-size", 1024 + "," + 768);
AddChromeArgument("--window-size", 1024 + "," + 768);
break;
case WindowSize.XGAPLUS:
AddChromedArgument("--window-size", 1152 + "," + 864);
AddChromeArgument("--window-size", 1152 + "," + 864);
break;
case WindowSize.WXGA_5_3:
AddChromedArgument("--window-size", 1280 + "," + 768);
AddChromeArgument("--window-size", 1280 + "," + 768);
break;
case WindowSize.WXGA_16_10:
AddChromedArgument("--window-size", 1280 + "," + 800);
AddChromeArgument("--window-size", 1280 + "," + 800);
break;
case WindowSize.SXGA:
AddChromedArgument("--window-size", 1280 + "," + 1024);
AddChromeArgument("--window-size", 1280 + "," + 1024);
break;
case WindowSize.HD_1360_768:
AddChromedArgument("--window-size", 1360 + "," + 768);
AddChromeArgument("--window-size", 1360 + "," + 768);
break;
case WindowSize.HD_1366_768:
AddChromedArgument("--window-size", 1366 + "," + 768);
AddChromeArgument("--window-size", 1366 + "," + 768);
break;
case WindowSize.OTHER_1536_864:
AddChromedArgument("--window-size", 1536 + "," + 864);
AddChromeArgument("--window-size", 1536 + "," + 864);
break;
case WindowSize.HD_PLUS:
AddChromedArgument("--window-size", 1600 + "," + 900);
AddChromeArgument("--window-size", 1600 + "," + 900);
break;
case WindowSize.WSXGA_PLUS:
AddChromedArgument("--window-size", 1680 + "," + 1050);
AddChromeArgument("--window-size", 1680 + "," + 1050);
break;
case WindowSize.FHD:
AddChromedArgument("--window-size", 1920 + "," + 1080);
AddChromeArgument("--window-size", 1920 + "," + 1080);
break;
case WindowSize.WUXGA:
AddChromedArgument("--window-size", 1920 + "," + 1200);
AddChromeArgument("--window-size", 1920 + "," + 1200);
break;
case WindowSize.OTHER_2560_1070:
AddChromedArgument("--window-size", 2560 + "," + 1070);
AddChromeArgument("--window-size", 2560 + "," + 1070);
break;
case WindowSize.WQHD:
AddChromedArgument("--window-size", 2560 + "," + 1440);
AddChromeArgument("--window-size", 2560 + "," + 1440);
break;
case WindowSize.OTHER_3440_1440:
AddChromedArgument("--window-size", 3440 + "," + 1440);
AddChromeArgument("--window-size", 3440 + "," + 1440);
break;
case WindowSize._4K_UHD:
AddChromedArgument("--window-size", 3840 + "," + 2160);
AddChromeArgument("--window-size", 3840 + "," + 2160);
break;
default:
throw new ArgumentOutOfRangeException(nameof(size), size, null);
Expand Down

0 comments on commit a37b130

Please sign in to comment.