検索
ホームページバックエンド開発Golang無料の Excel から PDF へのコンバーターを見つけるのに苦労: 私の旅と解決策

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 までご連絡ください。
GOのINIT関数に依存するテストコードGOのINIT関数に依存するテストコードMay 03, 2025 am 12:20 AM

fatestinggocodewithinit functions、useexplicitsetupfunctionsurseSorseparatet fileStoavoidepencyonInitonitisideEffects.1)useexplicitsetupfuncontrollglobalbariaveInitialization.2)createSeparateSteSteSteStobypassInit funtedtententen

GOのエラー処理アプローチを他の言語と比較しますGOのエラー処理アプローチを他の言語と比較しますMay 03, 2025 am 12:20 AM

Go'serrorhandlingReturnserrorsasasvalues、javaandpython whichuseexceptions.1)go'smethodensuresexpliciterror handling

GOで効果的なインターフェイスを設計するためのベストプラクティスGOで効果的なインターフェイスを設計するためのベストプラクティスMay 03, 2025 am 12:18 AM

効果的なインターフェイスリングミニマル、クリア、およびプロモテスルーシューリング。1)インターフェイスForfforfibilityOfimplementation.2)interfacesforact forabstractiontoswapimplementations withingingcallingcode.3)設計の快適性を発信すること

GOの集中エラー処理戦略GOの集中エラー処理戦略May 03, 2025 am 12:17 AM

集中型エラー処理は、GO言語でのコードの読みやすさと保守性を向上させることができます。その実装方法と利点には、次のものが含まれます。1。ビジネスロジックからロジックを個別に処理し、コードを簡素化します。 2。中央の取り扱いによるエラー処理の一貫性を確保します。 3. DeferとRecoverを使用してパニックをキャプチャおよび処理して、プログラムの堅牢性を高めます。

GOのパッケージ初期化のINIT機能の代替案GOのパッケージ初期化のINIT機能の代替案May 03, 2025 am 12:17 AM

Ingo、AlternativestoinititionCustomInitializationAndSingletons.1)CustomInitializationAltionsionAlowoveroveroveroveroveroveroveroveroveroveroveroveroveroveroveroverover curs、beantefordedorcontionalsetups.2)singletonsensureone-initializatializatializatialent

GOインターフェイスでアサーションとタイプスイッチを入力しますGOインターフェイスでアサーションとタイプスイッチを入力しますMay 02, 2025 am 12:20 AM

gohandlesinterfacesandtypeassertionseffectivivivivivity、強化された柔軟性と耐毒性を強化します

エラーを使用し、エラーを使用して、goでエラー検査を行いますエラーを使用し、エラーを使用して、goでエラー検査を行いますMay 02, 2025 am 12:11 AM

言語エラー処理は、エラーとエラーを介してより柔軟になり、読みやすくなります。 1.エラーは、エラーが指定されたエラーと同じであり、エラーチェーンの処理に適しているかどうかを確認するために使用されます。 2.エラー。エラータイプを確認するだけでなく、エラーを特定のタイプに変換することもできます。これは、エラー情報を抽出するのに便利です。これらの関数を使用すると、エラー処理ロジックを簡素化できますが、エラーチェーンの正しい配信に注意を払い、コードの複雑さを防ぐために過度の依存性を回避できます。

GOのパフォーマンスチューニング:アプリケーションの最適化GOのパフォーマンスチューニング:アプリケーションの最適化May 02, 2025 am 12:06 AM

tomakegogoapplicationsRunfasterAndMore -efficient、useprofilingtools、leverageconconcurrency、andmanagememoryefcectively.1)useprofforcpuandmemoryprofilingtoidentififybottlenecks.2)

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

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