プログラム 技術

DeepLAPIでPDFファイルを変換する(C#版)

以前、C#でDeepLAPIについて記事を書きましたが、今回はPDFファイルをDocxファイルに変換できるようになったらしいので確認してみました
※2024年5月現在ではPDFファイルをDocxファイルに変換することができ、他の拡張子は順次実装予定らしいです

関連記事
DeepLAPIを使ってみる - ナストンのまとめ
DeepLAPIを使ってみる - ナストンのまとめ

DeepLAPIを使えるように設定する DeepLのアカウントを作成する 今回は、以下のサイトにある「DeepL API ...

続きを読む

拡張子変換についての公式ドキュメント(英語で書かれている「Document format conversions」という箇所が今回の記事の内容となっています)

公式サイト
Translate documents | Deutsch | DeepL API Docs
Translate documents | Deutsch | DeepL API Docs

続きを読む

翻訳時にファイルの拡張子を変更する

やり方としてはファイルをアップロードする際に【output_format】というパラメーター追加するだけで他は以前の記事と変わりません

var uploadRequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
uploadRequest.Method = "POST";
uploadRequest.Headers.Add("Authorization", "DeepL-Auth-Key " + deepAPIAuthCode);
var multipartFormDataContent = new MultipartFormDataContent();
multipartFormDataContent.Add(new StringContent(sourceLang), "target_lang");
// output_formatを追加する(2024年5月現在はPDFファイルからdocxファイルへの変換のみ)
multipartFormDataContent.Add(new StringContent("docx"), "output_format");
multipartFormDataContent.Add(new ByteArrayContent(File.ReadAllBytes(targetFile)), "file", translatFileName);
uploadRequest.ContentType = multipartFormDataContent.Headers.ContentType.ToString();
uploadRequest.ContentLength = multipartFormDataContent.Headers.ContentLength.Value;
using (var stream = uploadRequest.GetRequestStream())
{
    multipartFormDataContent.CopyToAsync(stream).Wait();
}
using(var response = uploadRequest.GetResponse())
using (var stream = response.GetResponseStream())
{
    var reader = new StreamReader(stream, Encoding.UTF8);
    var result = reader.ReadToEnd();
    var deepLResponseData = JsonSerializer.Deserialize<DocumentUploadResponseData>(result);
    documentId = deepLResponseData.document_id;
    documentKey = deepLResponseData.document_key;
}

注意点

翻訳したファイルをダウンロードする際にファイルの拡張子を.pdfファイルから.docxファイルに変換する必要があります

using (var response = downloadRequest.GetResponse())
using (var stream = response.GetResponseStream())
{
    // ファイルダウンロード時に拡張子をdocxにする必要がある
    translationFile = Path.Combine(translatFilePath, translatFileBaseName + "_JA" + translatFileExt);
    using (var fileStream = new FileStream(translationFile, FileMode.Create, FileAccess.Write))
    {
        stream.CopyTo(fileStream);
    }
}

-プログラム, 技術
-,