目次
悔しい経験
ビジネスツール
オンラインサービス
オープンソース ライブラリ
ヘッドレス モードの LibreOffice
私のソリューションの仕組み
主な機能
一時ディレクトリ方式
実装の詳細
ワークフロー
スタートガイド
GitHub リポジトリ
Docker イメージ
Docker コンテナを実行します
他の言語との統合の例
C#
Node.js
Python
行きます
課題とトレードオフ
画像サイズ
価値がある理由
結論
ホームページ バックエンド開発 Golang 無料の Excel から PDF へのコンバーターを見つけるのに苦労: 私の旅と解決策

無料の Excel から PDF へのコンバーターを見つけるのに苦労: 私の旅と解決策

Jan 12, 2025 pm 04:05 PM

The Struggle of Finding a Free Excel to PDF Converter: My Journey and Solution

多くのプロジェクトでは、レポートの生成、データの共有、ドキュメントの作成など、Excel ファイルを PDF 形式に変換する必要があります。多くの開発者と同様、私も当初、これは簡単に自動化できるタスクだと考えていました。ただし、無料で信頼性の高いソリューションを見つける旅には、制限、互換性の問題、高価な商用ツールなどの課題が伴います。

最終的に、私はこれらの困難を克服し、独自の Excel to PDF コンバータ を構築し、同じジレンマに直面する可能性のある他の開発者がオープンソース ツールとして利用できるようにしました。


悔しい経験

ビジネスツール

最初の検索結果は、Aspose.Cells、Syncfusion などの有料ソリューションを示していました。これらは強力ですが、ライセンス料が高いため、小規模または個人のプロジェクトには法外な費用がかかります。

オンラインサービス

無料のオンラインコンバーターは良い選択のように思えますが、自動化には適していません。これらのツールには、プライバシーの問題 (ファイルがサードパーティのサーバーにアップロードされるため)、ファイル サイズの制限があり、プログラミング API が提供されていないことがよくあります。

オープンソース ライブラリ

オープンソース ライブラリも調査しましたが、ほとんどのライブラリには Excel ファイルを PDF に変換する機能がありませんでした。この機能を備えたライブラリであっても、多くの場合、信頼性が低いか、最新の Microsoft Office 形式をサポートしていません。


ヘッドレス モードの LibreOffice

数週間検索した結果、ヘッドレス モードで LibreOffice を使用する方法を見つけました。 LibreOffice は、Excel などの複数のファイル形式を PDF に変換できる、無料のオープンソース オフィス スイートです。ヘッドレス モードで実行する場合はコマンド ライン経由で動作するため、自動化に最適です。


私のソリューションの仕組み

開発者が使いやすくするために、REST API として機能する軽量の Go ベースの HTTP サーバー を構築しました。このサーバーは LibreOffice の機能をカプセル化し、あらゆるプログラミング言語が HTTP リクエスト経由で LibreOffice と対話できるようにします。

主な機能

  1. 複数のファイル形式をサポート: .xlsx、.xls、.csv、.docx、.pptx およびその他の形式をサポートします。
  2. 自動クリーンアップ: ディスク領域を節約するために、一時ファイルは 1 時間後に自動的に削除されます。
  3. カスタム フォント: カスタム フォントは、GitHub リポジトリのクローンを作成するか、Docker ボリュームを使用してインストールできます。
  4. 言語間の統合: HTTP をサポートする任意のプログラミング言語で動作します。

一時ディレクトリ方式

システムの一時ディレクトリに依存する代わりに、カスタム ./tmp ディレクトリを使用することにしました。システムの一時ディレクトリには予期しないアクセス許可が設定されている場合があるため、これにより一貫した動作が保証されます。


実装の詳細

ワークフロー

  1. ファイル アップロード: クライアントは /convert エンドポイントを使用して、POST リクエストを通じて Excel ファイルをアップロードします。
  2. 一時ストレージ: サーバーは、タイムスタンプに基づいたファイル名でファイルを ./tmp ディレクトリに保存します。
  3. Convert: ヘッドレス モードで LibreOffice を呼び出してファイルを PDF に変換し、結果を同じディレクトリに保存します。
  4. ファイルのクリーニング: バックグラウンドのゴルーチンは、1 時間より古いファイルを削除します。
  5. Response: 変換された PDF を HTTP レスポンスとして返します。

スタートガイド

GitHub リポジトリ

ソース コードは https://www.php.cn/link/5b1add8961a1cfa07e60838ffd0f83e7 で見つけることができます。

Docker イメージ

このプロジェクトは、Docker イメージ: wteja/pdf-converter も提供します。

Docker コンテナを実行します

<code>docker pull wteja/pdf-converter
docker run -p 5000:5000 wteja/pdf-converter</code>
ログイン後にコピー

他の言語との統合の例

サービスは HTTP 経由で公開されるため、任意のプログラミング言語を使用してサービスを操作できます。

C#

var client = new HttpClient();
var fileContent = new ByteArrayContent(File.ReadAllBytes("example.xlsx"));
var formData = new MultipartFormDataContent { { fileContent, "file", "example.xlsx" } };

var response = await client.PostAsync("http://localhost:5000/convert", formData);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("output.pdf", pdfBytes);
ログイン後にコピー

Node.js

const axios = require("axios");
const FormData = require("form-data");
const fs = require("fs");

const form = new FormData();
form.append("file", fs.createReadStream("example.xlsx"));

axios.post("http://localhost:5000/convert", form, { headers: form.getHeaders() })
  .then(response => fs.writeFileSync("output.pdf", response.data))
  .catch(console.error);
ログイン後にコピー

Python

import requests

with open("example.xlsx", "rb") as f:
    response = requests.post("http://localhost:5000/convert", files={"file": f})

with open("output.pdf", "wb") as f:
    f.write(response.content)
ログイン後にコピー

行きます

package main

import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    file, _ := os.Open("example.xlsx")
    defer file.Close()

    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    part, _ := writer.CreateFormFile("file", "example.xlsx")
    io.Copy(part, file)
    writer.Close()

    req, _ := http.NewRequest("POST", "http://localhost:5000/convert", body)
    req.Header.Set("Content-Type", writer.FormDataContentType())

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()

    out, _ := os.Create("output.pdf")
    defer out.Close()
    io.Copy(out, resp.Body)
}
ログイン後にコピー

課題とトレードオフ

画像サイズ

LibreOffice の依存関係により、Docker イメージのサイズは 2.67 GB です。 Alpine などの小さなイメージをテストしましたが、それらには最新の Microsoft Office 形式と互換性のない古いバージョンの LibreOffice が含まれていました。 Debian は最新の LibreOffice を提供しますが、生成されるイメージは大きくなります (約 3 GB)。

価値がある理由

画像サイズが大きいことは、商用ソリューションのコストと比較して許容できるトレードオフです。セットアップが完了すると、追加のライセンス料金を支払うことなく、イメージを複数のプロジェクトで再利用できます。


結論

無料の Excel から PDF へのコンバーターを見つけるのに苦労した私は、ヘッドレス モードで LibreOffice を使用して独自のソリューションを構築することにしました。完璧ではありませんが、無料で信頼性が高く、柔軟性があります。もしあなたが同じ課題に直面しているなら、このプロジェクトがあなたの時間と労力を節約することを願っています。

GitHub でプロジェクトをチェックアウトするか、Docker Hub から Docker イメージをプルしてください。それがどのように機能するか、または改善のための提案がある場合はお知らせください。

以上が無料の Excel から PDF へのコンバーターを見つけるのに苦労: 私の旅と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golang vs. Python:長所と短所 Golang vs. Python:長所と短所 Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase

See all articles