<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>PDF Tools on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/pdf-tools/</link>
        <description>Recent content in PDF Tools on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Mon, 07 Jul 2025 15:31:40 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/pdf-tools/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>omni-tools</title>
        <link>https://producthunt.programnotes.cn/en/p/omni-tools/</link>
        <pubDate>Mon, 07 Jul 2025 15:31:40 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/omni-tools/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1533382433768-3d403240fa40?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTE4NzM0MjZ8&amp;ixlib=rb-4.1.0" alt="Featured image of post omni-tools" /&gt;&lt;h1 id=&#34;iib0011omni-tools&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/iib0011/omni-tools&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;iib0011/omni-tools&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
        &lt;img src=&#34;src/assets/logo.png&#34; width=&#34;300&#34; /&gt;
        &lt;br /&gt;&lt;br /&gt;
&lt;a href=&#34;https://trendshift.io/repositories/13055&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://trendshift.io/api/badge/repositories/13055&#34; alt=&#34;iib0011%2Fomni-tools | Trendshift&#34; style=&#34;width: 200px;&#34; width=&#34;200&#34;/&gt;&lt;/a&gt;
   &lt;br /&gt;&lt;br /&gt;
&lt;a href=&#34;https://github.com/iib0011/omni-tools/releases&#34;&gt;
          &lt;img src=&#34;https://img.shields.io/badge/version-0.4.0-blue?style=for-the-badge&#34; /&gt;
        &lt;/a&gt;
        &lt;a href=&#34;https://hub.docker.com/r/iib0011/omni-tools&#34;&gt;
          &lt;img src=&#34;https://img.shields.io/docker/pulls/iib0011/omni-tools?style=for-the-badge&amp;logo=docker&#34; /&gt;
        &lt;/a&gt;
        &lt;a href=&#34;https://github.com/iib0011&#34;&gt;
          &lt;img src=&#34;https://img.shields.io/github/stars/iib0011/omni-tools?style=for-the-badge&amp;logo=github&#34; /&gt;
        &lt;/a&gt;
        &lt;a href=&#34;https://github.com/iib0011/omni-tools/blob/main/LICENSE&#34;&gt;
          &lt;img src=&#34;https://img.shields.io/github/license/iib0011/omni-tools?style=for-the-badge&#34; /&gt;
        &lt;/a&gt;
        &lt;a href=&#34;https://discord.gg/SDbbn3hT4b&#34;&gt;
          &lt;img src=&#34;https://img.shields.io/discord/1342971141823664179?label=Discord&amp;style=for-the-badge&#34; /&gt;
        &lt;/a&gt;
        &lt;br /&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;Welcome to OmniTools, a self-hosted web app offering a variety of online tools to simplify everyday tasks.
Whether you are coding, manipulating images/videos, PDFs or crunching numbers, OmniTools has you covered. Please don&amp;rsquo;t
forget to
star the repo to support us.
Here is the &lt;a class=&#34;link&#34; href=&#34;https://omnitools.app&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;demo&lt;/a&gt; website.&lt;/p&gt;
&lt;p&gt;All files are processed entirely on the client side: nothing ever leaves your device.
Plus, the Docker image is super lightweight at just 28MB, making it fast to deploy and easy to self-host.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://producthunt.programnotes.cn/img.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;img.png&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#features&#34; &gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#self-hostrun&#34; &gt;Self-host&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#contribute&#34; &gt;Contribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#contact&#34; &gt;Contact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;features&#34;&gt;Features
&lt;/h2&gt;&lt;p&gt;We strive to offer a variety of tools, including:&lt;/p&gt;
&lt;h2 id=&#34;imagevideobinary-tools&#34;&gt;&lt;strong&gt;Image/Video/Binary Tools&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Image Resizer&lt;/li&gt;
&lt;li&gt;Image Converter&lt;/li&gt;
&lt;li&gt;Video Trimmer&lt;/li&gt;
&lt;li&gt;Video Reverser&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;stringlist-tools&#34;&gt;&lt;strong&gt;String/List Tools&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Case Converters&lt;/li&gt;
&lt;li&gt;List Shuffler&lt;/li&gt;
&lt;li&gt;Text Formatters&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;date-and-time-tools&#34;&gt;&lt;strong&gt;Date and Time Tools&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Date Calculators&lt;/li&gt;
&lt;li&gt;Time Zone Converters&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;math-tools&#34;&gt;&lt;strong&gt;Math Tools&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Generate Prime Numbers&lt;/li&gt;
&lt;li&gt;Generate Perfect Numbers&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;miscellaneous-tools&#34;&gt;&lt;strong&gt;Miscellaneous Tools&lt;/strong&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;JSON Tools&lt;/li&gt;
&lt;li&gt;PDF Tools&lt;/li&gt;
&lt;li&gt;CSV Tools&lt;/li&gt;
&lt;li&gt;And more&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stay tuned as we continue to expand and improve our collection!&lt;/p&gt;
&lt;h2 id=&#34;self-hostrun&#34;&gt;Self-host/Run
&lt;/h2&gt;&lt;h3 id=&#34;docker&#34;&gt;Docker
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -d --name omni-tools --restart unless-stopped -p 8080:80 iib0011/omni-tools:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;docker-compose&#34;&gt;Docker Compose
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;omni-tools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;iib0011/omni-tools:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;omni-tools&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:80&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;contribute&#34;&gt;Contribute
&lt;/h2&gt;&lt;p&gt;This is a React Project with Typescript Material UI. We use icons from &lt;a class=&#34;link&#34; href=&#34;https://icon-sets.iconify.design&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Iconify&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;project-setup&#34;&gt;Project setup
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/iib0011/omni-tools.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; omni-tools
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;create-a-new-tool&#34;&gt;Create a new tool
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run script:create:tool my-tool-name folder1 &lt;span class=&#34;c1&#34;&gt;# npm run script:create:tool split pdf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For tools located under multiple nested directories, use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run script:create:tool my-tool-name folder1/folder2 &lt;span class=&#34;c1&#34;&gt;# npm run script:create:tool compress image/png&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Use &lt;code&gt;folder1\folder2&lt;/code&gt; on Windows.&lt;/p&gt;
&lt;h3 id=&#34;run-tests&#34;&gt;Run tests
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;For e2e tests&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run test:e2e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=iib0011/omni-tools&amp;type=Date&#34;/&gt;
&lt;h2 id=&#34;-looking-to-contribute&#34;&gt;🤝 Looking to contribute?
&lt;/h2&gt;&lt;p&gt;We welcome contributions! You can help by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Reporting bugs&lt;/li&gt;
&lt;li&gt;✅ Suggesting new features in Github issues or &lt;a class=&#34;link&#34; href=&#34;https://tally.so/r/nrkkx2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;✅ Improving documentation&lt;/li&gt;
&lt;li&gt;✅ Submitting pull requests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also join our &lt;a class=&#34;link&#34; href=&#34;https://discord.gg/SDbbn3hT4b&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord server&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;contributors&#34;&gt;Contributors
&lt;/h3&gt;&lt;a href=&#34;https://github.com/iib0011/omni-tools/graphs/contributors&#34;&gt;
  &lt;img src=&#34;https://contrib.rocks/image?repo=iib0011/omni-tools&#34; /&gt;
&lt;/a&gt;
&lt;h2 id=&#34;contact&#34;&gt;Contact
&lt;/h2&gt;&lt;p&gt;For any questions or suggestions, feel free to open an issue or contact me at:
&lt;a class=&#34;link&#34; href=&#34;mailto:ibracool99@gmail.com&#34; &gt;ibracool99@gmail.com&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;This project is licensed under the MIT License. See the &lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
