For the most dependable setup, package wkhtmltopdf and the shared libraries required by that exact build in a custom container image, then deploy the image to Azure App Service. Treat wkhtmltopdf as an operating-system dependency: deploying application code alone does not guarantee the executable or its native libraries are available. Microsoft says software changes that must persist should be included in the Docker image, rather than made interactively inside a running container. See Microsoft’s custom-container guidance.
A built-in Linux runtime with a startup command or file is another option, but the setting does not guarantee that package installation will work. Package-manager availability and permissions depend on the runtime image. This guide explains how to choose between the two approaches, deploy the dependency, and diagnose failures without assuming a particular framework, Linux distribution, or wkhtmltopdf build.
Choose a deployment method
The key decision is whether you need control over the operating-system packages that accompany wkhtmltopdf. Choose a custom container when you need a repeatable, pinned environment. Consider a built-in Linux runtime when keeping Azure’s platform-managed runtime matters more and you have confirmed that it can supply the executable and compatible libraries.
| Approach | Best fit | Main consideration |
|---|---|---|
| Custom container | Your application needs a known wkhtmltopdf build and a controlled set of native libraries. | Install the executable and matching libraries in the image; rebuild and redeploy when they change. |
| Built-in Linux runtime with startup file | You want to use a platform-managed runtime and can verify its package and permission constraints. | A startup command or file configures how the app starts; it does not by itself ensure that apt or any other package manager can install what you need. |
Microsoft recommends version-controlling a custom startup file with the project. Its Python-specific documentation describes the startup-file configuration, while the general Linux Python configuration explains App Service’s runtime settings: Configure a custom startup file for Python apps on Azure App Service on Linux and Configure Linux Python Apps. The Python instructions are relevant only if your application uses that stack; the exact application launch command is framework-specific.
Recommended Free Tools
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Identify the environment before installing anything
Do not start with a package list copied from an unrelated deployment. First establish the environment in which the application will actually run. The binary, its architecture, the base distribution, and the shared-library versions must be compatible with one another.
- Identify the App Service configuration. Record whether the app uses a built-in Linux stack or a custom container. For a custom container, identify its base image and architecture; for a built-in stack, identify the selected runtime.
- Identify the wkhtmltopdf build. Determine which binary you intend to deploy and the operating system and architecture it targets.
- Check the binary’s shared-library requirements against that exact environment. Include the compatible libraries in the deployment artifact. A package name that exists in one Linux distribution may be absent or have a different ABI in another.
- Decide where the dependency will live. For a custom container, install it while building the image. For a built-in runtime, verify the required permissions and package availability before depending on a startup-time installation.
- Confirm the application’s start process. Use the launch command for the actual framework and server. The title alone does not determine whether the app needs a particular command, port, or process manager.
Run wkhtmltopdf from a custom container
A custom image is the clearest choice when you need repeatable control over the executable and its native dependencies. Put the installation steps in the Dockerfile alongside the base image choice, then deploy the resulting image. Microsoft’s guidance is explicit: “To persist changes like registry settings and software installation, make them part of the Docker image.” See Configure a custom container for Azure App Service.
Build and deploy the dependency with the application
- Select a base image compatible with the application. Pin the operating-system family and version that you have verified against the chosen wkhtmltopdf binary.
- Add the binary and required libraries to the Dockerfile. Use packages and installation steps appropriate to that specific base image. There is no single safe package list for every wkhtmltopdf build and Linux distribution.
- Keep the application launch process intact. Configure the image to start the web application using its framework’s real command, rather than making wkhtmltopdf the container’s main process unless that is intentionally how the service is designed.
- Build, deploy, and verify the new image. Exercise PDF generation in the deployed environment and inspect the application or container logs if it fails.
- Rebuild and redeploy for dependency changes. Do not rely on an SSH session to install software into a live container as a deployment method.
This approach puts the executable and libraries under the same image version as the application, making the deployment artifact the source of truth. It also avoids assuming that a change made to a running instance will still be present after a restart or replacement.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Use a startup file with a built-in Linux runtime
If you prefer a built-in runtime, place the application’s startup file in the project and configure App Service’s Startup Command to use it. For Python apps, Microsoft documents configuration through App Service settings and Azure CLI. Follow the instructions for your specific stack rather than copying a Python command into another framework’s app.
Free tools Windows power users keep installed
One-click scans. No signup required.
- Commit the startup file with the application so the command is version-controlled.
- Configure the startup command or file using the instructions for the selected runtime.
- Confirm that the runtime image has the needed package manager, permissions, and compatible libraries.
- Deploy and verify both application startup and a real PDF-generation request.
Consider startup-time package installation only after verifying those runtime constraints. A startup setting controls how the app is launched; it does not establish that the process can install operating-system packages or that such changes will persist. If you cannot make the required dependency reliably available in the built-in image, use a custom container that includes it.
Understand persistence and storage
On Linux custom containers, App Service’s /home persistence is disabled by default; Microsoft documents how to enable persistent shared storage. That setting is for data that belongs in shared storage. It is not a substitute for packaging installed software in the image.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Keep the distinction clear:
- Software dependency: Include wkhtmltopdf and its libraries in the custom image, or establish that the chosen built-in runtime can provide them appropriately.
- Application or user data: Use the storage configuration appropriate to data that must persist. Enabling shared storage does not turn an interactive software installation into a reproducible image build.
- Temporary runtime changes: Do not treat an SSH-made modification as a durable deployment. Microsoft warns that changes made interactively inside a container do not persist through restarts unless they are in shared storage, and directs users to put persistent software installations in the Docker image.
Diagnose common wkhtmltopdf failures
Error names a missing shared library
A loader error such as “libjpeg.so.62” means the deployed executable could not find a required shared library. A Microsoft Q&A thread reports that specific error and suggests libjpeg62-turbo along with other packages for its particular scenario: Application error – wkhtmltopdf missing libjpeg.so.62 on Azure App Service. Treat that thread as an example, not a universal installation recipe. Check the binary’s build and the image’s distribution; package names and ABI compatibility can differ.
- Confirm the deployed executable is the build you intended to ship.
- Check which library is missing in the actual deployment logs.
- Install a compatible library in the image or runtime environment that matches that build.
- If the built-in image cannot provide a consistent compatible set, move to a custom image that pins the operating system and dependencies.
It works until the app restarts or is redeployed
This commonly points to an installation made interactively rather than one included in the deployment artifact. Put software installation steps in the Dockerfile, rebuild the image, and redeploy it. Check persistence settings separately if the item that disappeared is application data in shared storage rather than software.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsThe app starts, but PDF generation fails
Application startup alone does not prove that wkhtmltopdf can run. Test PDF generation in the deployed environment, then inspect the application and container logs for the executable path, permission failures, or loader errors. Verify that the application invokes the deployed binary and that its required libraries are available there.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Package installation fails in a startup command
Do not assume that the runtime has apt, sufficient privileges, or package sources for the required build. Those properties depend on the specific platform-managed image. Verify them for the selected runtime; if they are unsuitable, use a custom container rather than relying on an unverified startup-time install.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Performance and operational checks
The available Microsoft and support references establish deployment and persistence considerations, not a wkhtmltopdf performance benchmark or a universal reliability figure. Measure generation time and resource use in your own App Service configuration, with the pages and workloads your application actually processes.
- Verify successful PDF generation after deployment and after an App Service restart.
- Review logs for executable and shared-library failures when a generation request fails.
- Keep the container image and dependency installation steps together in version control so a deployment can be reproduced.
- Re-test generation when changing the base image, wkhtmltopdf build, or native libraries.
Or skip the browser setup
If your actual goal is a clean image of a web page rather than a PDF generated with wkhtmltopdf, ScreenshotNeo is a separate screenshot API and MCP server for developers; it does not replace wkhtmltopdf for PDF conversion. A single request can return a screenshot in PNG, JPEG, or WebP, or a PDF. The API accepts the documented screenshot parameters, including parameter names used by other screenshot APIs.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners as a visitor and removes 60+ known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots per month with no card required; paid plans start at $5 for 3,000 screenshots.
Sign up free for 1,000 screenshots a month, with no card required.
Frequently Asked Questions
Can I use ScreenshotNeo instead of wkhtmltopdf on Azure App Service?
Only if a website screenshot or rendered page is what you need. ScreenshotNeo is a separate API; it is not a drop-in executable or a general replacement for an application that depends on wkhtmltopdf.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

