Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

io.fluidsonic.pdf:fluid-pdf-jvm

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

io.fluidsonic.pdf:fluid-pdf-jvm

Easy PDF generation with HTML & CSS using Chromium or Google Chrome

  • 0.20.0
  • Source
  • Maven
  • Socket score

Version published
Maintainers
1
Source

fluid-pdf

Maven Central Kotlin #fluid-libraries Slack Channel

Easy PDF generation with HTML & CSS using Chromium or Google Chrome

Installation

build.gradle.kts:

dependencies {
	implementation("io.fluidsonic.pdf:fluid-pdf:0.20.0")
}

Usage

HTML file to PDF file

import io.fluidsonic.pdf.*
import java.nio.file.*


suspend fun main() {
	// TODO Change the binary file path to your local Chromium or Google Chrome installation.

	val sourceFile = Path.of("input.html").toAbsolutePath()
	val destinationFile = Path.of("output.pdf").toAbsolutePath()

	ChromiumPdfGenerator.launch(
		binaryFile = Path.of("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome")
	).use { generator ->
		generator.generate(PdfGenerationSource.HtmlFile(sourceFile))
			.writeTo(destinationFile)
	}

	println("PDF has been generated at $destinationFile")
}
  • Use ChromiumPdfGenerator.launch() to launch a browser instance for PDF generation.
  • Use ChromiumPdfGenerator.lazy() to launch the browser not immediately but automatically with the first PDF generation.
  • Use ChromiumPdfGenerator's .close() to shut down the browser when you are done generating PDFs.
  • Use PdfGenerator's .generate() to create any number of PDFs.
  • Use PdfGenerator interface to hide implementation details (use of Chromium, .close()) as needed.

HTML string to PDF file

generator.generate(PdfGenerationSource.Html("<strong>Hello world!</strong>"))
	.writeTo(PdfGenerationDestination.File(destinationFile))

💡 Relative paths in HTML & CSS won't resolve. Using <base href="…"> to specify the base path should help.

HTML stream to PDF file

val sourceStream: InputStream = …

generator.generate(PdfGenerationSource.HtmlStream(sourceStream))
	.writeTo(PdfGenerationDestination.File(destinationFile))

💡 Relative paths in HTML & CSS won't resolve. Using <base href="…"> to specify the base path should help.

PDF generation settings

generator.generate(
	source = PdfGenerationSource.Html("<strong>Hello world!</strong>"),
	settings = PdfGenerationSettings.default.copy(
		encryption = PdfEncryption(
			ownerPassword = "secret",
			permissions = PdfPermissions.none.copy(
				contentExtractionAllowed = true,
				contentExtractionForAccessibilityAllowed = true,
				printQuality = PdfPermissions.PrintQuality.high,
			),
		),
		includeBackgrounds = false,
		metadata = PdfMetadata(
			title = "My PDF"
		),
		pageMargins = PdfMargins.cm(top = 2.0, right = 2.0, bottom = 1.0, left = 2.0),
		pageOrientation = PdfOrientation.landscape,
		pageSize = PdfSize.A5,
		preferCssPageSize = false
	)
)
	.writeTo(destinationFile)

Output to stream

generator.generate(PdfGenerationSource.Html("<strong>Hello world!</strong>"))
	.writeTo(outputStream)

💡 Closing the output stream is the responsibility of the caller. It will not be closed automatically.

TO-DO

Contributions welcome 🙏

  • Add unit tests.
  • Add KDoc to all public API.
  • Check if .generate() works well if used from multiple threads and document if that is the case.
  • Add support for header & footer templates.

License

Apache 2.0

FAQs

Package last updated on 05 May 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc